mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-28 23:38:25 +01:00
Properly track block update flags (actually fixes #5038)
This commit is contained in:
parent
2b06877898
commit
630fa37394
2 changed files with 1 additions and 47 deletions
|
@ -1,47 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Shane Freeder <theboyetronic@gmail.com>
|
||||
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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/ItemStack.java
|
||||
+++ b/src/main/java/net/minecraft/server/ItemStack.java
|
||||
@@ -0,0 +0,0 @@ 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);
|
||||
@@ -0,0 +0,0 @@ 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);
|
||||
@@ -0,0 +0,0 @@ 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.
|
|
@ -45,6 +45,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||
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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue