From 880a910a9b93c20045dd82bb0c2970c9e49c6ebb Mon Sep 17 00:00:00 2001 From: Shane Freeder Date: Mon, 11 Jan 2021 19:08:03 +0000 Subject: [PATCH] Properly track block update flags (actually fixes #5038) --- ...e-implementations-for-captured-block.patch | 7 +-- ...eighbour-updates-when-using-debug-st.patch | 47 ------------------- 2 files changed, 4 insertions(+), 50 deletions(-) delete mode 100644 Spigot-Server-Patches/0620-Do-not-perform-neighbour-updates-when-using-debug-st.patch diff --git a/Spigot-Server-Patches/0177-use-CB-BlockState-implementations-for-captured-block.patch b/Spigot-Server-Patches/0177-use-CB-BlockState-implementations-for-captured-block.patch index 1e26ab41a..64b878b6d 100644 --- a/Spigot-Server-Patches/0177-use-CB-BlockState-implementations-for-captured-block.patch +++ b/Spigot-Server-Patches/0177-use-CB-BlockState-implementations-for-captured-block.patch @@ -18,7 +18,7 @@ the blockstate that will be valid for restoration, as opposed to dropping information on restoration when the event is cancelled. diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 327a668f1306f1ec90e63598da925fce576e6ed5..54d7d0da6ee998319db2454372ca283a9d571cdb 100644 +index f3ac45a5936c2fbf3b013bfbb904effed5241e15..33444cd8aec8ce39fb4fef232909cd42ef036d54 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java @@ -71,7 +71,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { @@ -39,16 +39,17 @@ index 327a668f1306f1ec90e63598da925fce576e6ed5..54d7d0da6ee998319db2454372ca283a if (blockstate == null) { blockstate = CapturedBlockState.getTreeBlockState(this, blockposition, i); this.capturedBlockStates.put(blockposition.immutableCopy(), blockstate); -@@ -313,7 +313,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -313,7 +313,8 @@ public abstract class World implements GeneratorAccess, AutoCloseable { // CraftBukkit start - capture blockstates boolean captured = false; if (this.captureBlockStates && !this.capturedBlockStates.containsKey(blockposition)) { - CapturedBlockState blockstate = CapturedBlockState.getBlockState(this, blockposition, i); + CraftBlockState blockstate = (CraftBlockState) world.getBlockAt(blockposition.getX(), blockposition.getY(), blockposition.getZ()).getState(); // Paper - use CB getState to get a suitable snapshot ++ blockstate.setFlag(i); // Paper - set flag this.capturedBlockStates.put(blockposition.immutableCopy(), blockstate); captured = true; } -@@ -571,7 +571,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -571,7 +572,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { public IBlockData getType(BlockPosition blockposition) { // CraftBukkit start - tree generation if (captureTreeGeneration) { diff --git a/Spigot-Server-Patches/0620-Do-not-perform-neighbour-updates-when-using-debug-st.patch b/Spigot-Server-Patches/0620-Do-not-perform-neighbour-updates-when-using-debug-st.patch deleted file mode 100644 index f7d6b5399..000000000 --- a/Spigot-Server-Patches/0620-Do-not-perform-neighbour-updates-when-using-debug-st.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Shane Freeder -Date: Tue, 22 Dec 2020 22:41:12 +0000 -Subject: [PATCH] Do not perform neighbour updates when using debug stick - -CB blindly drops any update flags when recording block modifications, -this causes the debug stick to blindly update neighbouring blocks on usage -in order to control this, we will special case this item, however, this -ideally should be fixed by recording the actual update flags used, -but will induce ABI breaks... - -This patch also maintains the behavior of the BlockPlaceEvent, this -behavior will NOT be guaranteed in the future, however. - -diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java -index 3adb29f004d2fee36f3ee9b21ee5417e84b64837..c84a062d38dcf8c46781b0e30bf3e0821e34dd58 100644 ---- a/src/main/java/net/minecraft/server/ItemStack.java -+++ b/src/main/java/net/minecraft/server/ItemStack.java -@@ -211,6 +211,7 @@ public final class ItemStack { - } - - public EnumInteractionResult placeItem(ItemActionContext itemactioncontext, EnumHand enumhand) { // CraftBukkit - add hand -+ boolean doPhysicsUpdate = true; // Paper - EntityHuman entityhuman = itemactioncontext.getEntity(); - BlockPosition blockposition = itemactioncontext.getClickPosition(); - ShapeDetectorBlock shapedetectorblock = new ShapeDetectorBlock(itemactioncontext.getWorld(), blockposition, false); -@@ -228,7 +229,11 @@ public final class ItemStack { - // special case bonemeal - if (this.getItem() == Items.BONE_MEAL) { - world.captureTreeGeneration = true; -+ // Paper start -+ } else if (this.getItem() instanceof ItemDebugStick) { -+ doPhysicsUpdate = false; - } -+ // Paper end - } - Item item = this.getItem(); - EnumInteractionResult enuminteractionresult = item.a(itemactioncontext); -@@ -316,7 +321,7 @@ public final class ItemStack { - block.getBlock().onPlace(block, world, newblockposition, oldBlock, true, itemactioncontext); // Paper - pass itemactioncontext - } - -- world.notifyAndUpdatePhysics(newblockposition, null, oldBlock, block, world.getType(newblockposition), updateFlag, 512); // send null chunk as chunk.k() returns false by this point -+ world.notifyAndUpdatePhysics(newblockposition, null, oldBlock, block, world.getType(newblockposition), updateFlag | (doPhysicsUpdate ? 0 : 16), 512); // send null chunk as chunk.k() returns false by this point // Paper - } - - // Special case juke boxes as they update their tile entity. Copied from ItemRecord.