From 506bb66b13d5a4447095569d8ad1d8c8c7654f76 Mon Sep 17 00:00:00 2001 From: Ilya Date: Fri, 11 Feb 2022 00:30:21 +0300 Subject: [PATCH] Works --- .../redguy/extendedpistons/WorldListener.java | 45 ++++++++++++++----- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/src/main/java/ru/redguy/extendedpistons/WorldListener.java b/src/main/java/ru/redguy/extendedpistons/WorldListener.java index 1d599f9..79892ac 100644 --- a/src/main/java/ru/redguy/extendedpistons/WorldListener.java +++ b/src/main/java/ru/redguy/extendedpistons/WorldListener.java @@ -12,6 +12,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.block.BlockPistonExtendEvent; import org.bukkit.event.block.BlockPistonRetractEvent; import org.bukkit.event.block.BlockRedstoneEvent; +import org.bukkit.inventory.InventoryHolder; import org.bukkit.material.PistonBaseMaterial; import java.util.Comparator; @@ -35,14 +36,24 @@ public class WorldListener implements Listener { Block b = block.getRelative(piston.getFacing(), i); if (b.isLiquid() || b.isEmpty()) break; if (b.getPistonMoveReaction().equals(PistonMoveReaction.IGNORE) || b.getPistonMoveReaction().equals(PistonMoveReaction.BLOCK)) { - if (!(b.getType() == Material.CHEST || b.getType() == Material.FURNACE || b.getType() == Material.BURNING_FURNACE)) { - if (ExtendedPistons.INSTANCE.isAllowedTime()) - isMovable = false; - } else { - blocks.add(b); - } + break; } else if (b.getPistonMoveReaction().equals(PistonMoveReaction.BREAK)) { break; + } else if(b.getPistonMoveReaction().equals(PistonMoveReaction.MOVE)) { + if (b.getType() == Material.CHEST || b.getType() == Material.FURNACE || b.getType() == Material.BURNING_FURNACE) { + if (ExtendedPistons.INSTANCE.isAllowedTime()) { + if(b.getType() == Material.CHEST) { + Block b2 = block.getRelative(piston.getFacing(), i+2); + if(b2.getType() == Material.CHEST) { + Chest chest = (Chest) b2.getState(); + InventoryHolder ih = chest.getInventory().getHolder(); + if (ih instanceof DoubleChest) { + isMovable = false; + } else blocks.add(b); + } else blocks.add(b); + } else blocks.add(b); + } else isMovable = false; + } } else { blocks.add(b); } @@ -146,15 +157,25 @@ public class WorldListener implements Listener { Block b = block.getRelative(piston.getFacing(), i); if (b.isLiquid() || b.isEmpty()) break; if (b.getPistonMoveReaction().equals(PistonMoveReaction.IGNORE) || b.getPistonMoveReaction().equals(PistonMoveReaction.BLOCK)) { - if (!(b.getType() == Material.CHEST || b.getType() == Material.FURNACE || b.getType() == Material.BURNING_FURNACE)) { - if (ExtendedPistons.INSTANCE.isAllowedTime()) - isMovable = false; - } else { - blocks.add(b); - } + break; } else if (b.getPistonMoveReaction().equals(PistonMoveReaction.BREAK)) { toBreak = b; break; + } else if(b.getPistonMoveReaction().equals(PistonMoveReaction.MOVE)) { + if (b.getType() == Material.CHEST || b.getType() == Material.FURNACE || b.getType() == Material.BURNING_FURNACE) { + if (ExtendedPistons.INSTANCE.isAllowedTime()) { + if(b.getType() == Material.CHEST) { + Block b2 = block.getRelative(piston.getFacing(), i+2); + if(b2.getType() == Material.CHEST) { + Chest chest = (Chest) b2.getState(); + InventoryHolder ih = chest.getInventory().getHolder(); + if (ih instanceof DoubleChest) { + isMovable = false; + } else blocks.add(b); + } else blocks.add(b); + } else blocks.add(b); + } else isMovable = false; + } } else { blocks.add(b); }