java - Minecraft bukkit spigot 插件传送到另一个世界导致崩溃:服务器滴答循环中的异常
问题描述
我正在为我的我的世界服务器创建一个插件,目的是能够发出命令传送到另一个创造性的超平坦世界。问题是当玩家被传送时,服务器崩溃了。这是我在插件中的代码:
// go world commands
if (cmd.getName().equals("goworld")) {
if (args.length == 0){
sender.sendMessage(ChatColor.DARK_RED + "World not specified");
} else {
// calculate closest player
double closest = Double.MAX_VALUE;
Player closestp = null;
for(Player i : Bukkit.getOnlinePlayers()){
double dist = i.getLocation().distance(blockLoc);
if (closest == Double.MAX_VALUE || dist < closest){
closest = dist;
closestp = i;
}
}
if (closestp == null){
//No players found
}
else{
//the closest player is closestp
closestp.sendMessage(ChatColor.BLUE + "Taking you to " + worldToGo);
try {
JSONObject worldPref = (JSONObject) readJsonSimple(worldToGo + "\\startpos.json");
System.out.println(worldPref.toJSONString());
System.out.println(worldPref.get("x"));
System.out.println(worldPref.get("y"));
System.out.println(worldPref.get("z"));
System.out.println(worldPref.get("pitch"));
System.out.println(worldPref.get("yaw"));
System.out.println(worldPref.get("world"));
List<World> worlds = Bukkit.getWorlds();
for (World world : worlds) {
System.out.println("#########");
System.out.println(world.getName());
}
System.out.println("--------------");
System.out.println(worldPref.get("world").toString());
World newWorld = new WorldCreator(worldToGo).createWorld();
System.out.println(newWorld);
updateLastPos(closestp);
closestp.teleport(
new Location(
newWorld,
(long)worldPref.get("x"),
(long)worldPref.get("y"),
(long)worldPref.get("z")
)
);
closestp.sendMessage(ChatColor.GREEN + "You have entered " + worldToGo);
} catch (Exception e) {
e.printStackTrace();
closestp.sendMessage(ChatColor.RED + "Something went wrong");
}
}
}
}
这是服务器创建的错误:
[18:51:54] [Worker-Main-12/INFO]: Preparing spawn area: 96%
[18:51:54] [Server thread/INFO]: Time elapsed: 6911 ms
[18:51:54] [Server thread/INFO]: [WorldGuard] (world_ntischool) TNT ignition is PERMITTED.
[18:51:54] [Server thread/INFO]: [WorldGuard] (world_ntischool) Lighters are PERMITTED.
[18:51:54] [Server thread/INFO]: [WorldGuard] (world_ntischool) Lava fire is PERMITTED.
[18:51:54] [Server thread/INFO]: [WorldGuard] (world_ntischool) Fire spread is UNRESTRICTED.
[18:51:54] [Server thread/INFO]: [WorldGuard] Loaded configuration for world 'world_ntischool'
[18:51:54] [Server thread/INFO]: CraftWorld{name=world_ntischool}
[18:51:54] [Server thread/ERROR]: Encountered an unexpected exception
java.util.ConcurrentModificationException: null
at java.util.LinkedHashMap$LinkedHashIterator.nextNode(LinkedHashMap.java:758) ~[?:?]
at java.util.LinkedHashMap$LinkedValueIterator.next(LinkedHashMap.java:785) ~[?:?]
at net.minecraft.server.v1_16_R2.MinecraftServer.b(MinecraftServer.java:1087) ~[spigot-1.16.2.jar:git-Spigot-d65430a-bad55db]
at net.minecraft.server.v1_16_R2.DedicatedServer.b(DedicatedServer.java:352) ~[spigot-1.16.2.jar:git-Spigot-d65430a-bad55db]
at net.minecraft.server.v1_16_R2.MinecraftServer.a(MinecraftServer.java:1007) ~[spigot-1.16.2.jar:git-Spigot-d65430a-bad55db]
at net.minecraft.server.v1_16_R2.MinecraftServer.w(MinecraftServer.java:846) ~[spigot-1.16.2.jar:git-Spigot-d65430a-bad55db]
at net.minecraft.server.v1_16_R2.MinecraftServer.lambda$0(MinecraftServer.java:164) ~[spigot-1.16.2.jar:git-Spigot-d65430a-bad55db]
at java.lang.Thread.run(Thread.java:832) [?:?]
就在服务器崩溃之前,我可以看到我已经被传送到另一个位置,但仍然和以前一样在同一个世界上。重新启动并重新登录时,我可以看到我已被传送到与以前相同的世界上的另一个位置。
编辑:我尝试添加以便服务器创建一个新世界并传送到生成点,但服务器仍然崩溃并且游戏超时。
我该如何解决这个问题。谢谢!
解决方案
推荐阅读
- python - 我怎么能用 opencv-python 做 PIL.ImageOps.solarize?
- android - Http 深层链接在 Android 上的 Chrome 中不起作用
- c - 消息缓冲区的结构内存分配问题
- java - response.getWriter().print() 发送一个jsonObjct给jsp,当jsonobject有Long值时,jsp有时会显示long值+1或-1
- javascript - 将javascript字符串更新为数组
- python - 照片图像缩放
- ios - 在不同时间使用回调在 AVAudioPlayer 上播放 mp3 数据(base 64 编码的 mp3 字符串)?
- angular - 共享服务通过引用传递对象
- java - Java 中 JSON 的漂亮打印适用于控制台,但在浏览器中它不起作用
- python - Python 2 vs 3:从字节字符串中获取字节的结果一致