From fc19cbd8009f5d883655aad8ed8c1c4508b10a54 Mon Sep 17 00:00:00 2001
From: Owen1212055 <23108066+Owen1212055@users.noreply.github.com>
Date: Sat, 22 Oct 2022 20:37:37 -0400
Subject: [PATCH] Add Moving Piston API (#7019)

---
 patches/api/Add-Moving-Piston-API.patch    | 55 ++++++++++++++++++++++
 patches/server/Add-Moving-Piston-API.patch | 42 +++++++++++++++++
 2 files changed, 97 insertions(+)
 create mode 100644 patches/api/Add-Moving-Piston-API.patch
 create mode 100644 patches/server/Add-Moving-Piston-API.patch

diff --git a/patches/api/Add-Moving-Piston-API.patch b/patches/api/Add-Moving-Piston-API.patch
new file mode 100644
index 0000000000..1273d15b67
--- /dev/null
+++ b/patches/api/Add-Moving-Piston-API.patch
@@ -0,0 +1,55 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Owen1212055 <23108066+Owen1212055@users.noreply.github.com>
+Date: Sat, 4 Dec 2021 13:29:45 -0500
+Subject: [PATCH] Add Moving Piston API
+
+
+diff --git a/src/main/java/io/papermc/paper/block/MovingPiston.java b/src/main/java/io/papermc/paper/block/MovingPiston.java
+new file mode 100644
+index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
+--- /dev/null
++++ b/src/main/java/io/papermc/paper/block/MovingPiston.java
+@@ -0,0 +0,0 @@
++package io.papermc.paper.block;
++
++import org.bukkit.block.BlockFace;
++import org.bukkit.block.TileState;
++import org.bukkit.block.data.BlockData;
++import org.jetbrains.annotations.NotNull;
++
++public interface MovingPiston extends TileState {
++
++    /**
++     * Gets the block that is being pushed
++     *
++     * @return the pushed block
++     */
++    @NotNull
++    BlockData getMovingBlock();
++
++    /**
++     * The direction that the current moving piston
++     * is pushing/pulling a block in.
++     *
++     * @return the direction
++     */
++    @NotNull
++    BlockFace getDirection();
++
++    /**
++     * Gets if the piston is extending or not.
++     * Returns false if the piston is retracting.
++     *
++     * @return is extending or not
++     */
++    boolean isExtending();
++
++    /**
++     * Returns if this moving piston represents the main piston head
++     * from the original piston.
++     *
++     * @return is the piston head or not
++     */
++    boolean isPistonHead();
++
++}
diff --git a/patches/server/Add-Moving-Piston-API.patch b/patches/server/Add-Moving-Piston-API.patch
new file mode 100644
index 0000000000..6e685c21f3
--- /dev/null
+++ b/patches/server/Add-Moving-Piston-API.patch
@@ -0,0 +1,42 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Owen1212055 <23108066+Owen1212055@users.noreply.github.com>
+Date: Sat, 4 Dec 2021 13:29:36 -0500
+Subject: [PATCH] Add Moving Piston API
+
+
+diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftMovingPiston.java b/src/main/java/org/bukkit/craftbukkit/block/CraftMovingPiston.java
+index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
+--- a/src/main/java/org/bukkit/craftbukkit/block/CraftMovingPiston.java
++++ b/src/main/java/org/bukkit/craftbukkit/block/CraftMovingPiston.java
+@@ -0,0 +0,0 @@ package org.bukkit.craftbukkit.block;
+ import net.minecraft.world.level.block.piston.PistonMovingBlockEntity;
+ import org.bukkit.World;
+ 
+-public class CraftMovingPiston extends CraftBlockEntityState<PistonMovingBlockEntity> {
++public class CraftMovingPiston extends CraftBlockEntityState<PistonMovingBlockEntity> implements io.papermc.paper.block.MovingPiston { // Paper - Add Moving Piston API
+ 
+     public CraftMovingPiston(World world, PistonMovingBlockEntity tileEntity) {
+         super(world, tileEntity);
+     }
++    // Paper start - Add Moving Piston API
++    @Override
++    public org.bukkit.block.data.BlockData getMovingBlock() {
++        return org.bukkit.craftbukkit.block.data.CraftBlockData.fromData(this.getTileEntity().getMovedState());
++    }
++
++    @Override
++    public org.bukkit.block.BlockFace getDirection() {
++        return org.bukkit.craftbukkit.block.CraftBlock.notchToBlockFace(this.getTileEntity().getDirection());
++    }
++
++    @Override
++    public boolean isExtending() {
++        return this.getTileEntity().isExtending();
++    }
++
++    @Override
++    public boolean isPistonHead() {
++        return this.getTileEntity().isSourcePiston();
++    }
++    // Paper end - Add Moving Piston API
+ }