#java #plugins #server #minecraft #bukkit
#java #Плагины #сервер #Minecraft #bukkit
Вопрос:
Я создаю плагин для своего сервера Minecraft, цель которого состоит в том, чтобы иметь возможность выдавать команду для телепортации в другой творческий сверхплоский мир. Проблема в том, что когда игрок телепортируется, сервер выходит из строя. Вот мой код внутри плагина:
// 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) [?:?]
Прямо перед сбоем сервера я вижу, что я был телепортирован в другое место, но все еще в том же мире, что и раньше. При запуске резервного копирования и повторном входе в систему я вижу, что меня телепортировали в другое место в том же мире, что и раньше.
Редактировать: Я попытался добавить так, чтобы сервер создавал новый мир и телепортировался в точку возрождения, но сервер все равно вылетает, и время ожидания игры истекает.
Как я могу это решить. Спасибо!
Комментарии:
1.
world_ntischool
Это существующий мир или вы пытаетесь сгенерировать его перед отправкой плеера?2. Я пробовал оба, но в основном это существующий мир.
3. Если он уже существует, попробуйте использовать getWorld для
newWorld
переменной вместо WorldCreator4. Спасибо, но когда я пытаюсь, getWorld возвращает null