From 5b55fd97e6400e405a55da36790f1507b13ea907 Mon Sep 17 00:00:00 2001 From: KHobbits Date: Mon, 18 Mar 2013 07:50:36 +0000 Subject: Cleanup - Split /list into methods --- .../earth2me/essentials/commands/Commandlist.java | 357 +++++++++++---------- Essentials/src/config.yml | 23 +- Essentials/src/plugin.yml | 2 +- 3 files changed, 200 insertions(+), 182 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandlist.java b/Essentials/src/com/earth2me/essentials/commands/Commandlist.java index aeaffe324..3bc453026 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandlist.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandlist.java @@ -19,18 +19,27 @@ public class Commandlist extends EssentialsCommand @Override public void run(final Server server, final CommandSender sender, final String commandLabel, final String[] args) throws Exception { - boolean showhidden = false; + boolean showHidden = true; if (sender instanceof Player) { - if (ess.getUser(sender).isAuthorized("essentials.list.hidden")) - { - showhidden = true; - } + showHidden = ess.getUser(sender).isAuthorized("essentials.list.hidden"); + } + + sender.sendMessage(listSummary(server, showHidden)); + Map> playerList = getPlayerLists(server, showHidden); + + if (args.length > 0) + { + sender.sendMessage(listGroupUsers(server, playerList, args[0].toLowerCase())); } else { - showhidden = true; + sendGroupedList(server, sender, commandLabel, playerList); } + } + + private String listSummary(Server server, boolean showHidden) + { int playerHidden = 0; for (Player onlinePlayer : server.getOnlinePlayers()) { @@ -40,8 +49,8 @@ public class Commandlist extends EssentialsCommand } } - String online; - if (showhidden && playerHidden > 0) + String online; + if (showHidden && playerHidden > 0) { online = _("listAmountHidden", server.getOnlinePlayers().length - playerHidden, playerHidden, server.getMaxPlayers()); } @@ -49,218 +58,232 @@ public class Commandlist extends EssentialsCommand { online = _("listAmount", server.getOnlinePlayers().length - playerHidden, server.getMaxPlayers()); } - sender.sendMessage(online); - + return online; + } - Map> sort = new HashMap>(); - for (Player OnlinePlayer : server.getOnlinePlayers()) + private Map> getPlayerLists(Server server, boolean showHidden) + { + Map> playerList = new HashMap>(); + for (Player onlinePlayer : server.getOnlinePlayers()) { - final User player = ess.getUser(OnlinePlayer); - if (player.isHidden() && !showhidden) + final User onlineUser = ess.getUser(onlinePlayer); + if (onlineUser.isHidden() && !showHidden) { continue; } - final String group = player.getGroup().toLowerCase(); - List list = sort.get(group); + final String group = onlineUser.getGroup().toLowerCase(); + List list = playerList.get(group); if (list == null) { list = new ArrayList(); - sort.put(group, list); + playerList.put(group, list); } - list.add(player); + list.add(onlineUser); } - final StringBuilder groupString = new StringBuilder(); - Set keys = ess.getSettings().getListGroupConfig().keySet(); + return playerList; + } + + private String listGroupUsers(Server server, Map> playerList, String groupName) throws Exception + { + final StringBuilder outputString = new StringBuilder(); + Set configGroups = ess.getSettings().getListGroupConfig().keySet(); + final List users = new ArrayList(); + + for (String key : configGroups) + { + String groupValue = ess.getSettings().getListGroupConfig().get(key).toString().trim(); + if (key.equalsIgnoreCase(groupName) && groupValue.contains(",")) + { + String[] groups = groupValue.split(","); + for (String g : groups) + { + if (g == null || g.equals("")) + { + continue; + } + List u = playerList.get(g.trim()); + if (u == null || u.isEmpty()) + { + continue; + } + users.addAll(u); + } + } + } + List groupUsers = playerList.get(groupName); + if (groupUsers != null && !groupUsers.isEmpty()) + { + users.addAll(groupUsers); + } + if (users == null || users.isEmpty()) + { + throw new Exception(_("groupDoesNotExist")); + } + outputString.append(_("listGroupTag", Util.replaceFormat(groupName))); + outputString.append(listUsers(users)); + outputString.setCharAt(0, Character.toTitleCase(outputString.charAt(0))); + return outputString.toString(); + } + + private void sendGroupedList(Server server, CommandSender sender, String commandLabel, Map> playerList) + { + final StringBuilder outputString = new StringBuilder(); + Set configGroups = ess.getSettings().getListGroupConfig().keySet(); + List usedGroups = new ArrayList(); + List usedGroupsAsterisk = new ArrayList(); + Map asterisk = new HashMap(); + boolean hasAsterisk = false; - if (args.length > 0) + for (String group : configGroups) { + boolean userLimit = false; + String groupValue = ess.getSettings().getListGroupConfig().get(group).toString().trim(); + + // If the group value is an asterisk, then skip it, and handle it later + if (groupValue.equals("*")) + { + asterisk.put(group, true); + hasAsterisk = true; + continue; + } + + group = group.toLowerCase(); + usedGroups.add(group); + + // If the group value is hidden, we don't need to display it + if (groupValue.equals("hidden")) + { + continue; + } + + + if (Util.isInt(groupValue)) + { + userLimit = true; + } final List users = new ArrayList(); - String group = args[0].toLowerCase(); - for (String key : keys) + List u = playerList.get(group); + if (u != null && !u.isEmpty()) + { + + if (userLimit) + { + users.addAll(u); + int limit = Integer.parseInt(groupValue); + if (u.size() > limit) + { + outputString.append(_("listGroupTag", Util.replaceFormat(group))); + outputString.append(_("groupNumber", u.size(), commandLabel, group)); + outputString.setCharAt(0, Character.toTitleCase(outputString.charAt(0))); + sender.sendMessage(outputString.toString()); + outputString.setLength(0); + continue; + } + } + } + + if (groupValue.contains(",") || playerList.containsKey(groupValue.toLowerCase())) { - String groupValue = ess.getSettings().getListGroupConfig().get(key).toString().trim(); - if(key.equalsIgnoreCase(group) && groupValue.contains(",")) + if (playerList.containsKey(groupValue)) + { + u = playerList.get(groupValue); + if (u == null || u.isEmpty()) + { + continue; + } + users.addAll(u); + usedGroupsAsterisk.add(groupValue); + } + else { String[] groups = groupValue.split(","); for (String g : groups) { + g = g.trim().toLowerCase(); if (g == null || g.equals("")) { continue; } - List u = sort.get(g.trim()); + u = playerList.get(g); if (u == null || u.isEmpty()) { continue; } users.addAll(u); + usedGroupsAsterisk.add(g); } } } - List groupUsers = sort.get(group); - if (groupUsers != null && !groupUsers.isEmpty()) + if (users == null || users.isEmpty()) { - users.addAll(groupUsers); + continue; } - if (users == null || users.isEmpty()) + if (ess.getPermissionsHandler().getName().equals("ConfigPermissions")) { - throw new Exception(_("groupDoesNotExist")); + group = _("connectedPlayers"); } - groupString.append(_("listGroupTag", Util.replaceFormat(group))); - groupString.append(listUsers(users)); - groupString.setCharAt(0, Character.toTitleCase(groupString.charAt(0))); - sender.sendMessage(groupString.toString()); - groupString.setLength(0); + outputString.append(_("listGroupTag", Util.replaceFormat(group))); + outputString.append(listUsers(users)); + outputString.setCharAt(0, Character.toTitleCase(outputString.charAt(0))); + sender.sendMessage(outputString.toString()); + outputString.setLength(0); } - else + + final String[] groups = playerList.keySet().toArray(new String[0]); + Arrays.sort(groups, String.CASE_INSENSITIVE_ORDER); + List asteriskUsers = new ArrayList(); + String asteriskGroup = ""; + if (hasAsterisk) { - List usedGroups = new ArrayList(); - List usedGroupsAsterisk = new ArrayList(); - Map asterisk = new HashMap(); - boolean hasAsterisk = false; - for (String group : keys) + for (String key : asterisk.keySet()) { - boolean userLimit = false; - String groupValue = ess.getSettings().getListGroupConfig().get(group).toString().trim(); - if (groupValue.equals("*")) - { - asterisk.put(group, true); - hasAsterisk = true; - continue; - } - usedGroups.add(group.toLowerCase()); - if (groupValue.equals("hidden")) - { - continue; - } - if (Util.isInt(groupValue)) - { - userLimit = true; - } - group = group.toLowerCase(); - final List users = new ArrayList(); - List u = sort.get(group); - if (u != null && !u.isEmpty()) + if (asterisk.get(key) == true) { - - if (userLimit) + asteriskGroup = key.toLowerCase(); + for (String group : groups) { - users.addAll(u); - int limit = Integer.parseInt(groupValue); - if (u.size() > limit) + group = group.toLowerCase().trim(); + if (usedGroups.contains(group) || usedGroupsAsterisk.contains(group)) { - groupString.append(_("listGroupTag", Util.replaceFormat(group))); - groupString.append(_("groupNumber", u.size(), commandLabel, group)); - groupString.setCharAt(0, Character.toTitleCase(groupString.charAt(0))); - sender.sendMessage(groupString.toString()); - groupString.setLength(0); continue; } + asteriskUsers.addAll(playerList.get(group)); } } + } + } + for (String group : groups) + { + group = group.toLowerCase().trim(); + if (usedGroups.contains(group)) + { + continue; + } + List users = playerList.get(group); - if (groupValue.contains(",") || sort.containsKey(groupValue.toLowerCase())) - { - if (sort.containsKey(groupValue)) - { - u = sort.get(groupValue); - if (u == null || u.isEmpty()) - { - continue; - } - users.addAll(u); - usedGroupsAsterisk.add(groupValue); - } - else - { - String[] groups = groupValue.split(","); - for (String g : groups) - { - g = g.trim().toLowerCase(); - if (g == null || g.equals("")) - { - continue; - } - u = sort.get(g); - if (u == null || u.isEmpty()) - { - continue; - } - users.addAll(u); - usedGroupsAsterisk.add(g); - } - } - } - if (users == null || users.isEmpty()) - { - continue; - } - if (ess.getPermissionsHandler().getName().equals("ConfigPermissions")) - { - group = _("connectedPlayers"); - } - groupString.append(_("listGroupTag", Util.replaceFormat(group))); - groupString.append(listUsers(users)); - groupString.setCharAt(0, Character.toTitleCase(groupString.charAt(0))); - sender.sendMessage(groupString.toString()); - groupString.setLength(0); + if (ess.getPermissionsHandler().getName().equals("ConfigPermissions")) + { + group = _("connectedPlayers"); } - final String[] groups = sort.keySet().toArray(new String[0]); - Arrays.sort(groups, String.CASE_INSENSITIVE_ORDER); - List asteriskUsers = new ArrayList(); - String asteriskGroup = ""; if (hasAsterisk) { - for(String key : asterisk.keySet()) + if (asteriskUsers == null || asteriskUsers.isEmpty()) { - if (asterisk.get(key) == true) - { - asteriskGroup = key.toLowerCase(); - for (String group : groups) - { - group = group.toLowerCase().trim(); - if (usedGroups.contains(group) || usedGroupsAsterisk.contains(group)) - { - continue; - } - asteriskUsers.addAll(sort.get(group)); - } - } + break; } + users = asteriskUsers; + group = asteriskGroup; } - for (String group : groups) - { - group = group.toLowerCase().trim(); - if (usedGroups.contains(group)) - { - continue; - } - List users = sort.get(group); + outputString.append(_("listGroupTag", Util.replaceFormat(group))); - if (ess.getPermissionsHandler().getName().equals("ConfigPermissions")) - { - group = _("connectedPlayers"); - } - if (hasAsterisk) - { - if (asteriskUsers == null || asteriskUsers.isEmpty()) - { - break; - } - users = asteriskUsers; - group = asteriskGroup; - } - groupString.append(_("listGroupTag", Util.replaceFormat(group))); - - groupString.append(listUsers(users)); - groupString.setCharAt(0, Character.toTitleCase(groupString.charAt(0))); - sender.sendMessage(groupString.toString()); - groupString.setLength(0); - if (hasAsterisk) - { - break; - } + outputString.append(listUsers(users)); + outputString.setCharAt(0, Character.toTitleCase(outputString.charAt(0))); + sender.sendMessage(outputString.toString()); + outputString.setLength(0); + if (hasAsterisk) + { + break; } } } diff --git a/Essentials/src/config.yml b/Essentials/src/config.yml index 6cd1ae689..a6c3dd464 100644 --- a/Essentials/src/config.yml +++ b/Essentials/src/config.yml @@ -285,21 +285,16 @@ backup: per-warp-permission: false # Sort output of /list command by groups. -# You are not allowed to have duplicate keys. +# You can hide and merge the groups displayed in /list by defining the desired behaviour here. +# Detailed instructions and examples can be found on the wiki: http://wiki.ess3.net/wiki/List list: - # this will merge the two groups owner and co-owner together in the list group "admin", - # make sure you set the groups you merge to "hidden" to prevent duplicate names. - # this accepts a comma separated list, so simply separate the groups you want merged together with a comma. - # like this: - Admin: owner, admin - # Setting the value to hidden will hide these from /list, they will still show on /list - # If a group is already defined as a merged group, then you don't need to set it to hidden, so in this case "admin" is automatically hidden. - # And they will also show in merged groups, like the ones above. - Owner: hidden - # Setting the value to a number limits the group. - # When there are more users online in the group than your limit it will truncate it to a simple, configurable message, - # The message will state how many users are online in that group and how to see a list of users in that group. - default: 20 + # To merge groups, list the groups you wish to merge + #Staff: owner, admin, moderators + # To limit groups, set a max user limit + #builder: 20 + # To hide groups, set the group as hidden + #default: hidden + Players: * # More output to the console. debug: false diff --git a/Essentials/src/plugin.yml b/Essentials/src/plugin.yml index 5931e1cf6..29afbd11a 100644 --- a/Essentials/src/plugin.yml +++ b/Essentials/src/plugin.yml @@ -344,7 +344,7 @@ commands: aliases: [mob,emob,spawnentity,espawnentity,espawnmob] speed: description: Change your speed limits. - usage: / [player] + usage: / [type] [player] aliases: [flyspeed,eflyspeed,fspeed,efspeed,espeed,walkspeed,ewalkspeed,wspeed,ewspeed] sudo: description: Make another user perform a command. -- cgit v1.2.3