[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.
This commit is contained in:
t00thpick1 2013-12-08 21:50:18 -05:00 committed by feildmaster
parent c7b4514ad3
commit 0aa187f151
2 changed files with 13 additions and 2 deletions

View File

@ -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;

View File

@ -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);
}