diff options
author | Thinkofdeath <thinkofdeath@spigotmc.org> | 2014-12-15 13:46:41 +0000 |
---|---|---|
committer | Thinkofdeath <thinkofdeath@spigotmc.org> | 2014-12-15 13:46:41 +0000 |
commit | 28f37a113c57b56f3b6340712b74af6be0959ebc (patch) | |
tree | 56ab6c4a785a2f2a2521f9e296e052360dcf5b2e | |
parent | f6bfbb9851366ff22035cb3e8b5690bed449d739 (diff) | |
download | craftbukkit-28f37a113c57b56f3b6340712b74af6be0959ebc.tar craftbukkit-28f37a113c57b56f3b6340712b74af6be0959ebc.tar.gz craftbukkit-28f37a113c57b56f3b6340712b74af6be0959ebc.tar.lz craftbukkit-28f37a113c57b56f3b6340712b74af6be0959ebc.tar.xz craftbukkit-28f37a113c57b56f3b6340712b74af6be0959ebc.zip |
Fix entities freezing when a chunk is regenerated
-rw-r--r-- | src/main/java/org/bukkit/craftbukkit/CraftWorld.java | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java index ad05e073..9d3be571 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -258,27 +258,29 @@ public class CraftWorld implements World { return chunk != null; } - private void chunkLoadPostProcess(net.minecraft.server.Chunk chunk, int x, int z) { + private void chunkLoadPostProcess(net.minecraft.server.Chunk chunk, int cx, int cz) { if (chunk != null) { - world.chunkProviderServer.chunks.put(LongHash.toLong(x, z), chunk); + world.chunkProviderServer.chunks.put(LongHash.toLong(cx, cz), chunk); chunk.addEntities(); - if (!chunk.done && world.chunkProviderServer.isChunkLoaded(x + 1, z + 1) && world.chunkProviderServer.isChunkLoaded(x, z + 1) && world.chunkProviderServer.isChunkLoaded(x + 1, z)) { - world.chunkProviderServer.getChunkAt(world.chunkProviderServer, x, z); - } - - if (world.chunkProviderServer.isChunkLoaded(x - 1, z) && !world.chunkProviderServer.getOrCreateChunk(x - 1, z).done && world.chunkProviderServer.isChunkLoaded(x - 1, z + 1) && world.chunkProviderServer.isChunkLoaded(x, z + 1) && world.chunkProviderServer.isChunkLoaded(x - 1, z)) { - world.chunkProviderServer.getChunkAt(world.chunkProviderServer, x - 1, z); - } + // Update neighbor counts + for (int x = -2; x < 3; x++) { + for (int z = -2; z < 3; z++) { + if (x == 0 && z == 0) { + continue; + } - if (world.chunkProviderServer.isChunkLoaded(x, z - 1) && !world.chunkProviderServer.getOrCreateChunk(x, z - 1).done && world.chunkProviderServer.isChunkLoaded(x + 1, z - 1) && world.chunkProviderServer.isChunkLoaded(x, z - 1) && world.chunkProviderServer.isChunkLoaded(x + 1, z)) { - world.chunkProviderServer.getChunkAt(world.chunkProviderServer, x, z - 1); + net.minecraft.server.Chunk neighbor = world.chunkProviderServer.getChunkIfLoaded(chunk.locX + x, chunk.locZ + z); + if (neighbor != null) { + neighbor.setNeighborLoaded(-x, -z); + chunk.setNeighborLoaded(x, z); + } + } } + // CraftBukkit end - if (world.chunkProviderServer.isChunkLoaded(x - 1, z - 1) && !world.chunkProviderServer.getOrCreateChunk(x - 1, z - 1).done && world.chunkProviderServer.isChunkLoaded(x - 1, z - 1) && world.chunkProviderServer.isChunkLoaded(x, z - 1) && world.chunkProviderServer.isChunkLoaded(x - 1, z)) { - world.chunkProviderServer.getChunkAt(world.chunkProviderServer, x - 1, z - 1); - } + chunk.loadNearby(world.chunkProviderServer, world.chunkProviderServer, cx, cz); } } |