package me.totalfreedom.totalfreedommod.commands; import me.totalfreedom.totalfreedommod.rank.PlayerRank; import java.util.ArrayList; import java.util.List; import me.totalfreedom.totalfreedommod.util.FUtil; import org.apache.commons.lang3.StringUtils; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @CommandPermissions(level = PlayerRank.NON_OP, source = SourceType.BOTH) @CommandParameters(description = "Lists the real names of all online players.", usage = "/ [-a | -i]", aliases = "who") public class Command_list extends FreedomCommand { private static enum ListFilter { ALL, ADMINS, IMPOSTORS; } @Override public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { if (args.length > 1) { return false; } if (FUtil.isFromHostConsole(sender.getName())) { final List names = new ArrayList(); for (Player player : server.getOnlinePlayers()) { names.add(player.getName()); } playerMsg("There are " + names.size() + "/" + server.getMaxPlayers() + " players online:\n" + StringUtils.join(names, ", "), ChatColor.WHITE); return true; } final ListFilter listFilter; if (args.length == 1) { if ("-a".equals(args[0])) { listFilter = ListFilter.ADMINS; } else if ("-i".equals(args[0])) { listFilter = ListFilter.IMPOSTORS; } else { return false; } } else { listFilter = ListFilter.ALL; } final StringBuilder onlineStats = new StringBuilder(); final StringBuilder onlineUsers = new StringBuilder(); onlineStats.append(ChatColor.BLUE).append("There are ").append(ChatColor.RED).append(server.getOnlinePlayers().size()); onlineStats.append(ChatColor.BLUE).append(" out of a maximum ").append(ChatColor.RED).append(server.getMaxPlayers()); onlineStats.append(ChatColor.BLUE).append(" players online."); final List names = new ArrayList(); for (Player player : server.getOnlinePlayers()) { if (listFilter == ListFilter.ADMINS && !plugin.al.isAdmin(player)) { continue; } if (listFilter == ListFilter.IMPOSTORS && !plugin.al.isAdminImpostor(player)) { continue; } names.add(plugin.rm.getRank(player).getColoredTag() + player.getName()); } onlineUsers.append("Connected "); onlineUsers.append(listFilter == Command_list.ListFilter.ADMINS ? "admins: " : "players: "); onlineUsers.append(StringUtils.join(names, ChatColor.WHITE + ", ")); if (senderIsConsole) { sender.sendMessage(ChatColor.stripColor(onlineStats.toString())); sender.sendMessage(ChatColor.stripColor(onlineUsers.toString())); } else { sender.sendMessage(onlineStats.toString()); sender.sendMessage(onlineUsers.toString()); } return true; } }