ef0e5a642d
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 9ae3f10f SPIGOT-3842: Add Player#fireworkBoost() and expand Firework API 48c0c547 PR-786: Add methods to get sounds from entities CraftBukkit Changes: 5cc9c022a SPIGOT-7152: Handle hand item changing during air interact event 4ffa1acf6 SPIGOT-7154: Players get kicked when interacting with a conversation 4daa21123 SPIGOT-3842: Add Player#fireworkBoost() and expand Firework API e5d6a9bbf PR-1100: Add methods to get sounds from entities b7e9f1c8b SPIGOT-7146: Reduce use of Material switch in ItemMeta Spigot Changes: 4c157bb4 Rebuild patches
68 Zeilen
4.0 KiB
Diff
68 Zeilen
4.0 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Nassim Jahnke <nassim@njahnke.dev>
|
|
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 4e2fb4ee8e46b3c363992ff23e26f5a648c5f003..7f60175bf671d282c11e9084670d2bb900968255 100644
|
|
--- a/src/main/java/net/minecraft/world/level/block/TripWireBlock.java
|
|
+++ b/src/main/java/net/minecraft/world/level/block/TripWireBlock.java
|
|
@@ -74,7 +74,7 @@ public class TripWireBlock extends Block {
|
|
@Override
|
|
public void onRemove(BlockState state, Level world, BlockPos pos, BlockState newState, boolean moved) {
|
|
if (!moved && !state.is(newState.getBlock())) {
|
|
- this.updateSource(world, pos, (BlockState) state.setValue(TripWireBlock.POWERED, true));
|
|
+ this.updateSource(world, pos, (BlockState) state.setValue(TripWireBlock.POWERED, true), true); // Paper - fix state inconsistency
|
|
}
|
|
}
|
|
|
|
@@ -89,6 +89,12 @@ public class TripWireBlock extends Block {
|
|
}
|
|
|
|
private void updateSource(Level world, BlockPos pos, BlockState state) {
|
|
+ // Paper start - fix state inconsistency
|
|
+ this.updateSource(world, pos, state, false);
|
|
+ }
|
|
+
|
|
+ private void updateSource(Level world, BlockPos pos, BlockState state, boolean beingRemoved) {
|
|
+ // Paper end
|
|
Direction[] aenumdirection = new Direction[]{Direction.SOUTH, Direction.WEST};
|
|
int i = aenumdirection.length;
|
|
int j = 0;
|
|
@@ -104,7 +110,7 @@ public class TripWireBlock extends Block {
|
|
|
|
if (iblockdata1.is((Block) this.hook)) {
|
|
if (iblockdata1.getValue(TripWireHookBlock.FACING) == enumdirection.getOpposite()) {
|
|
- this.hook.calculateState(world, blockposition1, iblockdata1, false, true, k, state);
|
|
+ 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 4a516828e5c6abd63511ee7c93fcff11203cf8d0..004dce26ff073f1de52a84cd425c4f60fdab5e50 100644
|
|
--- a/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java
|
|
+++ b/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java
|
|
@@ -108,6 +108,12 @@ 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);
|
|
@@ -141,6 +147,7 @@ public class TripWireHookBlock extends Block {
|
|
boolean flag7 = (Boolean) iblockdata2.getValue(TripWireBlock.POWERED);
|
|
|
|
flag5 |= flag6 && flag7;
|
|
+ if (k != i || !tripWireBeingRemoved || !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);
|