package dk.thoerup.bukkit.hoeruputils; import java.util.HashSet; import java.util.Set; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.event.block.BlockDamageEvent; import org.bukkit.event.block.BlockListener; import org.bukkit.event.player.PlayerListener; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.inventory.ItemStack; public class AdminDestroy extends BlockListener implements CommandExecutor { Set destroyers = new HashSet(); @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { if (!sender.isOp()) return false; if (! (sender instanceof Player) ) return false; Player p = (Player) sender; if (destroyers.contains(p.getName())) { destroyers.remove( p.getName() ); p.sendMessage("Admindestroy disabled"); } else { destroyers.add( p.getName() ); p.sendMessage("Admindestroy enabled - go dig some tunnels (with a feather)"); } return true; } protected int getThrowBlock(Block b) { switch (b.getTypeId()) { case 1: return 4; case 2: case 3: return 0; //instabreak already throws dirt case 16: return 263; default: return b.getTypeId(); //don't throw any others } } public void onBlockDamage(BlockDamageEvent event) { Player p = event.getPlayer(); if (! p.isOp() ) return; if ( destroyers.contains(p.getName()) ) { if (p.getItemInHand().getType() == Material.FEATHER) { event.setInstaBreak(true); Block b = event.getBlock(); int blockid = getThrowBlock(b); if (blockid != 0) { ItemStack stack = new ItemStack(blockid, 1); b.getWorld().dropItem(b.getLocation(), stack); } } } } public class PlayerQuitListener extends PlayerListener { @Override public void onPlayerQuit(PlayerQuitEvent event) { Player p = event.getPlayer(); if (destroyers.contains(p.getName())) { destroyers.remove( p.getName() ); } } } }