From 94dc83b4cf766a8b3a98ec4cd257b4565e1963ab Mon Sep 17 00:00:00 2001 From: Aikar Date: Tue, 18 Sep 2018 19:30:49 -0400 Subject: [PATCH] Make a copy for worldloadevent to avoid como's - fixes #1453 If you try to load a world inresponse to another world loading, a concurrent modification exception will throw. This avoids that by making a defensive copy of the list for the server init stage. you might want to do this if you want to guarantee your world loads immediately after the vanilla worlds before another plugin has a chance to load worlds during POST_WORLD plugin stage. --- Spigot-Server-Patches/Optimize-Server-World-Map.patch | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Spigot-Server-Patches/Optimize-Server-World-Map.patch b/Spigot-Server-Patches/Optimize-Server-World-Map.patch index 4e794e3cd2e..894fa75f5de 100644 --- a/Spigot-Server-Patches/Optimize-Server-World-Map.patch +++ b/Spigot-Server-Patches/Optimize-Server-World-Map.patch @@ -217,7 +217,7 @@ index 0000000000..af9e4455c6 + } +} diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index fb62320310..2912e9ec68 100644 +index fb62320310..98d182fdb8 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -0,0 +0,0 @@ public abstract class MinecraftServer implements IAsyncTaskHandler, IMojangStati @@ -229,4 +229,13 @@ index fb62320310..2912e9ec68 100644 private PlayerList s; private boolean isRunning = true; private boolean isRestarting = false; // Paper - flag to signify we're attempting to restart +@@ -0,0 +0,0 @@ public abstract class MinecraftServer implements IAsyncTaskHandler, IMojangStati + } + } + +- for (WorldServer world : this.getWorlds()) { ++ for (WorldServer world : com.google.common.collect.Lists.newArrayList(this.getWorlds())) { // Paper - avoid como if 1 world triggers another world + this.server.getPluginManager().callEvent(new org.bukkit.event.world.WorldLoadEvent(world.getWorld())); + } + // CraftBukkit end -- \ No newline at end of file