diff --git a/patches/server/Fix-tripwire-state-inconsistency.patch b/patches/server/Fix-tripwire-state-inconsistency.patch index bc5a74f562..41e1d819e3 100644 --- a/patches/server/Fix-tripwire-state-inconsistency.patch +++ b/patches/server/Fix-tripwire-state-inconsistency.patch @@ -3,6 +3,7 @@ From: Nassim Jahnke Date: Sun, 19 Dec 2021 21:11:20 +0100 Subject: [PATCH] Fix tripwire state inconsistency +This patch prevents updating and re-setting the tripwire when being removed in certain conditions diff --git a/src/main/java/net/minecraft/world/level/block/TripWireBlock.java b/src/main/java/net/minecraft/world/level/block/TripWireBlock.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 @@ -35,11 +36,32 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 if (iblockdata1.is((Block) this.hook)) { if (iblockdata1.getValue(TripWireHookBlock.FACING) == enumdirection.getOpposite()) { - this.hook.calculateState(world, blockposition1, iblockdata1, false, true, k, state); -+ // Paper - fix state inconsistency -+ final int distance = beingRemoved ? -1 : k; -+ final BlockState self = beingRemoved ? null : state; -+ this.hook.calculateState(world, blockposition1, iblockdata1, false, true, distance, self); -+ // Paper end ++ this.hook.calculateState(world, blockposition1, iblockdata1, false, true, k, state, beingRemoved); // Paper - fix state inconsistency } } else if (iblockdata1.is((Block) this)) { ++k; +diff --git a/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java b/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java ++++ b/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java +@@ -0,0 +0,0 @@ public class TripWireHookBlock extends Block { + } + + public void calculateState(Level world, BlockPos pos, BlockState state, boolean beingRemoved, boolean flag1, int i, @Nullable BlockState iblockdata1) { ++ // Paper start - fix tripwire inconsistency ++ this.calculateState(world, pos, state, beingRemoved, flag1, i, iblockdata1, false); ++ } ++ ++ public void calculateState(Level world, BlockPos pos, BlockState state, boolean beingRemoved, boolean flag1, int i, @Nullable BlockState iblockdata1, boolean tripWireBeingRemoved) { ++ // Paper end + Direction enumdirection = (Direction) state.getValue(TripWireHookBlock.FACING); + boolean flag2 = (Boolean) state.getValue(TripWireHookBlock.ATTACHED); + boolean flag3 = (Boolean) state.getValue(TripWireHookBlock.POWERED); +@@ -0,0 +0,0 @@ public class TripWireHookBlock extends Block { + boolean flag7 = (Boolean) iblockdata2.getValue(TripWireBlock.POWERED); + + flag5 |= flag6 && flag7; ++ if (!tripWireBeingRemoved || (k == i && !flag6)) // Paper - don't update the tripwire again if being removed and not disarmed + aiblockdata[k] = iblockdata2; + if (k == i) { + world.scheduleTick(pos, (Block) this, 10);