public static Optional<Integer> getBlockIndirectPowerLevel(Location<?> block) { if (getBlockPowerLevel(block).isPresent()) { return getBlockPowerLevel(block); } else if (block.getProperty(IndirectlyPoweredProperty.class).isPresent()) { return Optional.of(block.getProperty(IndirectlyPoweredProperty.class).get().getValue() ? 15 : 0); } return Optional.empty(); }
public static TernaryState isPowered(Location<World> block, Direction face) { Location<World> pow = block.getRelative(face); if (isPowerSource(pow)) { if (getBlockPowerLevel(pow).orElse(0) > 0 || getBlockIndirectPowerLevel(pow).orElse(0) > 0) return TernaryState.TRUE; return TernaryState.FALSE; } return TernaryState.NONE; }
@Listener public void onBlockUpdate(NotifyNeighborBlockEvent event, @First LocatableBlock source) { if(!allowRedstone.getValue()) return; Location<World> block = source.getLocation(); if (isValid(block)) { Player player = event.getCause().first(Player.class).orElse(null); boolean isPowered = BlockUtil.getBlockPowerLevel(block).orElse(0) > 0; boolean wasPowered = block.get(CraftBookKeys.LAST_POWER).orElse(0) > 0; if (isPowered && !wasPowered) { triggerMechanic(block, player); } block.offer(new LastPowerData(isPowered ? 15 : 0)); } }
@Listener public void onBlockUpdate(NotifyNeighborBlockEvent event, @First LocatableBlock source) { if(!allowRedstone.getValue()) return; if(!SignUtil.isSign(source.getLocation())) return; Location<World> block = source.getLocation(); Sign sign = (Sign) block.getTileEntity().get(); if (isMechanicSign(sign)) { Player player = event.getCause().first(Player.class).orElse(null); if(player != null) { if(!usePermissions.hasPermission(player)) { player.sendMessage(USE_PERMISSIONS); return; } } boolean isPowered = BlockUtil.getBlockPowerLevel(block).orElse(0) > 0; boolean wasPowered = block.get(CraftBookKeys.LAST_POWER).orElse(0) > 0; if (isPowered != wasPowered) { triggerMechanic(block, sign, player, isPowered); block.offer(new LastPowerData(isPowered ? 15 : 0)); } } }
@Listener public void onBlockUpdate(NotifyNeighborBlockEvent event, @First LocatableBlock source) { if(!allowRedstone.getValue()) return; if(!SignUtil.isSign(source.getLocation())) return; Location<World> block = source.getLocation(); Sign sign = (Sign) block.getTileEntity().get(); if (isMechanicSign(sign)) { Player player = event.getCause().first(Player.class).orElse(null); if(player != null) { if(!usePermissions.hasPermission(player)) { player.sendMessage(USE_PERMISSIONS); return; } } boolean isPowered = BlockUtil.getBlockPowerLevel(block).orElse(0) > 0; boolean wasPowered = block.get(CraftBookKeys.LAST_POWER).orElse(0) > 0; if (isPowered != wasPowered) { triggerMechanic(block, sign, isPowered); block.offer(new LastPowerData(isPowered ? 15 : 0)); } } }
@Listener public void onBlockUpdate(NotifyNeighborBlockEvent event, @First LocatableBlock source) { if(!redstoneFuel.getValue()) return; if(!SignUtil.isSign(source.getLocation())) return; Location<World> block = source.getLocation(); Sign sign = (Sign) block.getTileEntity().get(); if (isMechanicSign(sign)) { Player player = event.getCause().first(Player.class).orElse(null); if(player != null) { if(!refuelPermissions.hasPermission(player)) { player.sendMessage(Text.of("You don't have permission to refuel this mechanic!")); return; } } int newPower = BlockUtil.getBlockPowerLevel(block).orElse(0); int oldPower = block.get(CraftBookKeys.LAST_POWER).orElse(0); if (newPower != oldPower) { if (newPower > oldPower) { increaseMultiplier(sign, newPower - oldPower); } block.offer(new LastPowerData(newPower)); } } }