Only delay removing containers. Fixes BUKKIT-5238

In commit f94b7af8 I delay removing the block until after running the
block's cleanup code to avoid errors. However, this causes problems of
its own due to blocks not being written with this in mind. To avoid blocks
getting recursively removed we now only delay removing containers since
they are the only ones we had problems with to begin with.
This commit is contained in:
Travis Watkins 2013-12-24 21:51:15 -06:00
parent c57e45dcdc
commit 32d9db82e5

View File

@ -430,13 +430,23 @@ public class Chunk {
block1.f(this.world, l1, j, i2, k1); block1.f(this.world, l1, j, i2, k1);
} }
// chunksection.setTypeId(i, j & 15, k, block); // CraftBukkit - Moved down // CraftBukkit start - Delay removing containers until after they're cleaned up
if (!(block1 instanceof IContainer)) {
chunksection.setTypeId(i, j & 15, k, block);
}
// CraftBukkit end
if (!this.world.isStatic) { if (!this.world.isStatic) {
block1.remove(this.world, l1, j, i2, block1, k1); block1.remove(this.world, l1, j, i2, block1, k1);
} else if (block1 instanceof IContainer && block1 != block) { } else if (block1 instanceof IContainer && block1 != block) {
this.world.p(l1, j, i2); this.world.p(l1, j, i2);
} }
chunksection.setTypeId(i, j & 15, k, block); // CraftBukkit - Set new block after cleaning up old one
// CraftBukkit start - Remove containers now after cleanup
if (block1 instanceof IContainer) {
chunksection.setTypeId(i, j & 15, k, block);
}
// CraftBukkit end
if (chunksection.getTypeId(i, j & 15, k) != block) { if (chunksection.getTypeId(i, j & 15, k) != block) {
return false; return false;