package com.leontg77.uhc.cmds; import java.util.ArrayList; import java.util.List; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.command.TabCompleter; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; import com.leontg77.uhc.Main; import com.leontg77.uhc.utils.DateUtils; import com.leontg77.uhc.utils.PacketUtils; import com.leontg77.uhc.utils.PlayerUtils; /** * Timer command class. * * @author LeonTG77 */ public class TimerCommand implements CommandExecutor, TabCompleter { private BukkitRunnable run = null; private boolean countdown = true; private String message; private int ticks; @Override public boolean onCommand(final CommandSender sender, Command cmd, String label, String[] args) { if (!sender.hasPermission("uhc.timer")) { sender.sendMessage(Main.NO_PERM_MSG); return true; } if (args.length == 0) { sender.sendMessage(Main.PREFIX + "Usage: /timer <duration> <message>"); return true; } if (args.length == 1 && !args[0].equalsIgnoreCase("cancel")) { sender.sendMessage(Main.PREFIX + "Usage: /timer <duration> <message>"); return true; } if (args.length >= 1 && args[0].equalsIgnoreCase("cancel")) { if (run != null) { run.cancel(); run = null; sender.sendMessage(Main.PREFIX + "Timer cancelled."); } else { sender.sendMessage(ChatColor.RED + "Timer is not running."); } return true; } if (run != null) { sender.sendMessage(ChatColor.RED + "Timer is already running."); return true; } int millis; try { millis = Integer.parseInt(args[0]); } catch (Exception e) { sender.sendMessage(ChatColor.RED + args[0] + " is not a vaild number."); return true; } if (millis <= 0) { countdown = false; } else { countdown = true; } StringBuilder msg = new StringBuilder(); for (int i = 1; i < args.length; i++) { msg.append(args[i]).append(" "); } run = new BukkitRunnable() { public void run() { if (countdown) { for (Player online : PlayerUtils.getPlayers()) { PacketUtils.sendAction(online, message + " " + DateUtils.ticksToString(ticks)); } ticks--; if (ticks < 0) { cancel(); run = null; } } else { for (Player online : PlayerUtils.getPlayers()) { PacketUtils.sendAction(online, message); } } } }; sender.sendMessage(Main.PREFIX + "Timer started."); run.runTaskTimer(Main.plugin, 0, 20); this.message = ChatColor.translateAlternateColorCodes('&', msg.toString().trim()); this.ticks = millis; return true; } @Override public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] args) { if (!sender.hasPermission("uhc.timer")) { return null; } ArrayList<String> toReturn = new ArrayList<String>(); if (args.length == 1) { ArrayList<String> types = new ArrayList<String>(); types.add("cancel"); if (args[0].equals("")) { for (String type : types) { toReturn.add(type); } } else { for (String type : types) { if (type.startsWith(args[0].toLowerCase())) { toReturn.add(type); } } } } if (args.length == 2) { ArrayList<String> types = new ArrayList<String>(); types.add("&7The game is starting in &8�&a"); if (args[1].equals("")) { for (String type : types) { toReturn.add(type); } } else { for (String type : types) { if (type.startsWith(args[1].toLowerCase())) { toReturn.add(type); } } } } return toReturn; } }