aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0493-Prevent-headless-pistons-from-being-created.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0493-Prevent-headless-pistons-from-being-created.patch')
-rw-r--r--patches/server/0493-Prevent-headless-pistons-from-being-created.patch51
1 files changed, 51 insertions, 0 deletions
diff --git a/patches/server/0493-Prevent-headless-pistons-from-being-created.patch b/patches/server/0493-Prevent-headless-pistons-from-being-created.patch
new file mode 100644
index 0000000000..9361ff6c4a
--- /dev/null
+++ b/patches/server/0493-Prevent-headless-pistons-from-being-created.patch
@@ -0,0 +1,51 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: commandblockguy <[email protected]>
+Date: Fri, 14 Aug 2020 14:44:14 -0500
+Subject: [PATCH] Prevent headless pistons from being created
+
+Prevent headless pistons from being created by explosions or tree/mushroom growth.
+
+diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java
+index 4fb6b2153117f54a2b0ca940de4c0ee2fa85e20e..09755771f8a3b2f696dc9c33916546fc1d5ac4ba 100644
+--- a/src/main/java/com/destroystokyo/paper/PaperConfig.java
++++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java
+@@ -468,4 +468,10 @@ public class PaperConfig {
+ maxPlayerAutoSavePerTick = (playerAutoSaveRate == -1 || playerAutoSaveRate > 100) ? 10 : 20;
+ }
+ }
++
++ public static boolean allowHeadlessPistons;
++ private static void allowHeadlessPistons() {
++ config.set("settings.unsupported-settings.allow-headless-pistons-readme", "This setting controls if players should be able to create headless pistons.");
++ allowHeadlessPistons = getBoolean("settings.unsupported-settings.allow-headless-pistons", false);
++ }
+ }
+diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java
+index f0c789d339fe8402c9c2a684d7e0415fa298b20e..6795132318a4e8b4c7a33b6f4b89a730ea66b97f 100644
+--- a/src/main/java/net/minecraft/world/level/Explosion.java
++++ b/src/main/java/net/minecraft/world/level/Explosion.java
+@@ -34,6 +34,8 @@ import net.minecraft.world.level.block.BaseFireBlock;
+ import net.minecraft.world.level.block.Block;
+ import net.minecraft.world.level.block.Blocks;
+ import net.minecraft.world.level.block.entity.BlockEntity;
++import net.minecraft.world.level.block.piston.PistonHeadBlock;
++import net.minecraft.world.level.block.piston.PistonMovingBlockEntity;
+ import net.minecraft.world.level.block.state.BlockState;
+ import net.minecraft.world.level.gameevent.GameEvent;
+ import net.minecraft.world.level.material.FluidState;
+@@ -188,6 +190,15 @@ public class Explosion {
+
+ if (f > 0.0F && this.damageCalculator.shouldBlockExplode(this, this.level, blockposition, iblockdata, f)) {
+ set.add(blockposition);
++ // Paper start - prevent headless pistons from forming
++ if (!com.destroystokyo.paper.PaperConfig.allowHeadlessPistons && iblockdata.getBlock() == Blocks.MOVING_PISTON) {
++ BlockEntity extension = this.level.getBlockEntity(blockposition);
++ if (extension instanceof PistonMovingBlockEntity && ((PistonMovingBlockEntity) extension).isSourcePiston()) {
++ net.minecraft.core.Direction direction = iblockdata.getValue(PistonHeadBlock.FACING);
++ set.add(blockposition.relative(direction.getOpposite()));
++ }
++ }
++ // Paper end
+ }
+
+ d4 += d0 * 0.30000001192092896D;