package tv.mineinthebox.essentials.events.protection; import java.util.Arrays; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPistonExtendEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.player.PlayerInteractEvent; import tv.mineinthebox.essentials.xEssentials; import tv.mineinthebox.essentials.enums.PermissionKey; import tv.mineinthebox.essentials.instances.ProtectedBlock; import tv.mineinthebox.essentials.interfaces.EventTemplate; public class SignProtectedEvent extends EventTemplate implements Listener { public SignProtectedEvent(xEssentials pl) { super(pl, "Protection"); } @EventHandler(ignoreCancelled = true) public void onPlace(BlockPlaceEvent e) { if(e.getBlock().getType() == Material.SIGN_POST || e.getBlock().getType() == Material.WALL_SIGN) { ProtectedBlock pblock = new ProtectedBlock(pl, e.getBlock()); pblock.addProtection(e.getPlayer().getUniqueId()); sendMessage(e.getPlayer(), ChatColor.GREEN + "successfully registered privated sign"); } } @EventHandler(ignoreCancelled = true) public void onBreak(BlockBreakEvent e) { if(e.isCancelled()) { return; } if(e.getBlock().getType() == Material.SIGN_POST || e.getBlock().getType() == Material.WALL_SIGN) { ProtectedBlock pblock = new ProtectedBlock(pl, e.getBlock()); if(pblock.isProtected()) { if(pblock.isMember(e.getPlayer().getUniqueId()) || e.getPlayer().hasPermission(PermissionKey.IS_ADMIN.getPermission())) { pblock.removeAll(); sendMessage(e.getPlayer(), ChatColor.GREEN + "unregistered that sign."); } else { sendMessage(e.getPlayer(), pl.getConfiguration().getProtectionConfig().getDisallowMessage().replace("%BLOCK%", e.getBlock().getType().name())); e.setCancelled(true); } } } } @EventHandler(ignoreCancelled = true) public void onInteract(PlayerInteractEvent e) { if(e.getAction() == Action.RIGHT_CLICK_BLOCK) { if(e.getClickedBlock().getType() == Material.SIGN_POST || e.getClickedBlock().getType() == Material.WALL_SIGN) { ProtectedBlock pblock = new ProtectedBlock(pl, e.getClickedBlock()); if(pblock.isProtected()) { if(pblock.isMember(e.getPlayer().getUniqueId()) || e.getPlayer().hasPermission(PermissionKey.IS_ADMIN.getPermission())) { sendMessage(e.getPlayer(), ChatColor.GREEN + "this sign belongs to " + (pblock.isMember(e.getPlayer().getUniqueId()) ? "you" : Arrays.toString(pblock.getMembers().toArray()))); } else { sendMessage(e.getPlayer(), pl.getConfiguration().getProtectionConfig().getDisallowMessage().replace("%BLOCK%", e.getClickedBlock().getType().name())); } } } } } @EventHandler public void onPiston(BlockPistonExtendEvent e) { for(Block block : e.getBlocks()) { if(block.getType() == Material.SIGN_POST || block.getType() == Material.WALL_SIGN) { ProtectedBlock pblock = new ProtectedBlock(pl, block); if(pblock.isProtected()) { e.setCancelled(true); break; } } } } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = false) public void onExplosion(EntityExplodeEvent e) { for(Block block : e.blockList()) { if(block.getType() == Material.SIGN_POST || block.getType() == Material.WALL_SIGN) { ProtectedBlock pblock = new ProtectedBlock(pl, block); if(pblock.isProtected()) { e.setCancelled(true); } } } } }