diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java index 6a5fe5b3e..72701d166 100644 --- a/src/main/java/net/minecraft/server/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java @@ -25,7 +25,6 @@ public class ChunkProviderServer implements IChunkProvider { private IChunkLoader e; public boolean forceChunkLoad = false; // true -> false public LongObjectHashMap chunks = new LongObjectHashMap(); - public List chunkList = new ArrayList(); public WorldServer world; // CraftBukkit end @@ -70,7 +69,7 @@ public class ChunkProviderServer implements IChunkProvider { } public void a() { - Iterator iterator = this.chunkList.iterator(); + Iterator iterator = this.chunks.values().iterator(); // CraftBukkit while (iterator.hasNext()) { Chunk chunk = (Chunk) iterator.next(); @@ -98,7 +97,6 @@ public class ChunkProviderServer implements IChunkProvider { } this.chunks.put(i, j, chunk); // CraftBukkit - this.chunkList.add(chunk); if (chunk != null) { chunk.addEntities(); } @@ -216,7 +214,7 @@ public class ChunkProviderServer implements IChunkProvider { public boolean saveChunks(boolean flag, IProgressUpdate iprogressupdate) { int i = 0; - Iterator iterator = this.chunkList.iterator(); + Iterator iterator = this.chunks.values().iterator(); // CraftBukkit while (iterator.hasNext()) { Chunk chunk = (Chunk) iterator.next(); @@ -263,7 +261,6 @@ public class ChunkProviderServer implements IChunkProvider { this.saveChunkNOP(chunk); // this.unloadQueue.remove(integer); this.chunks.remove(chunkcoordinates); // CraftBukkit - this.chunkList.remove(chunk); } } // CraftBukkit end diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java index 30e80c502..0f788626b 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -164,7 +164,9 @@ public class CraftWorld implements World { if (chunk.mustSave) { // If chunk had previously been queued to save, must do save to avoid loss of that data save = true; } + chunk.removeEntities(); // Always remove entities - even if discarding, need to get them out of world table + if (save && !(chunk instanceof EmptyChunk)) { world.chunkProviderServer.saveChunk(chunk); world.chunkProviderServer.saveChunkNOP(chunk); @@ -172,7 +174,6 @@ public class CraftWorld implements World { world.chunkProviderServer.unloadQueue.remove(x, z); world.chunkProviderServer.chunks.remove(x, z); - world.chunkProviderServer.chunkList.remove(chunk); return true; } @@ -242,7 +243,6 @@ public class CraftWorld implements World { private void chunkLoadPostProcess(net.minecraft.server.Chunk chunk, int x, int z) { if (chunk != null) { world.chunkProviderServer.chunks.put(x, z, chunk); - world.chunkProviderServer.chunkList.add(chunk); chunk.addEntities();