2013-08-20 22:39:34 +00:00
|
|
|
package com.earth2me.essentials;
|
|
|
|
|
2014-03-20 15:54:07 +00:00
|
|
|
import static com.earth2me.essentials.I18n.tl;
|
2013-08-20 22:39:34 +00:00
|
|
|
import com.earth2me.essentials.utils.FormatUtil;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.Collections;
|
|
|
|
import java.util.HashMap;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.Locale;
|
|
|
|
import java.util.Map;
|
|
|
|
import java.util.Set;
|
|
|
|
import org.bukkit.Server;
|
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
|
|
|
|
|
|
|
|
public class PlayerList
|
|
|
|
{
|
|
|
|
// Cosmetic list formatting
|
2014-02-04 16:11:43 +00:00
|
|
|
public static String listUsers(final IEssentials ess, final List<User> users, final String seperator)
|
2013-08-20 22:39:34 +00:00
|
|
|
{
|
|
|
|
final StringBuilder groupString = new StringBuilder();
|
|
|
|
Collections.sort(users);
|
|
|
|
boolean needComma = false;
|
|
|
|
for (User user : users)
|
|
|
|
{
|
|
|
|
if (needComma)
|
|
|
|
{
|
|
|
|
groupString.append(seperator);
|
|
|
|
}
|
|
|
|
needComma = true;
|
|
|
|
if (user.isAfk())
|
|
|
|
{
|
2014-03-20 15:54:07 +00:00
|
|
|
groupString.append(tl("listAfkTag"));
|
2013-08-20 22:39:34 +00:00
|
|
|
}
|
|
|
|
if (user.isHidden())
|
|
|
|
{
|
2014-03-20 15:54:07 +00:00
|
|
|
groupString.append(tl("listHiddenTag"));
|
2013-08-20 22:39:34 +00:00
|
|
|
}
|
|
|
|
user.setDisplayNick();
|
|
|
|
groupString.append(user.getDisplayName());
|
|
|
|
groupString.append("\u00a7f");
|
|
|
|
}
|
|
|
|
return groupString.toString();
|
|
|
|
}
|
|
|
|
|
|
|
|
// Produce a user summary: There are 5 out of maximum 10 players online.
|
2014-06-27 00:46:37 +00:00
|
|
|
public static String listSummary(final IEssentials ess, final User user, final boolean showHidden)
|
2013-08-20 22:39:34 +00:00
|
|
|
{
|
|
|
|
Server server = ess.getServer();
|
|
|
|
int playerHidden = 0;
|
2014-06-27 00:46:37 +00:00
|
|
|
int hiddenCount = 0;
|
2014-07-12 06:03:36 +00:00
|
|
|
for (User onlinePlayer : ess.getOnlineUsers())
|
2013-08-20 22:39:34 +00:00
|
|
|
{
|
2014-07-12 06:03:36 +00:00
|
|
|
if (onlinePlayer.isHidden() || (user != null && !user.getBase().canSee(onlinePlayer.getBase())))
|
2013-08-20 22:39:34 +00:00
|
|
|
{
|
|
|
|
playerHidden++;
|
2014-07-12 06:03:36 +00:00
|
|
|
if (showHidden || user.getBase().canSee(onlinePlayer.getBase()))
|
2014-06-27 00:46:37 +00:00
|
|
|
{
|
|
|
|
hiddenCount++;
|
|
|
|
}
|
2013-08-20 22:39:34 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
String online;
|
2014-06-27 00:46:37 +00:00
|
|
|
if (hiddenCount > 0)
|
2013-08-20 22:39:34 +00:00
|
|
|
{
|
2014-07-12 06:03:36 +00:00
|
|
|
online = tl("listAmountHidden", ess.getOnlinePlayers().size() - playerHidden, hiddenCount, server.getMaxPlayers());
|
2013-08-20 22:39:34 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2014-07-12 06:03:36 +00:00
|
|
|
online = tl("listAmount", ess.getOnlinePlayers().size() - playerHidden, server.getMaxPlayers());
|
2013-08-20 22:39:34 +00:00
|
|
|
}
|
|
|
|
return online;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Build the basic player list, divided by groups.
|
2014-06-27 00:46:37 +00:00
|
|
|
public static Map<String, List<User>> getPlayerLists(final IEssentials ess, final User sender, final boolean showHidden)
|
2013-08-20 22:39:34 +00:00
|
|
|
{
|
|
|
|
Server server = ess.getServer();
|
|
|
|
final Map<String, List<User>> playerList = new HashMap<String, List<User>>();
|
2014-07-12 06:03:36 +00:00
|
|
|
for (User onlineUser : ess.getOnlineUsers())
|
2013-08-20 22:39:34 +00:00
|
|
|
{
|
2014-06-27 02:48:26 +00:00
|
|
|
if ((sender == null && !showHidden && onlineUser.isHidden()) ||
|
2014-07-12 06:03:36 +00:00
|
|
|
(sender != null && !showHidden && !sender.getBase().canSee(onlineUser.getBase())))
|
2013-08-20 22:39:34 +00:00
|
|
|
{
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
final String group = FormatUtil.stripFormat(FormatUtil.stripEssentialsFormat(onlineUser.getGroup().toLowerCase()));
|
|
|
|
List<User> list = playerList.get(group);
|
|
|
|
if (list == null)
|
|
|
|
{
|
|
|
|
list = new ArrayList<User>();
|
|
|
|
playerList.put(group, list);
|
|
|
|
}
|
|
|
|
list.add(onlineUser);
|
|
|
|
}
|
|
|
|
return playerList;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Handle the merging of groups
|
2014-02-04 16:11:43 +00:00
|
|
|
public static List<User> getMergedList(final IEssentials ess, final Map<String, List<User>> playerList, final String groupName)
|
2013-08-20 22:39:34 +00:00
|
|
|
{
|
|
|
|
final Set<String> configGroups = ess.getSettings().getListGroupConfig().keySet();
|
|
|
|
final List<User> users = new ArrayList<User>();
|
|
|
|
for (String configGroup : configGroups)
|
|
|
|
{
|
|
|
|
if (configGroup.equalsIgnoreCase(groupName))
|
|
|
|
{
|
|
|
|
String[] groupValues = ess.getSettings().getListGroupConfig().get(configGroup).toString().trim().split(" ");
|
|
|
|
for (String groupValue : groupValues)
|
|
|
|
{
|
|
|
|
groupValue = groupValue.toLowerCase(Locale.ENGLISH);
|
2013-11-07 02:22:32 +00:00
|
|
|
if (groupValue == null || groupValue.isEmpty())
|
2013-08-20 22:39:34 +00:00
|
|
|
{
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
List<User> u = playerList.get(groupValue.trim());
|
|
|
|
if (u == null || u.isEmpty())
|
|
|
|
{
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
playerList.remove(groupValue);
|
|
|
|
users.addAll(u);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return users;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Output a playerlist of just a single group, /list <groupname>
|
2014-02-04 16:11:43 +00:00
|
|
|
public static String listGroupUsers(final IEssentials ess, final Map<String, List<User>> playerList, final String groupName) throws Exception
|
2013-08-20 22:39:34 +00:00
|
|
|
{
|
|
|
|
final List<User> users = getMergedList(ess, playerList, groupName);
|
|
|
|
final List<User> groupUsers = playerList.get(groupName);
|
|
|
|
if (groupUsers != null && !groupUsers.isEmpty())
|
|
|
|
{
|
|
|
|
users.addAll(groupUsers);
|
|
|
|
}
|
|
|
|
if (users == null || users.isEmpty())
|
|
|
|
{
|
2014-03-20 15:54:07 +00:00
|
|
|
throw new Exception(tl("groupDoesNotExist"));
|
2013-08-20 22:39:34 +00:00
|
|
|
}
|
|
|
|
final StringBuilder displayGroupName = new StringBuilder();
|
|
|
|
displayGroupName.append(Character.toTitleCase(groupName.charAt(0)));
|
|
|
|
displayGroupName.append(groupName.substring(1));
|
|
|
|
return outputFormat(displayGroupName.toString(), listUsers(ess, users, ", "));
|
|
|
|
}
|
|
|
|
|
|
|
|
// Build the output string
|
2014-02-04 16:11:43 +00:00
|
|
|
public static String outputFormat(final String group, final String message)
|
2013-08-20 22:39:34 +00:00
|
|
|
{
|
|
|
|
final StringBuilder outputString = new StringBuilder();
|
2014-03-20 15:54:07 +00:00
|
|
|
outputString.append(tl("listGroupTag", FormatUtil.replaceFormat(group)));
|
2013-08-20 22:39:34 +00:00
|
|
|
outputString.append(message);
|
|
|
|
return outputString.toString();
|
|
|
|
}
|
|
|
|
}
|