diff --git a/Spigot-Server-Patches/Don-t-create-a-chunk-just-to-unload-it.patch b/Spigot-Server-Patches/Don-t-create-a-chunk-just-to-unload-it.patch index dd13216022..a7383e0793 100644 --- a/Spigot-Server-Patches/Don-t-create-a-chunk-just-to-unload-it.patch +++ b/Spigot-Server-Patches/Don-t-create-a-chunk-just-to-unload-it.patch @@ -14,7 +14,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 private boolean unloadChunk0(int x, int z, boolean save, boolean safe) { - net.minecraft.server.Chunk chunk = world.getChunkProviderServer().getChunkAt(x, z); + // Paper start - Don't create a chunk just to unload it -+ net.minecraft.server.Chunk chunk = world.getChunkProviderServer().getLoadedChunkAt(x, z); ++ net.minecraft.server.Chunk chunk = world.getChunkProviderServer().getChunkIfLoaded(x, z); + if (chunk == null) { + return false; + } diff --git a/Spigot-Server-Patches/Fix-Chunk-Unload-Queue-Issues.patch b/Spigot-Server-Patches/Fix-Chunk-Unload-Queue-Issues.patch new file mode 100644 index 0000000000..fc35bf1b09 --- /dev/null +++ b/Spigot-Server-Patches/Fix-Chunk-Unload-Queue-Issues.patch @@ -0,0 +1,68 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Aikar +Date: Thu, 12 May 2016 02:03:56 -0400 +Subject: [PATCH] Fix Chunk Unload Queue Issues + +Vanilla implemented similar logic as Paper had pre 1.9.4, but Spigot +has not resolved all the bugs with the changes. + +This patch fixes known issues and really should be applied by Spigot team. + +diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/server/Chunk.java ++++ b/src/main/java/net/minecraft/server/Chunk.java +@@ -0,0 +0,0 @@ public class Chunk { + private long w; + private int x; + private ConcurrentLinkedQueue y; +- public boolean d; ++ public boolean d;public void setShouldUnload(boolean unload) { this.d = unload; } public boolean isUnloading() { return d; } // Paper // OBFHELPER + protected gnu.trove.map.hash.TObjectIntHashMap entityCount = new gnu.trove.map.hash.TObjectIntHashMap(); // Spigot + + // Paper start +diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java ++++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java +@@ -0,0 +0,0 @@ public class ChunkProviderServer implements IChunkProvider { + Chunk chunk = (Chunk) this.chunks.get(olong); + + if (chunk != null && chunk.d) { ++ chunk.setShouldUnload(false); // Paper + // CraftBukkit start + ChunkUnloadEvent event = new ChunkUnloadEvent(chunk.bukkitChunk); + this.world.getServer().getPluginManager().callEvent(event); +diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java ++++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +@@ -0,0 +0,0 @@ public class CraftWorld implements World { + // Use the default variant of loadChunk when generate == true. + return world.getChunkProviderServer().getChunkAt(x, z) != null; + } ++ // Paper start - below is not updated for the new unload queue logic. ++ return world.getChunkProviderServer().getOrLoadChunkAt(x, z) != null; ++ /* + + world.getChunkProviderServer().unloadQueue.remove(ChunkCoordIntPair.a(x, z)); + net.minecraft.server.Chunk chunk = world.getChunkProviderServer().chunks.get(ChunkCoordIntPair.a(x, z)); +@@ -0,0 +0,0 @@ public class CraftWorld implements World { + chunk = world.getChunkProviderServer().getOrLoadChunkAt(x, z); + world.timings.syncChunkLoadTimer.stopTiming(); // Spigot + } +- return chunk != null; ++ return chunk != null;*/ // Paper end + } + + private void chunkLoadPostProcess(net.minecraft.server.Chunk chunk, int cx, int cz) { +@@ -0,0 +0,0 @@ public class CraftWorld implements World { + } + + // Already unloading? +- if (cps.unloadQueue.contains(ChunkCoordIntPair.a(chunk.locX, chunk.locZ))) { ++ if (chunk.isUnloading()) { // Paper + continue; + } + +-- \ No newline at end of file diff --git a/Spigot-Server-Patches/Unmark-chunk-as-unloading-when-unload-is-cancelled.patch b/Spigot-Server-Patches/Unmark-chunk-as-unloading-when-unload-is-cancelled.patch deleted file mode 100644 index bbc1525d1b..0000000000 --- a/Spigot-Server-Patches/Unmark-chunk-as-unloading-when-unload-is-cancelled.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Aikar -Date: Thu, 12 May 2016 02:03:56 -0400 -Subject: [PATCH] Unmark chunk as unloading when unload is cancelled - - -diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/net/minecraft/server/Chunk.java -+++ b/src/main/java/net/minecraft/server/Chunk.java -@@ -0,0 +0,0 @@ public class Chunk { - private long w; - private int x; - private ConcurrentLinkedQueue y; -- public boolean d; -+ public boolean d;public void setShouldUnload(boolean unload) { this.d = unload; } // Paper // OBFHELPER - protected gnu.trove.map.hash.TObjectIntHashMap entityCount = new gnu.trove.map.hash.TObjectIntHashMap(); // Spigot - - // Paper start -diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java -index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/net/minecraft/server/ChunkProviderServer.java -+++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java -@@ -0,0 +0,0 @@ public class ChunkProviderServer implements IChunkProvider { - Chunk chunk = (Chunk) this.chunks.get(olong); - - if (chunk != null && chunk.d) { -+ chunk.setShouldUnload(false); // Paper - // CraftBukkit start - ChunkUnloadEvent event = new ChunkUnloadEvent(chunk.bukkitChunk); - this.world.getServer().getPluginManager().callEvent(event); --- -2.7.4 (Apple Git-66) -