package tv.mineinthebox.essentials.events.signs; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.Dispenser; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockDispenseEvent; import org.bukkit.event.block.SignChangeEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.material.Sign; import tv.mineinthebox.essentials.xEssentials; import tv.mineinthebox.essentials.enums.PermissionKey; import tv.mineinthebox.essentials.interfaces.EventTemplate; public class DispenseSignEvent extends EventTemplate implements Listener { public DispenseSignEvent(xEssentials pl) { super(pl, "DispenseSign"); } @EventHandler public void onCreate(SignChangeEvent e) { if(e.getLine(0).equalsIgnoreCase("[dispense]") || e.getLine(0).equalsIgnoreCase("[dispenser]")) { if(e.getPlayer().hasPermission(PermissionKey.SIGN_DISPENSER_CREATE.getPermission())) { Sign sign = (Sign) e.getBlock().getState().getData(); if(e.getBlock().getRelative(sign.getAttachedFace()).getType() == Material.DISPENSER) { e.setLine(0, ChatColor.BLUE + "[Dispense]"); sendMessage(e.getPlayer(), ChatColor.GREEN + "you successfully placed a dispense sign!"); } else { sendMessage(e.getPlayer(), ChatColor.RED + "your sign has to be attached to a dispenser!"); e.setCancelled(true); } } else { sendMessage(e.getPlayer(), ChatColor.RED + "you are not allowed to make dispense signs!"); e.setCancelled(true); } } } @EventHandler public void onPower(BlockDispenseEvent e) { if(e.getBlock().getType() == Material.DISPENSER) { if(hasNearbySign(e.getBlock())) { org.bukkit.block.Sign sign = getSign(e.getBlock()); if(sign.getLine(0).equalsIgnoreCase(ChatColor.BLUE + "[Dispense]")) { Dispenser disp = (Dispenser) e.getBlock().getState(); for(ItemStack stack : disp.getInventory().getContents()) { if(stack != null) { ItemStack clone = stack.clone(); clone.setAmount(64); disp.getInventory().addItem(clone); } } } } } } private org.bukkit.block.Sign getSign(Block block) { BlockFace[] faces = {BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST}; for(BlockFace face : faces) { if(block.getRelative(face).getType() == Material.WALL_SIGN) { return (org.bukkit.block.Sign)block.getRelative(face).getState(); } } return null; } private boolean hasNearbySign(Block block) { BlockFace[] faces = {BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST}; for(BlockFace face : faces) { if(block.getRelative(face).getType() == Material.WALL_SIGN) { return true; } } return false; } }