mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-04 16:34:44 +01:00
6e71f41536
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 CraftBukkit Changes: 65247583f SPIGOT-7857: Improve ItemMeta block data deserialization 05d80500d SPIGOT-7857: Fix spurious internal NBT tag when deserializing BlockStateMeta cebb58e9a SPIGOT-7804: Fix written book serialization efcdd5d38 SPIGOT-7794: Cancelling InventoryItemMoveEvent destroys items b568ba572 SPIGOT-7789: Fix NPE in CraftMetaFirework applyToItem f057cf449 Remove outdated build delay Spigot Changes: f6a48054 SPIGOT-7835: Fix issue with custom hopper settings bb63b137 Rebuild patches e1142b4d Rebuild patches
41 lines
2.6 KiB
Diff
41 lines
2.6 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
|
Date: Mon, 1 May 2023 18:31:26 -0700
|
|
Subject: [PATCH] Break redstone on top of trap doors early
|
|
|
|
This logic hooks into the neighbour update which should be invoked
|
|
as a result of redstone powering the trap door.
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/level/block/TrapDoorBlock.java b/src/main/java/net/minecraft/world/level/block/TrapDoorBlock.java
|
|
index 26096c28f654118b0d541f33c659fbc43b34509b..2b5fdcb12dcd8730df24113b9a6d295f000dd9f6 100644
|
|
--- a/src/main/java/net/minecraft/world/level/block/TrapDoorBlock.java
|
|
+++ b/src/main/java/net/minecraft/world/level/block/TrapDoorBlock.java
|
|
@@ -153,7 +153,26 @@ public class TrapDoorBlock extends HorizontalDirectionalBlock implements SimpleW
|
|
flag1 = eventRedstone.getNewCurrent() > 0;
|
|
}
|
|
// CraftBukkit end
|
|
- if ((Boolean) state.getValue(TrapDoorBlock.OPEN) != flag1) {
|
|
+ // Paper start - break redstone on trapdoors early
|
|
+ boolean open = (Boolean) state.getValue(TrapDoorBlock.OPEN) != flag1;
|
|
+ // note: this must run before any state for this block/its neighborus are written to the world
|
|
+ // we allow the redstone event to fire so that plugins can block
|
|
+ if (flag1 && open) { // if we are now powered and it caused the trap door to open
|
|
+ // in this case, first check for the redstone on top first
|
|
+ BlockPos abovePos = pos.above();
|
|
+ BlockState above = world.getBlockState(abovePos);
|
|
+ if (above.getBlock() instanceof RedStoneWireBlock) {
|
|
+ world.setBlock(abovePos, Blocks.AIR.defaultBlockState(), Block.UPDATE_CLIENTS | Block.UPDATE_NEIGHBORS);
|
|
+ Block.popResource(world, abovePos, new net.minecraft.world.item.ItemStack(net.minecraft.world.item.Items.REDSTONE));
|
|
+ // now check that this didn't change our state
|
|
+ if (world.getBlockState(pos) != state) {
|
|
+ // our state was changed, so we cannot propagate this update
|
|
+ return;
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ if (open) {
|
|
+ // Paper end - break redstone on trapdoors early
|
|
state = (BlockState) state.setValue(TrapDoorBlock.OPEN, flag1);
|
|
this.playSound((Player) null, world, pos, flag1);
|
|
}
|