package me.totalfreedom.totalfreedommod.command; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.util.FUtil; import org.bukkit.OfflinePlayer; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @CommandPermissions(level = Rank.OP, source = SourceType.BOTH) @CommandParameters(description = "Manage the whitelist.", usage = "/ | remove | addall | purge>") public class Command_whitelist extends FreedomCommand { @Override public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { if (args.length < 1) { return false; } // list if (args[0].equalsIgnoreCase("list")) { if (server.getWhitelistedPlayers().isEmpty()) { msg("There are no whitelisted players."); return true; } msg("Whitelisted players: " + FUtil.playerListToNames(server.getWhitelistedPlayers())); return true; } // count if (args[0].equalsIgnoreCase("count")) { int onlineWPs = 0; int offlineWPs = 0; int totalWPs = 0; for (OfflinePlayer player : server.getWhitelistedPlayers()) { if (player.isOnline()) { onlineWPs++; } else { offlineWPs++; } totalWPs++; } msg("Online whitelisted players: " + onlineWPs); msg("Offline whitelisted players: " + offlineWPs); msg("Total whitelisted players: " + totalWPs); return true; } // Commands below are restricted to admins checkRank(Rank.ADMIN); // on if (args[0].equalsIgnoreCase("on")) { FUtil.adminAction(sender.getName(), "Turning the whitelist on", true); server.setWhitelist(true); return true; } // off if (args[0].equalsIgnoreCase("off")) { FUtil.adminAction(sender.getName(), "Turning the whitelist off", true); server.setWhitelist(false); return true; } // add if (args[0].equalsIgnoreCase("add")) { if (args.length < 2) { return false; } String search_name = args[1].trim().toLowerCase(); OfflinePlayer player = getPlayer(search_name); if (player == null) { player = server.getOfflinePlayer(search_name); } FUtil.adminAction(sender.getName(), "Adding " + player.getName() + " to the whitelist", false); player.setWhitelisted(true); return true; } // remove if (args[0].equalsIgnoreCase("remove")) { if (args.length < 2) { return false; } String search_name = args[1].trim().toLowerCase(); OfflinePlayer player = getPlayer(search_name); if (player == null) { player = server.getOfflinePlayer(search_name); } if (player.isWhitelisted()) { FUtil.adminAction(sender.getName(), "Removing " + player.getName() + " from the whitelist", false); player.setWhitelisted(false); } else { msg("That player is not whitelisted"); } return true; } // addall if (args[0].equalsIgnoreCase("addall")) { FUtil.adminAction(sender.getName(), "Adding all online players to the whitelist", false); int counter = 0; for (Player player : server.getOnlinePlayers()) { if (!player.isWhitelisted()) { player.setWhitelisted(true); counter++; } } msg("Whitelisted " + counter + " players."); return true; } // Telnet only checkConsole(); checkRank(Rank.ADMIN); // purge if (args[0].equalsIgnoreCase("purge")) { FUtil.adminAction(sender.getName(), "Removing all players from the whitelist", false); msg("Removed " + purge() + " players from the whitelist."); return true; } return false; } @Override public List getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args) { if (args.length == 1) { List arguments = new ArrayList<>(Arrays.asList("list", "count")); if (plugin.al.isAdmin(sender)) { arguments.addAll(Arrays.asList("on", "off", "add", "remove", "addall")); if (!(sender instanceof Player)) { arguments.add("purge"); } } return arguments; } else if (args.length == 2 && plugin.al.isAdmin(sender)) { if (args[0].equals("add")) { return FUtil.getPlayerList(); } else if (args[0].equals("remove")) { return getWhitelistedNames(); } } return Collections.emptyList(); } public List getWhitelistedNames() { List names = new ArrayList<>(); for (OfflinePlayer player : server.getWhitelistedPlayers()) { names.add(player.getName()); } return names; } public int purge() { int removed = 0; for (OfflinePlayer player : server.getWhitelistedPlayers()) { player.setWhitelisted(false); removed++; } return removed; } }