package dk.thoerup.bukkit.hoeruputils; import java.util.HashMap; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.Plugin; import org.bukkit.scheduler.BukkitScheduler; public class DiverCommand implements CommandExecutor, Listener { final static int LEATHER_COUNT = 3; final static int TICK_COUNT = 20; HashMap divers = new HashMap(); Plugin plugin; BukkitScheduler scheduler; public DiverCommand(Plugin plugin) { this.plugin = plugin; scheduler = plugin.getServer().getScheduler(); } @Override public boolean onCommand(final CommandSender sender, Command command, String label, String[] args) { if (!(sender instanceof Player)) { return false; } final Player player = (Player) sender; if (divers.containsKey( sender.getName() )) { //disableDiver( player.getName() ); //player.sendMessage(ChatColor.GREEN + "Diver disabled - you're now gasping for air");; player.sendMessage(ChatColor.GREEN + "Diver: - you already have a airbladder"); } else { Inventory inv = player.getInventory(); if (inv.contains(Material.LEATHER, LEATHER_COUNT) ) { RefillAir r = new RefillAir(player); int taskid = scheduler.scheduleSyncRepeatingTask(plugin, r, (5*20), (5*20) ); divers.put(player.getName(), taskid); player.sendMessage(ChatColor.GREEN + "Diver: you created a airbladder from " + LEATHER_COUNT + " leather - go for a swim"); inv.removeItem( new ItemStack(Material.LEATHER, LEATHER_COUNT) ); } else { player.sendMessage(ChatColor.GREEN + "Diver: you need " + LEATHER_COUNT + " leather to create a airbladder"); } } return true; } public void disableDiver(String name) { int taskid = divers.get( name ); scheduler.cancelTask( taskid ); divers.remove( name ); } class RefillAir implements Runnable { int ticks = TICK_COUNT; Player player; public RefillAir(Player player) { this.player = player; } public void run() { int maxair = player.getMaximumAir(); if (player.getRemainingAir() < (maxair/2)) { player.setRemainingAir( maxair); ticks --; if (ticks == 1) { player.sendMessage(ChatColor.GREEN + "Diver: there's not much air left in the air-bladder"); } if (ticks <= 0) { disableDiver( player.getName() ); player.sendMessage(ChatColor.GREEN + "Diver: your air-bladder are empty!"); } } } } @EventHandler public void onPlayerQuit(PlayerQuitEvent e) { Player p = e.getPlayer(); if (divers.containsKey( p.getName() )) { disableDiver( p.getName() ); } } }