1
0
mirror of https://github.com/essentials/Essentials.git synced 2025-08-18 12:31:26 +02:00

Cleanup - Split /list into methods

This commit is contained in:
KHobbits
2013-03-18 07:50:36 +00:00
parent 94fdf2c3ef
commit 611173ed50
3 changed files with 213 additions and 195 deletions

View File

@@ -19,18 +19,27 @@ public class Commandlist extends EssentialsCommand
@Override @Override
public void run(final Server server, final CommandSender sender, final String commandLabel, final String[] args) throws Exception 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 (sender instanceof Player)
{ {
if (ess.getUser(sender).isAuthorized("essentials.list.hidden")) showHidden = ess.getUser(sender).isAuthorized("essentials.list.hidden");
{ }
showhidden = true;
} sender.sendMessage(listSummary(server, showHidden));
Map<String, List<User>> playerList = getPlayerLists(server, showHidden);
if (args.length > 0)
{
sender.sendMessage(listGroupUsers(server, playerList, args[0].toLowerCase()));
} }
else else
{ {
showhidden = true; sendGroupedList(server, sender, commandLabel, playerList);
} }
}
private String listSummary(Server server, boolean showHidden)
{
int playerHidden = 0; int playerHidden = 0;
for (Player onlinePlayer : server.getOnlinePlayers()) for (Player onlinePlayer : server.getOnlinePlayers())
{ {
@@ -40,8 +49,8 @@ public class Commandlist extends EssentialsCommand
} }
} }
String online; String online;
if (showhidden && playerHidden > 0) if (showHidden && playerHidden > 0)
{ {
online = _("listAmountHidden", server.getOnlinePlayers().length - playerHidden, playerHidden, server.getMaxPlayers()); 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()); online = _("listAmount", server.getOnlinePlayers().length - playerHidden, server.getMaxPlayers());
} }
sender.sendMessage(online); return online;
}
private Map<String, List<User>> getPlayerLists(Server server, boolean showHidden)
Map<String, List<User>> sort = new HashMap<String, List<User>>(); {
for (Player OnlinePlayer : server.getOnlinePlayers()) Map<String, List<User>> playerList = new HashMap<String, List<User>>();
for (Player onlinePlayer : server.getOnlinePlayers())
{ {
final User player = ess.getUser(OnlinePlayer); final User onlineUser = ess.getUser(onlinePlayer);
if (player.isHidden() && !showhidden) if (onlineUser.isHidden() && !showHidden)
{ {
continue; continue;
} }
final String group = player.getGroup().toLowerCase(); final String group = onlineUser.getGroup().toLowerCase();
List<User> list = sort.get(group); List<User> list = playerList.get(group);
if (list == null) if (list == null)
{ {
list = new ArrayList<User>(); list = new ArrayList<User>();
sort.put(group, list); playerList.put(group, list);
} }
list.add(player); list.add(onlineUser);
} }
final StringBuilder groupString = new StringBuilder(); return playerList;
Set<String> keys = ess.getSettings().getListGroupConfig().keySet(); }
if (args.length > 0) private String listGroupUsers(Server server, Map<String, List<User>> playerList, String groupName) throws Exception
{
final StringBuilder outputString = new StringBuilder();
Set<String> configGroups = ess.getSettings().getListGroupConfig().keySet();
final List<User> users = new ArrayList<User>();
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<User> u = playerList.get(g.trim());
if (u == null || u.isEmpty())
{
continue;
}
users.addAll(u);
}
}
}
List<User> 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<String, List<User>> playerList)
{
final StringBuilder outputString = new StringBuilder();
Set<String> configGroups = ess.getSettings().getListGroupConfig().keySet();
List<String> usedGroups = new ArrayList<String>();
List<String> usedGroupsAsterisk = new ArrayList<String>();
Map<String, Boolean> asterisk = new HashMap<String, Boolean>();
boolean hasAsterisk = false;
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<User> users = new ArrayList<User>(); final List<User> users = new ArrayList<User>();
String group = args[0].toLowerCase(); List<User> u = playerList.get(group);
for (String key : keys) if (u != null && !u.isEmpty())
{ {
String groupValue = ess.getSettings().getListGroupConfig().get(key).toString().trim();
if(key.equalsIgnoreCase(group) && groupValue.contains(",")) 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()))
{
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(","); String[] groups = groupValue.split(",");
for (String g : groups) for (String g : groups)
{ {
g = g.trim().toLowerCase();
if (g == null || g.equals("")) if (g == null || g.equals(""))
{ {
continue; continue;
} }
List<User> u = sort.get(g.trim()); u = playerList.get(g);
if (u == null || u.isEmpty()) if (u == null || u.isEmpty())
{ {
continue; continue;
} }
users.addAll(u); users.addAll(u);
usedGroupsAsterisk.add(g);
} }
} }
} }
List<User> groupUsers = sort.get(group);
if (groupUsers != null && !groupUsers.isEmpty())
{
users.addAll(groupUsers);
}
if (users == null || users.isEmpty()) if (users == null || users.isEmpty())
{ {
throw new Exception(_("groupDoesNotExist")); continue;
} }
groupString.append(_("listGroupTag", Util.replaceFormat(group))); if (ess.getPermissionsHandler().getName().equals("ConfigPermissions"))
groupString.append(listUsers(users));
groupString.setCharAt(0, Character.toTitleCase(groupString.charAt(0)));
sender.sendMessage(groupString.toString());
groupString.setLength(0);
}
else
{
List<String> usedGroups = new ArrayList<String>();
List<String> usedGroupsAsterisk = new ArrayList<String>();
Map<String, Boolean> asterisk = new HashMap<String, Boolean>();
boolean hasAsterisk = false;
for (String group : keys)
{ {
boolean userLimit = false; group = _("connectedPlayers");
String groupValue = ess.getSettings().getListGroupConfig().get(group).toString().trim(); }
if (groupValue.equals("*")) outputString.append(_("listGroupTag", Util.replaceFormat(group)));
{ outputString.append(listUsers(users));
asterisk.put(group, true); outputString.setCharAt(0, Character.toTitleCase(outputString.charAt(0)));
hasAsterisk = true; sender.sendMessage(outputString.toString());
continue; outputString.setLength(0);
} }
usedGroups.add(group.toLowerCase());
if (groupValue.equals("hidden")) final String[] groups = playerList.keySet().toArray(new String[0]);
{ Arrays.sort(groups, String.CASE_INSENSITIVE_ORDER);
continue; List<User> asteriskUsers = new ArrayList<User>();
} String asteriskGroup = "";
if (Util.isInt(groupValue)) if (hasAsterisk)
{ {
userLimit = true; for (String key : asterisk.keySet())
} {
group = group.toLowerCase(); if (asterisk.get(key) == true)
final List<User> users = new ArrayList<User>(); {
List<User> u = sort.get(group); asteriskGroup = key.toLowerCase();
if (u != null && !u.isEmpty()) for (String group : groups)
{ {
group = group.toLowerCase().trim();
if (userLimit) if (usedGroups.contains(group) || usedGroupsAsterisk.contains(group))
{ {
users.addAll(u); continue;
int limit = Integer.parseInt(groupValue); }
if (u.size() > limit) asteriskUsers.addAll(playerList.get(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()); for (String group : groups)
groupString.setLength(0); {
continue; group = group.toLowerCase().trim();
} if (usedGroups.contains(group))
} {
} continue;
}
if (groupValue.contains(",") || sort.containsKey(groupValue.toLowerCase())) List<User> users = playerList.get(group);
{
if (sort.containsKey(groupValue)) if (ess.getPermissionsHandler().getName().equals("ConfigPermissions"))
{ {
u = sort.get(groupValue); group = _("connectedPlayers");
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);
} }
final String[] groups = sort.keySet().toArray(new String[0]);
Arrays.sort(groups, String.CASE_INSENSITIVE_ORDER);
List<User> asteriskUsers = new ArrayList<User>();
String asteriskGroup = "";
if (hasAsterisk) 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));
}
}
}
}
for (String group : groups)
{
group = group.toLowerCase().trim();
if (usedGroups.contains(group))
{
continue;
}
List<User> users = sort.get(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; break;
} }
users = asteriskUsers;
group = asteriskGroup;
}
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);
if (hasAsterisk)
{
break;
} }
} }
} }

View File

@@ -285,21 +285,16 @@ backup:
per-warp-permission: false per-warp-permission: false
# Sort output of /list command by groups. # 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: list:
# this will merge the two groups owner and co-owner together in the list group "admin", # To merge groups, list the groups you wish to merge
# make sure you set the groups you merge to "hidden" to prevent duplicate names. #Staff: owner, admin, moderators
# this accepts a comma separated list, so simply separate the groups you want merged together with a comma. # To limit groups, set a max user limit
# like this: #builder: 20
Admin: owner, admin # To hide groups, set the group as hidden
# Setting the value to hidden will hide these from /list, they will still show on /list <groupname> #default: hidden
# 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. Players: *
# 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
# More output to the console. # More output to the console.
debug: false debug: false

View File

@@ -344,7 +344,7 @@ commands:
aliases: [mob,emob,spawnentity,espawnentity,espawnmob] aliases: [mob,emob,spawnentity,espawnentity,espawnmob]
speed: speed:
description: Change your speed limits. description: Change your speed limits.
usage: /<command> <speed> [player] usage: /<command> [type] <speed> [player]
aliases: [flyspeed,eflyspeed,fspeed,efspeed,espeed,walkspeed,ewalkspeed,wspeed,ewspeed] aliases: [flyspeed,eflyspeed,fspeed,efspeed,espeed,walkspeed,ewalkspeed,wspeed,ewspeed]
sudo: sudo:
description: Make another user perform a command. description: Make another user perform a command.