diff options
author | t00thpick1 <t00thpick1dirko@gmail.com> | 2013-12-08 21:50:18 -0500 |
---|---|---|
committer | feildmaster <admin@feildmaster.com> | 2013-12-08 22:39:50 -0600 |
commit | 0aa187f151ad829adc0ec20b8bd662d625d561e7 (patch) | |
tree | 4bea45b180a124f73cd2680b7fdab016e5494f57 /src/main/java/net/minecraft/server | |
parent | c7b4514ad30f3b65500152d18355eec59c5f8909 (diff) | |
download | craftbukkit-0aa187f151ad829adc0ec20b8bd662d625d561e7.tar craftbukkit-0aa187f151ad829adc0ec20b8bd662d625d561e7.tar.gz craftbukkit-0aa187f151ad829adc0ec20b8bd662d625d561e7.tar.lz craftbukkit-0aa187f151ad829adc0ec20b8bd662d625d561e7.tar.xz craftbukkit-0aa187f151ad829adc0ec20b8bd662d625d561e7.zip |
[Bleeding] Ignore Block Physics in Chunk population. Fixes BUKKIT-4923
Suppressing physics updates during Chunk population prevents
infinite recursion due to custom Block Populators editing border
blocks on chunks.
Diffstat (limited to 'src/main/java/net/minecraft/server')
-rw-r--r-- | src/main/java/net/minecraft/server/ChunkProviderServer.java | 9 | ||||
-rw-r--r-- | src/main/java/net/minecraft/server/World.java | 6 |
2 files changed, 13 insertions, 2 deletions
diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java index a702fe82..2f842c3c 100644 --- a/src/main/java/net/minecraft/server/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java @@ -237,8 +237,13 @@ public class ChunkProviderServer implements IChunkProvider { org.bukkit.World world = this.world.getWorld(); if (world != null) { - for (org.bukkit.generator.BlockPopulator populator : world.getPopulators()) { - populator.populate(world, random, chunk.bukkitChunk); + this.world.populating = true; + try { + for (org.bukkit.generator.BlockPopulator populator : world.getPopulators()) { + populator.populate(world, random, chunk.bukkitChunk); + } + } finally { + this.world.populating = false; } } BlockSand.instaFall = false; diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java index f60368bf..f850a0f1 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java @@ -70,6 +70,7 @@ public abstract class World implements IBlockAccess { public boolean callingPlaceEvent = false; public long ticksPerAnimalSpawns; public long ticksPerMonsterSpawns; + public boolean populating; // CraftBukkit end private ArrayList M; private boolean N; @@ -398,6 +399,11 @@ public abstract class World implements IBlockAccess { } public void update(int i, int j, int k, Block block) { + // CraftBukkit start + if (this.populating) { + return; + } + // CraftBukkit end this.applyPhysics(i, j, k, block); } |