--- miscJava/bukkit-minecraft-plugins/HoerupUtils/src/dk/thoerup/bukkit/hoeruputils/AdminDestroy.java 2011/04/23 13:14:39 1378 +++ miscJava/bukkit-minecraft-plugins/HoerupUtils/src/dk/thoerup/bukkit/hoeruputils/PowerMiner.java 2011/05/07 14:48:03 1457 @@ -2,8 +2,10 @@ import java.util.HashSet; import java.util.Set; +import java.util.Random; import org.bukkit.Material; +import org.bukkit.block.Block; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; @@ -12,12 +14,14 @@ 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 { +public class PowerMiner extends BlockListener implements CommandExecutor { - - Set destroyers = new HashSet(); + Random rand = new Random(); + + Set miners = new HashSet(); @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { @@ -25,18 +29,57 @@ 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"); + if (miners.contains(p.getName())) { + miners.remove( p.getName() ); + p.sendMessage("PowerMiner disabled"); } else { - destroyers.add( p.getName() ); - p.sendMessage("Admindestroy enabled - go dig some tunnels (with a feather)"); + miners.add( p.getName() ); + p.sendMessage("PowerMiner enabled - go dig some tunnels (with a feather)"); } return true; } + + + protected ItemStack getDropItems(Block b) { + switch (b.getTypeId()) { + case 1: //stone drops cobblestone + return new ItemStack(4,1); + case 2: + case 3: + return null; //instabreak already drops dirt + case 12: + return null; //instabreak drops sand + case 13: + return null; //don't drop gravel + case 16: //coal ore drops coal + return new ItemStack(263,1); + case 17: + return null; //instabreak drops wood + case 18: + return (rand.nextInt(16) == 0) ? new ItemStack(6,1,(short)0, b.getData() ) : null; //leaves has 6.25% chance of dropping sapplings + case 21: //lapis lazuli + int count = rand.nextInt(5) + 4; + return new ItemStack(351,count,(short)0, (byte)4); + case 27: + case 28: + return null; //instabreak drops powered and detector rails + case 56: //diamond ore drops diamond + return new ItemStack(264,1); + case 66: + return null; //instabreak drops rails + case 73: + case 74: + return new ItemStack(331,4); //redstone ore (both glowing and non-glowing) drops 4 redstone + case 82: + return null; //instabreak drops clay from clayblock + default: + return new ItemStack(b.getTypeId(), 1,(short)0, b.getData()); + } + } public void onBlockDamage(BlockDamageEvent event) { Player p = event.getPlayer(); @@ -44,21 +87,42 @@ if (! p.isOp() ) return; - if ( destroyers.contains(p.getName()) ) { + if ( miners.contains(p.getName()) ) { if (p.getItemInHand().getType() == Material.FEATHER) { + + Block b = event.getBlock(); + + if (b.getTypeId() == 7) //don't remove bedrock + return; + if (b.getTypeId() == 90) //don't break portal + return; + event.setInstaBreak(true); + + + ItemStack items = getDropItems(b); + + + if (items != null) { + b.getWorld().dropItemNaturally(b.getLocation(), items); + } + } } } + public PlayerQuitListener getPlayerQuitListener() { + return new PlayerQuitListener(); + } + public class PlayerQuitListener extends PlayerListener { @Override public void onPlayerQuit(PlayerQuitEvent event) { Player p = event.getPlayer(); - if (destroyers.contains(p.getName())) { - destroyers.remove( p.getName() ); + if (miners.contains(p.getName())) { + miners.remove( p.getName() ); } } }