package com.leontg77.uhc.cmds; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.bukkit.Bukkit; 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 com.leontg77.uhc.Main; import com.leontg77.uhc.Spectator; import com.leontg77.uhc.utils.PlayerUtils; /** * Spectate command class. * * @author LeonTG77 */ public class SpectateCommand implements CommandExecutor, TabCompleter { @Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { if (!sender.hasPermission("uhc.spectate")) { sender.sendMessage(Main.NO_PERM_MSG); return true; } if (args.length == 0) { sender.sendMessage(Main.PREFIX + "Usage: /spec <on|off|toggle|list|cmdspy|info> [player]"); return true; } Spectator spec = Spectator.getInstance(); if (args[0].equalsIgnoreCase("list")) { if (spec.spectators.size() < 1) { sender.sendMessage(Main.PREFIX + "There are no spectators."); return true; } ArrayList<String> players = new ArrayList<String>(spec.spectators); Collections.shuffle(players); StringBuilder list = new StringBuilder(); int p = 1; for (int i = 0; i < players.size(); i++) { if (list.length() > 0) { if (p == players.size()) { list.append(" �8and �a"); } else { list.append("�8, �a"); } } String s = players.get(i); list.append(Bukkit.getPlayer(s) == null ? "�c" + s : "�a" + s); p++; } sender.sendMessage(Main.PREFIX + "There are �6" + (p - 1) + " �7spectators."); sender.sendMessage("�8� �7Spectators�8: �a" + list.toString() + "�8."); return true; } if (!(sender instanceof Player) && args.length == 1) { sender.sendMessage(ChatColor.RED + "Only players can manage their spectator mode."); return true; } Player target = (Player) sender; if (args.length > 1 && sender.hasPermission("uhc.spectate.others")) { target = Bukkit.getServer().getPlayer(args[1]); } if (target == null) { sender.sendMessage(ChatColor.RED + args[1] + " is not online."); return true; } if (args[0].equalsIgnoreCase("toggle")) { spec.toggle(target, false); return true; } if (args[0].equalsIgnoreCase("on")) { spec.enableSpecmode(target, false); return true; } if (args[0].equalsIgnoreCase("off")) { spec.disableSpecmode(target, false); return true; } if (args[0].equalsIgnoreCase("info")) { if (spec.specinfo.contains(target.getName())) { spec.specinfo.remove(target.getName()); target.sendMessage(Main.PREFIX + "Your specinfo has been enabled."); } else { spec.specinfo.add(target.getName()); target.sendMessage(Main.PREFIX + "Your specinfo has been disabled."); } return true; } if (args[0].equalsIgnoreCase("cmdspy")) { if (!target.hasPermission("uhc.cmdspy")) { sender.sendMessage(Main.NO_PERM_MSG); return true; } if (spec.cmdspy.contains(target.getName())) { spec.cmdspy.remove(target.getName()); target.sendMessage(Main.PREFIX + "Your commandspy has been disabled."); } else { spec.cmdspy.add(target.getName()); target.sendMessage(Main.PREFIX + "Your commandspy has been disabled."); } return true; } target.sendMessage(Main.PREFIX + "Usage: /spec <on|off|toggle|list|cmdspy|info> [player]"); return true; } @Override public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] args) { if (!sender.hasPermission("uhc.spectate")) { return null; } ArrayList<String> toReturn = new ArrayList<String>(); if (args.length == 1) { ArrayList<String> types = new ArrayList<String>(); types.add("on"); types.add("off"); types.add("toggle"); types.add("list"); types.add("cmdspy"); types.add("info"); 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) { if (!sender.hasPermission("uhc.spectate.other")) { return null; } if (args[0].equalsIgnoreCase("on")) { if (args[1].equals("")) { for (Player online : PlayerUtils.getPlayers()) { if (!Spectator.getInstance().isSpectating(online)) { toReturn.add(online.getName()); } } } else { for (Player online : PlayerUtils.getPlayers()) { if (online.getName().toLowerCase().startsWith(args[1].toLowerCase())) { if (!Spectator.getInstance().isSpectating(online)) { toReturn.add(online.getName()); } } } } } else if (args[0].equalsIgnoreCase("off")) { if (!args[1].equals("")) { for (Player online : PlayerUtils.getPlayers()) { if (Spectator.getInstance().isSpectating(online)) { toReturn.add(online.getName()); } } } else { for (Player online : PlayerUtils.getPlayers()) { if (online.getName().toLowerCase().startsWith(args[1].toLowerCase())) { if (Spectator.getInstance().isSpectating(online)) { toReturn.add(online.getName()); } } } } } else if (args[0].equalsIgnoreCase("toggle")) { if (args[1].equals("")) { for (Player online : PlayerUtils.getPlayers()) { toReturn.add(online.getName()); } } else { for (Player online : PlayerUtils.getPlayers()) { if (online.getName().toLowerCase().startsWith(args[1].toLowerCase())) { toReturn.add(online.getName()); } } } } else if (args[0].equalsIgnoreCase("cmdspy")) { if (args[1].equals("")) { for (Player online : PlayerUtils.getPlayers()) { toReturn.add(online.getName()); } } else { for (Player online : PlayerUtils.getPlayers()) { if (online.getName().toLowerCase().startsWith(args[1].toLowerCase())) { toReturn.add(online.getName()); } } } } else if (args[0].equalsIgnoreCase("info")) { if (args[1].equals("")) { for (Player online : PlayerUtils.getPlayers()) { toReturn.add(online.getName()); } } else { for (Player online : PlayerUtils.getPlayers()) { if (online.getName().toLowerCase().startsWith(args[1].toLowerCase())) { toReturn.add(online.getName()); } } } } } return toReturn; } }