2019-03-20 02:46:00 +01:00
|
|
|
From 5554a8ccf3d8199dea0a55f4104cd265c4d39b06 Mon Sep 17 00:00:00 2001
|
2019-01-31 22:45:43 +01:00
|
|
|
From: Zach Brown <zach@zachbr.io>
|
|
|
|
Date: Thu, 31 Jan 2019 16:33:36 -0500
|
|
|
|
Subject: [PATCH] Fire BlockPistonRetractEvent for all empty pistons
|
|
|
|
|
|
|
|
There is an explicit check in the handling code for empty pistons that
|
|
|
|
prevents sticky pistons from firing the event. However when we look back
|
|
|
|
at the history we see that this check was originally added so that ONLY
|
|
|
|
sticky pistons would fire the retract event. I'm not sure why.
|
|
|
|
https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/commits/1092acbddf07edfa4100bc6824504ac75088e913
|
|
|
|
|
|
|
|
Over the course of several updates, the meaning of that field appears to
|
|
|
|
have changed from "is NOT sticky" to "is sticky". So now its having the
|
|
|
|
opposite effect. Only normal pistons fire the retraction event. And like
|
|
|
|
all things in CB, it's just been carried around since.
|
|
|
|
|
|
|
|
If we are to believe the history, the correct fix for this issue is to
|
|
|
|
flip it so it only fires for sticky pistons, but that puts us in a
|
|
|
|
bind. It's already firing for non-sticky pistons, changing it now would
|
|
|
|
likely result in breakage. Furthermore, there is little documentation as
|
|
|
|
to WHY that was ever intended to be the case.
|
|
|
|
|
|
|
|
Instead we opt to remove the check entirely so that the event fires for
|
|
|
|
all piston types.
|
|
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/BlockPiston.java b/src/main/java/net/minecraft/server/BlockPiston.java
|
2019-03-20 01:28:15 +01:00
|
|
|
index dbe0ff33a..0109484e0 100644
|
2019-01-31 22:45:43 +01:00
|
|
|
--- a/src/main/java/net/minecraft/server/BlockPiston.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/BlockPiston.java
|
|
|
|
@@ -118,7 +118,7 @@ public class BlockPiston extends BlockDirectional {
|
|
|
|
}
|
|
|
|
|
|
|
|
// CraftBukkit start
|
|
|
|
- if (!this.sticky) {
|
|
|
|
+ //if (!this.sticky) { // Paper - Prevents empty sticky pistons from firing retract - history behind is odd
|
|
|
|
org.bukkit.block.Block block = world.getWorld().getBlockAt(blockposition.getX(), blockposition.getY(), blockposition.getZ());
|
|
|
|
BlockPistonRetractEvent event = new BlockPistonRetractEvent(block, ImmutableList.<org.bukkit.block.Block>of(), CraftBlock.notchToBlockFace(enumdirection));
|
|
|
|
world.getServer().getPluginManager().callEvent(event);
|
|
|
|
@@ -126,7 +126,7 @@ public class BlockPiston extends BlockDirectional {
|
|
|
|
if (event.isCancelled()) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
- }
|
|
|
|
+ //} // Paper
|
|
|
|
// PAIL: checkME - what happened to setTypeAndData?
|
|
|
|
// CraftBukkit end
|
|
|
|
world.playBlockAction(blockposition, this, b0, enumdirection.a());
|
|
|
|
--
|
2019-03-20 01:28:15 +01:00
|
|
|
2.21.0
|
2019-01-31 22:45:43 +01:00
|
|
|
|