package tv.mineinthebox.essentials.events.gates; import java.util.Arrays; import java.util.List; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockRedstoneEvent; import tv.mineinthebox.essentials.xEssentials; import tv.mineinthebox.essentials.instances.Gate; public class GateRedstoneEvent implements Listener { private final xEssentials pl; public GateRedstoneEvent(xEssentials pl) { this.pl = pl; } @EventHandler public void onRedstone(BlockRedstoneEvent e) { if(e.getNewCurrent() > 0) { if(e.getBlock().getType() == Material.REDSTONE_WIRE || e.getBlock().getType() == Material.DIODE_BLOCK_OFF || e.getBlock().getType() == Material.DIODE_BLOCK_ON) { return; } for(Gate gate : pl.getManagers().getGateManager().getGates()) { if(doesMatch(e.getBlock(), gate)) { if(gate.isToggled()) { gate.toggleGate(); } else { gate.toggleGate(); } break; } } if(pl.getManagers().getGateManager().isGateFrameBlock(e.getBlock())) { Gate gate = pl.getManagers().getGateManager().getGateFromFrameBlock(e.getBlock()); if(gate instanceof Gate) { gate.toggleGate(); } } } } private boolean doesMatch(Block block, Gate gate) { BlockFace[] faces = {BlockFace.SELF, BlockFace.UP, BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST}; for(BlockFace face : faces) { Block newblock = block.getRelative(face); List<Block> blocks = Arrays.asList(gate.getFrameBlocks()); if(blocks.contains(newblock)) { return true; } } return false; } }