public void callRedstoneEvent(BlockRedstoneEvent event) { boolean on = event.getNewCurrent() > event.getOldCurrent(); for (BlockFace direction : Arrays.asList( BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.UP)) { Block block = event.getBlock().getRelative(direction); if (SignUtil.isSign(block)) { Sign sign = SignUtil.getSign(block); List<SignMechanic> list = redstoneSignMechanicMap.get(SignUtil.getMechanicsIdentifier(sign)); if (list == null) { list = new ArrayList<SignMechanic>(); } if (redstoneSignMechanicMap.containsKey(null)) { list.addAll(redstoneSignMechanicMap.get(null)); } for (SignMechanic mechanic : list) { try { BlockBagHandler bag = null; BlockMap map = null; if (mechanic.hasBlockMapper()) { map = mechanic.mapBlocks(sign); } if (mechanic.hasBlockBag()) { bag = BlockBagHandler.locate(sign); } SignMechanicEventData data = new SignMechanicEventData(map, bag); if (on) { mechanic.onSignPowerOn(data); } else { mechanic.onSignPowerOff(data); } } catch (BlockMapException e) { BetterMechanics.log(e.getMessage()); } catch (BlockBagException e) { BetterMechanics.log(e.getMessage()); } } } else { List<BlockMechanic> list = redstoneBlockMechanicMap.get(block.getType()); if (list == null) { list = new ArrayList<BlockMechanic>(); } if (blockMechanicMap.containsKey(null)) { list.addAll(blockMechanicMap.get(null)); } for (BlockMechanic mechanic : list) { if (on) { mechanic.onBlockPowerOn(event.getBlock()); } else { mechanic.onBlockPowerOff(event.getBlock()); } } } } }
public void callPlayerInteractEvent(PlayerInteractEvent event) { if (SignUtil.isSign(event.getClickedBlock())) { Sign sign = SignUtil.getSign(event.getClickedBlock()); String id = SignUtil.getMechanicsIdentifier(sign); List<SignMechanic> mechanicsList = signMechanicMap.get(id); if (mechanicsList == null) { mechanicsList = new ArrayList<SignMechanic>(); } if (signMechanicMap.containsKey(null)) { mechanicsList.addAll(signMechanicMap.get(null)); } if (redstoneSignMechanicMap.containsKey(id)) { mechanicsList.addAll(redstoneSignMechanicMap.get(id)); } if (redstoneSignMechanicMap.containsKey(null)) { mechanicsList.addAll(redstoneSignMechanicMap.get(null)); } for (SignMechanic mechanic : mechanicsList) { try { BlockBagHandler bag = null; BlockMap map = null; if (mechanic.hasBlockMapper()) { map = mechanic.mapBlocks(sign); } if (mechanic.hasBlockBag()) { bag = BlockBagHandler.locate(sign); } SignMechanicEventData data = new SignMechanicEventData(map, bag); if (event.getAction() == Action.LEFT_CLICK_BLOCK) { mechanic.onPlayerLeftClickSign(event.getPlayer(), data); } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { mechanic.onPlayerRightClickSign(event.getPlayer(), data); } } catch (BlockMapException e) { event.getPlayer().sendMessage(ChatColor.DARK_RED + e.getMessage()); BetterMechanics.log(e.getMessage()); } catch (BlockBagException e) { event.getPlayer().sendMessage(ChatColor.DARK_RED + e.getMessage()); BetterMechanics.log(e.getMessage()); } } } else { List<BlockMechanic> mechanicsList = blockMechanicMap.get(event.getClickedBlock().getType()); if (mechanicsList == null) { mechanicsList = new ArrayList<BlockMechanic>(); } if (blockMechanicMap.containsKey(null)) { mechanicsList.addAll(blockMechanicMap.get(null)); } if (redstoneBlockMechanicMap.containsKey(event.getClickedBlock().getType())) { mechanicsList.addAll(redstoneBlockMechanicMap.get(event.getClickedBlock().getType())); } if (redstoneBlockMechanicMap.containsKey(null)) { mechanicsList.addAll(redstoneBlockMechanicMap.get(null)); } for (BlockMechanic mechanic : mechanicsList) { if (mechanic.getMechanicActivator() == null || mechanic .getMechanicActivator() .contains(event.getPlayer().getItemInHand().getType())) { if (event.getAction() == Action.LEFT_CLICK_BLOCK) { mechanic.onBlockLeftClick(event.getPlayer(), event.getClickedBlock()); } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { mechanic.onBlockRightClick(event.getPlayer(), event.getClickedBlock()); } } } } }