13
0
geforkt von Mirrors/Paper

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.
Dieser Commit ist enthalten in:
Travis Watkins 2013-12-24 21:51:15 -06:00
Ursprung c57e45dcdc
Commit 32d9db82e5

Datei anzeigen

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