mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-18 12:48:53 +01:00
da9d110d5b
This patch does not appear to be doing anything useful, and may hide errors. Currently, the save logic does not run through this path either so it did not do anything. Additionally, properly implement support for handling RegionFileSizeException in Moonrise.
40 lines
2.6 KiB
Diff
40 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 a7d52f2f9c324c5af979fc39b3662ebc880e36fb..872e52e13293a99d45f93d90d8fa7f6aa99d1f3a 100644
|
|
--- a/src/main/java/net/minecraft/world/level/block/TrapDoorBlock.java
|
|
+++ b/src/main/java/net/minecraft/world/level/block/TrapDoorBlock.java
|
|
@@ -157,7 +157,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);
|
|
}
|