001    package org.bukkit.command.defaults;
002    
003    import java.util.ArrayList;
004    import java.util.List;
005    import java.util.UUID;
006    
007    import org.apache.commons.lang.Validate;
008    import org.bukkit.BanEntry;
009    import org.bukkit.BanList;
010    import org.bukkit.Bukkit;
011    import org.bukkit.ChatColor;
012    import org.bukkit.OfflinePlayer;
013    import org.bukkit.command.CommandSender;
014    import org.bukkit.util.StringUtil;
015    
016    import com.google.common.collect.ImmutableList;
017    
018    public class BanListCommand extends VanillaCommand {
019        private static final List<String> BANLIST_TYPES = ImmutableList.of("ips", "players");
020    
021        public BanListCommand() {
022            super("banlist");
023            this.description = "View all players banned from this server";
024            this.usageMessage = "/banlist [ips|players]";
025            this.setPermission("bukkit.command.ban.list");
026        }
027    
028        @Override
029        public boolean execute(CommandSender sender, String currentAlias, String[] args) {
030            if (!testPermission(sender)) return true;
031    
032            BanList.Type banType = BanList.Type.NAME;
033            if (args.length > 0) {
034                if (args[0].equalsIgnoreCase("ips")) {
035                    banType = BanList.Type.IP;
036                } else if (!args[0].equalsIgnoreCase("players")) {
037                    sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage);
038                    return false;
039                }
040            }
041    
042            StringBuilder message = new StringBuilder();
043            BanEntry[] banlist = Bukkit.getBanList(banType).getBanEntries().toArray(new BanEntry[0]);
044    
045            for (int x = 0; x < banlist.length; x++) {
046                if (x != 0) {
047                    if (x == banlist.length - 1) {
048                        message.append(" and ");
049                    } else {
050                        message.append(", ");
051                    }
052                }
053    
054                message.append(banlist[x].getTarget());
055            }
056    
057            sender.sendMessage("There are " + banlist.length + " total banned players:");
058            sender.sendMessage(message.toString());
059            return true;
060        }
061    
062        @Override
063        public List<String> tabComplete(CommandSender sender, String alias, String[] args) {
064            Validate.notNull(sender, "Sender cannot be null");
065            Validate.notNull(args, "Arguments cannot be null");
066            Validate.notNull(alias, "Alias cannot be null");
067    
068            if (args.length == 1) {
069                return StringUtil.copyPartialMatches(args[0], BANLIST_TYPES, new ArrayList<String>(BANLIST_TYPES.size()));
070            }
071            return ImmutableList.of();
072        }
073    }