mirror of
https://github.com/proxiodev/RedisBungee.git
synced 2024-11-22 20:28:00 +00:00
Add /plist command and plural player count.
This commit is contained in:
parent
8c05655330
commit
982644d31c
@ -129,6 +129,18 @@ public final class RedisBungee extends Plugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Set<UUID> getPlayersOnProxy(String server) {
|
||||||
|
checkArgument(getServerIds().contains(server), server + " is not a valid proxy ID");
|
||||||
|
try (Jedis jedis = pool.getResource()) {
|
||||||
|
Set<String> users = jedis.smembers("proxy:" + server + ":usersOnline");
|
||||||
|
ImmutableSet.Builder<UUID> builder = ImmutableSet.builder();
|
||||||
|
for (String user : users) {
|
||||||
|
builder.add(UUID.fromString(user));
|
||||||
|
}
|
||||||
|
return builder.build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
final Multimap<String, UUID> serversToPlayers() {
|
final Multimap<String, UUID> serversToPlayers() {
|
||||||
if (usingLua) {
|
if (usingLua) {
|
||||||
Collection<String> data = (Collection<String>) serverToPlayersScript.eval(ImmutableList.<String>of(), getServerIds());
|
Collection<String> data = (Collection<String>) serverToPlayersScript.eval(ImmutableList.<String>of(), getServerIds());
|
||||||
@ -295,6 +307,7 @@ public final class RedisBungee extends Plugin {
|
|||||||
getProxy().getPluginManager().registerCommand(this, new RedisBungeeCommands.ServerId(this));
|
getProxy().getPluginManager().registerCommand(this, new RedisBungeeCommands.ServerId(this));
|
||||||
getProxy().getPluginManager().registerCommand(this, new RedisBungeeCommands.ServerIds());
|
getProxy().getPluginManager().registerCommand(this, new RedisBungeeCommands.ServerIds());
|
||||||
getProxy().getPluginManager().registerCommand(this, new RedisBungeeCommands.PlayerProxyCommand(this));
|
getProxy().getPluginManager().registerCommand(this, new RedisBungeeCommands.PlayerProxyCommand(this));
|
||||||
|
getProxy().getPluginManager().registerCommand(this, new RedisBungeeCommands.PlistCommand(this));
|
||||||
api = new RedisBungeeAPI(this);
|
api = new RedisBungeeAPI(this);
|
||||||
getProxy().getPluginManager().registerListener(this, new RedisBungeeListener(this, configuration.getExemptAddresses()));
|
getProxy().getPluginManager().registerListener(this, new RedisBungeeListener(this, configuration.getExemptAddresses()));
|
||||||
getProxy().getPluginManager().registerListener(this, dataManager);
|
getProxy().getPluginManager().registerListener(this, dataManager);
|
||||||
|
@ -142,6 +142,16 @@ public class RedisBungeeAPI {
|
|||||||
return plugin.getPlayersOnServer(server);
|
return plugin.getPlayersOnServer(server);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a list of players on the specified proxy.
|
||||||
|
*
|
||||||
|
* @param server a server name
|
||||||
|
* @return a Set with all UUIDs found on this proxy
|
||||||
|
*/
|
||||||
|
public final Set<UUID> getPlayersOnProxy(@NonNull String server) {
|
||||||
|
return plugin.getPlayersOnProxy(server);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convenience method: Checks if the specified player is online.
|
* Convenience method: Checks if the specified player is online.
|
||||||
*
|
*
|
||||||
|
@ -40,6 +40,7 @@ import net.md_5.bungee.api.plugin.Command;
|
|||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.TreeSet;
|
import java.util.TreeSet;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@ -59,6 +60,10 @@ class RedisBungeeCommands {
|
|||||||
private static final BaseComponent[] NO_COMMAND_SPECIFIED =
|
private static final BaseComponent[] NO_COMMAND_SPECIFIED =
|
||||||
new ComponentBuilder("You must specify a command to be run.").color(ChatColor.RED).create();
|
new ComponentBuilder("You must specify a command to be run.").color(ChatColor.RED).create();
|
||||||
|
|
||||||
|
private static String playerPlural(int num) {
|
||||||
|
return num == 1 ? num + " player is" : num + " players are";
|
||||||
|
}
|
||||||
|
|
||||||
public static class GlistCommand extends Command {
|
public static class GlistCommand extends Command {
|
||||||
private final RedisBungee plugin;
|
private final RedisBungee plugin;
|
||||||
|
|
||||||
@ -73,8 +78,8 @@ class RedisBungeeCommands {
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
int count = RedisBungee.getApi().getPlayerCount();
|
int count = RedisBungee.getApi().getPlayerCount();
|
||||||
BaseComponent[] playersOnline = new ComponentBuilder("").color(ChatColor.YELLOW).append(String.valueOf(count))
|
BaseComponent[] playersOnline = new ComponentBuilder("").color(ChatColor.YELLOW)
|
||||||
.append(" player(s) are currently online.").create();
|
.append(playerPlural(count) + " currently online.").create();
|
||||||
if (args.length > 0 && args[0].equals("showall")) {
|
if (args.length > 0 && args[0].equals("showall")) {
|
||||||
Multimap<String, UUID> serverToPlayers = RedisBungee.getApi().getServerToPlayers();
|
Multimap<String, UUID> serverToPlayers = RedisBungee.getApi().getServerToPlayers();
|
||||||
Multimap<String, String> human = HashMultimap.create();
|
Multimap<String, String> human = HashMultimap.create();
|
||||||
@ -304,4 +309,55 @@ class RedisBungeeCommands {
|
|||||||
sender.sendMessage(textComponent);
|
sender.sendMessage(textComponent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class PlistCommand extends Command {
|
||||||
|
private final RedisBungee plugin;
|
||||||
|
|
||||||
|
PlistCommand(RedisBungee plugin) {
|
||||||
|
super("plist", "redisbungee.command.plist", "redisbungee", "rplist");
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(final CommandSender sender, final String[] args) {
|
||||||
|
plugin.getProxy().getScheduler().runAsync(plugin, new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
String proxy = args.length >= 1 ? args[0] : RedisBungee.getConfiguration().getServerId();
|
||||||
|
if (!plugin.getServerIds().contains(proxy)) {
|
||||||
|
sender.sendMessage(new ComponentBuilder(proxy + " is not a valid proxy. See /serverids for valid proxies.").color(ChatColor.RED).create());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Set<UUID> players = RedisBungee.getApi().getPlayersOnProxy(proxy);
|
||||||
|
BaseComponent[] playersOnline = new ComponentBuilder("").color(ChatColor.YELLOW)
|
||||||
|
.append(playerPlural(players.size()) + " currently on proxy " + proxy + ".").create();
|
||||||
|
if (args.length >= 2 && args[1].equals("showall")) {
|
||||||
|
Multimap<String, UUID> serverToPlayers = RedisBungee.getApi().getServerToPlayers();
|
||||||
|
Multimap<String, String> human = HashMultimap.create();
|
||||||
|
for (Map.Entry<String, UUID> entry : serverToPlayers.entries()) {
|
||||||
|
if (players.contains(entry.getValue())) {
|
||||||
|
human.put(entry.getKey(), plugin.getUuidTranslator().getNameFromUuid(entry.getValue(), false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (String server : new TreeSet<>(human.keySet())) {
|
||||||
|
TextComponent serverName = new TextComponent();
|
||||||
|
serverName.setColor(ChatColor.RED);
|
||||||
|
serverName.setText("[" + server + "] ");
|
||||||
|
TextComponent serverCount = new TextComponent();
|
||||||
|
serverCount.setColor(ChatColor.YELLOW);
|
||||||
|
serverCount.setText("(" + serverToPlayers.get(server).size() + "): ");
|
||||||
|
TextComponent serverPlayers = new TextComponent();
|
||||||
|
serverPlayers.setColor(ChatColor.WHITE);
|
||||||
|
serverPlayers.setText(Joiner.on(", ").join(human.get(server)));
|
||||||
|
sender.sendMessage(serverName, serverCount, serverPlayers);
|
||||||
|
}
|
||||||
|
sender.sendMessage(playersOnline);
|
||||||
|
} else {
|
||||||
|
sender.sendMessage(playersOnline);
|
||||||
|
sender.sendMessage(new ComponentBuilder("To see all players online, use /plist " + proxy + " showall.").color(ChatColor.YELLOW).create());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user