From 32d9db82e5a2a7b1746d170349876337b2684b6c Mon Sep 17 00:00:00 2001 From: Travis Watkins Date: Tue, 24 Dec 2013 21:51:15 -0600 Subject: [PATCH] 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. --- src/main/java/net/minecraft/server/Chunk.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java index 014136c18f..bc3dd41dc4 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java @@ -430,13 +430,23 @@ public class Chunk { 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) { block1.remove(this.world, l1, j, i2, block1, k1); } else if (block1 instanceof IContainer && block1 != block) { 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) { return false;