aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-Server-Patches/0409-Fire-BlockPistonRetractEvent-for-all-empty-pistons.patch
diff options
context:
space:
mode:
Diffstat (limited to 'Spigot-Server-Patches/0409-Fire-BlockPistonRetractEvent-for-all-empty-pistons.patch')
-rw-r--r--Spigot-Server-Patches/0409-Fire-BlockPistonRetractEvent-for-all-empty-pistons.patch50
1 files changed, 50 insertions, 0 deletions
diff --git a/Spigot-Server-Patches/0409-Fire-BlockPistonRetractEvent-for-all-empty-pistons.patch b/Spigot-Server-Patches/0409-Fire-BlockPistonRetractEvent-for-all-empty-pistons.patch
new file mode 100644
index 0000000000..a6d13d2990
--- /dev/null
+++ b/Spigot-Server-Patches/0409-Fire-BlockPistonRetractEvent-for-all-empty-pistons.patch
@@ -0,0 +1,50 @@
+From c9cd937ba5a7735bb88c1be1b478d0adcc871a9a Mon Sep 17 00:00:00 2001
+From: Zach Brown <[email protected]>
+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
+index dbe0ff33a0..0109484e0a 100644
+--- 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());
+--
+2.21.0
+