--- miscJava/bukkit-minecraft-plugins/HoerupUtils/src/dk/thoerup/bukkit/hoeruputils/SuperminerCommand.java 2011/06/20 20:10:41 1521 +++ miscJava/bukkit-minecraft-plugins/HoerupUtils/src/dk/thoerup/bukkit/hoeruputils/SuperMiner.java 2011/06/24 11:13:59 1522 @@ -1,44 +1,117 @@ package dk.thoerup.bukkit.hoeruputils; +import java.util.HashSet; +import java.util.Set; +import java.util.Random; + import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.World; 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; -public class SuperminerCommand implements CommandExecutor { +public class SuperMiner extends BlockListener implements CommandExecutor { + + + Random rand = new Random(); + Set miners = new HashSet(); @Override - public boolean onCommand(final CommandSender sender, Command command, String label, String[] args) { - - if (!(sender instanceof Player)) { + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + + if (! (sender instanceof Player) ) { return false; } - Player p = (Player) sender; - World world = p.getWorld(); - Location l = p.getLocation(); + if (!sender.isOp()) { + sender.sendMessage("Only ops can use superminer"); + return true; + } + + + Player p = (Player) sender; - for (int x=-5; x<=5; x++) { - for (int y=0; y<=5; y++) { - for (int z=-5; z<=5; z++) { + if (miners.contains(p.getName())) { + miners.remove( p.getName() ); + p.sendMessage("SuperMiner disabled"); + } else { + miners.add( p.getName() ); + p.sendMessage("SuperMiner enabled - go dig some tunnels (with a fish)"); + } + + + return true; + } - Block b = world.getBlockAt( l.getBlockX()+x, l.getBlockY()+y, l.getBlockZ()+z); + + + public void onBlockDamage(BlockDamageEvent event) { + Player p = event.getPlayer(); + + if (! p.isOp() ) + return; - int id = b.getTypeId(); + + if (p.getItemInHand().getType() == Material.RAW_FISH) { + if ( miners.contains(p.getName()) ) { + + Block b = event.getBlock(); + + superMiner(p, p.getWorld(), p.getLocation() ); + } + } + + } - if (id == 1 || id == 2 || id == 3 || id == 4 || id == 8 || id == 9 || id == 10 || id == 11 || id == 13) { - b.setTypeId( 0 ); - } - } + public void superMiner(Player player, World world, Location location) { + + Location l = location; + + for (int x=-5; x<=5; x++) { + for (int y=0; y<=5; y++) { + for (int z=-5; z<=5; z++) { + + Block b = world.getBlockAt( l.getBlockX()+x, l.getBlockY()+y, l.getBlockZ()+z); + + int id = b.getTypeId(); + + if (id == 1 || id == 2 || id == 3 || id == 4 || id == 8 || id == 9 || id == 10 || id == 11 || id == 13) { + b.setTypeId( 0 ); + } + } + + + } + } + + } + + + + public PlayerQuitListener getPlayerQuitListener() { + return new PlayerQuitListener(); + } + + + public class PlayerQuitListener extends PlayerListener { + @Override + public void onPlayerQuit(PlayerQuitEvent event) { + Player p = event.getPlayer(); + + if (miners.contains(p.getName())) { + miners.remove( p.getName() ); } } - - return true; } + }