diff --git a/Artifacts/SubServers.Bungee.jar b/Artifacts/SubServers.Bungee.jar index e2ace029..3f6bd68e 100644 Binary files a/Artifacts/SubServers.Bungee.jar and b/Artifacts/SubServers.Bungee.jar differ diff --git a/Artifacts/SubServers.Client.Bukkit.jar b/Artifacts/SubServers.Client.Bukkit.jar index 3467f6f2..0b2c9ffa 100644 Binary files a/Artifacts/SubServers.Client.Bukkit.jar and b/Artifacts/SubServers.Client.Bukkit.jar differ diff --git a/Artifacts/SubServers.Host.jar b/Artifacts/SubServers.Host.jar index e0399eb3..c51fb832 100644 Binary files a/Artifacts/SubServers.Host.jar and b/Artifacts/SubServers.Host.jar differ diff --git a/Javadoc/SubServers.Bungee.jar b/Javadoc/SubServers.Bungee.jar index c1d749e2..e00f0e65 100644 Binary files a/Javadoc/SubServers.Bungee.jar and b/Javadoc/SubServers.Bungee.jar differ diff --git a/Javadoc/SubServers.Bungee/index-all.html b/Javadoc/SubServers.Bungee/index-all.html index 2734018c..3209c301 100644 --- a/Javadoc/SubServers.Bungee/index-all.html +++ b/Javadoc/SubServers.Bungee/index-all.html @@ -968,6 +968,16 @@
Gets the Recommended Minecraft Version
+
getGlobalPlayers() - Method in interface net.ME1312.SubServers.Bungee.Host.Server
+
+
Get players on this server across all known proxies
+
+
getGlobalPlayers() - Method in class net.ME1312.SubServers.Bungee.Host.ServerContainer
+
 
+
getGlobalPlayers() - Method in class net.ME1312.SubServers.Bungee.SubAPI
+
+
Get players on this network across all known proxies
+
getGroup(String) - Method in class net.ME1312.SubServers.Bungee.SubAPI
Gets a Server Group (Group names are case insensitive here)
diff --git a/Javadoc/SubServers.Bungee/net/ME1312/SubServers/Bungee/Host/External/ExternalSubServer.html b/Javadoc/SubServers.Bungee/net/ME1312/SubServers/Bungee/Host/External/ExternalSubServer.html index a64867cd..52b631d6 100644 --- a/Javadoc/SubServers.Bungee/net/ME1312/SubServers/Bungee/Host/External/ExternalSubServer.html +++ b/Javadoc/SubServers.Bungee/net/ME1312/SubServers/Bungee/Host/External/ExternalSubServer.html @@ -357,7 +357,7 @@ extends ServerContainer -addExtra, addGroup, getDisplayName, getExtra, getExtra, getGroups, getMotd, getSignature, getSubData, hasExtra, isHidden, isRestricted, removeExtra, removeGroup, setHidden, setMotd, setRestricted, setSubData +addExtra, addGroup, getDisplayName, getExtra, getExtra, getGlobalPlayers, getGroups, getMotd, getSignature, getSubData, hasExtra, isHidden, isRestricted, removeExtra, removeGroup, setHidden, setMotd, setRestricted, setSubData + + + + diff --git a/Javadoc/SubServers.Client.Bukkit.jar b/Javadoc/SubServers.Client.Bukkit.jar index de2b5b0e..321f8663 100644 Binary files a/Javadoc/SubServers.Client.Bukkit.jar and b/Javadoc/SubServers.Client.Bukkit.jar differ diff --git a/Javadoc/SubServers.Host.jar b/Javadoc/SubServers.Host.jar index 26a78025..f88f64c1 100644 Binary files a/Javadoc/SubServers.Host.jar and b/Javadoc/SubServers.Host.jar differ diff --git a/SubServers.Bungee/src.jar b/SubServers.Bungee/src.jar index e2e4c9da..48b719df 100644 Binary files a/SubServers.Bungee/src.jar and b/SubServers.Bungee/src.jar differ diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Server.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Server.java index 77ec678d..34aeebb2 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Server.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Server.java @@ -1,10 +1,13 @@ package net.ME1312.SubServers.Bungee.Host; import net.ME1312.SubServers.Bungee.Library.ExtraDataHandler; +import net.ME1312.SubServers.Bungee.Library.NamedContainer; import net.ME1312.SubServers.Bungee.Network.ClientHandler; import net.md_5.bungee.api.config.ServerInfo; +import java.util.Collection; import java.util.List; +import java.util.UUID; /** * Server Interface @@ -46,6 +49,13 @@ public interface Server extends ServerInfo, ClientHandler, ExtraDataHandler { */ void removeGroup(String value); + /** + * Get players on this server across all known proxies + * + * @return Player Collection + */ + Collection> getGlobalPlayers(); + /** * If the server is hidden from players * diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/ServerContainer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/ServerContainer.java index 575f359c..fcee9cd0 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/ServerContainer.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/ServerContainer.java @@ -11,15 +11,14 @@ import net.ME1312.SubServers.Bungee.Network.Client; import net.ME1312.SubServers.Bungee.Network.ClientHandler; import net.ME1312.SubServers.Bungee.Network.SubDataServer; import net.ME1312.SubServers.Bungee.SubAPI; +import net.ME1312.SubServers.Bungee.SubPlugin; import net.md_5.bungee.BungeeServerInfo; import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.connection.ProxiedPlayer; import org.json.JSONObject; import java.net.InetSocketAddress; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; +import java.util.*; /** * Server Class @@ -96,6 +95,23 @@ public class ServerContainer extends BungeeServerInfo implements Server { Collections.sort(groups); } + @SuppressWarnings({"deprecation", "unchecked"}) + @Override + public Collection> getGlobalPlayers() { + List> players = new ArrayList>(); + SubPlugin plugin = SubAPI.getInstance().getInternals(); + if (plugin.redis) { + try { + for (UUID player : (Set) plugin.redis("getPlayersOnServer", new NamedContainer<>(String.class, getName()))) players.add(new NamedContainer<>((String) plugin.redis("getNameFromUuid", new NamedContainer<>(UUID.class, player)), player)); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + for (ProxiedPlayer player : getPlayers()) players.add(new NamedContainer<>(player.getName(), player.getUniqueId())); + } + return players; + } + @Override public boolean isHidden() { return hidden; @@ -178,11 +194,10 @@ public class ServerContainer extends BungeeServerInfo implements Server { info.put("restricted", isRestricted()); info.put("hidden", isHidden()); JSONObject players = new JSONObject(); - for (ProxiedPlayer player : getPlayers()) { + for (NamedContainer player : getGlobalPlayers()) { JSONObject pinfo = new JSONObject(); - pinfo.put("name", player.getName()); - pinfo.put("nick", player.getDisplayName()); - players.put(player.getUniqueId().toString(), pinfo); + pinfo.put("name", player.name()); + players.put(player.get().toString(), pinfo); } info.put("players", players); if (getSubData() != null) info.put("subdata", getSubData().getAddress().toString()); diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Files/lang.yml b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Files/lang.yml index 2472c47b..d3b8c7b0 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Files/lang.yml +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Files/lang.yml @@ -22,7 +22,6 @@ Lang: 'Command.Help.Info': ' &7Info:&f $str$' 'Command.Help.Terminate': ' &7Teleport to Server:&f $str$' 'Command.Help.Host.Create': ' &7Create Server:&f $str$' - 'Command.Help.Server.Teleport': ' &7Teleport to Server:&f $str$' 'Command.Help.SubServer.Start': ' &7Start Server:&f $str$' 'Command.Help.SubServer.Stop': ' &7Stop Server:&f $str$' 'Command.Help.SubServer.Terminate': ' &7Terminate Server:&f $str$' @@ -73,7 +72,7 @@ Lang: 'Interface.Generic.Back-Arrow': '&e&l<--' 'Interface.Generic.Next-Arrow': '&e&l-->' 'Interface.Generic.Undo': '&6Undo' - 'Interface.Generic.Downloading': '&bSubServers &1&l\u00BB&b Downloading - $str$' + 'Interface.Generic.Downloading': '&7SubServers &8&l\u00BB&7 Downloading:&f $str$' 'Interface.Generic.Downloading.Title': 'Downloading...' 'Interface.Generic.Downloading.Title-Color': '&b' 'Interface.Generic.Downloading.Title-Color-Alt': '&3' diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadHostInfo.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadHostInfo.java index 54ba1d5f..23835ddf 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadHostInfo.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadHostInfo.java @@ -3,6 +3,7 @@ package net.ME1312.SubServers.Bungee.Network.Packet; import net.ME1312.SubServers.Bungee.Host.Host; import net.ME1312.SubServers.Bungee.Host.SubCreator; import net.ME1312.SubServers.Bungee.Host.SubServer; +import net.ME1312.SubServers.Bungee.Library.NamedContainer; import net.ME1312.SubServers.Bungee.Library.Version.Version; import net.ME1312.SubServers.Bungee.Network.Client; import net.ME1312.SubServers.Bungee.Network.ClientHandler; @@ -14,6 +15,7 @@ import net.md_5.bungee.api.connection.ProxiedPlayer; import org.json.JSONObject; import java.util.ArrayList; +import java.util.UUID; /** * Download Host Info Packet @@ -80,11 +82,10 @@ public class PacketDownloadHostInfo implements PacketIn, PacketOut { sinfo.put("running", server.isRunning()); sinfo.put("temp", server.isTemporary()); JSONObject players = new JSONObject(); - for (ProxiedPlayer player : server.getPlayers()) { + for (NamedContainer player : server.getGlobalPlayers()) { JSONObject pinfo = new JSONObject(); - pinfo.put("name", player.getName()); - pinfo.put("nick", player.getDisplayName()); - players.put(player.getUniqueId().toString(), pinfo); + pinfo.put("name", player.name()); + players.put(player.get().toString(), pinfo); } sinfo.put("players", players); servers.put(server.getName(), sinfo); diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadPlayerList.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadPlayerList.java index 3decbabd..c51cd202 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadPlayerList.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadPlayerList.java @@ -1,14 +1,18 @@ package net.ME1312.SubServers.Bungee.Network.Packet; +import net.ME1312.SubServers.Bungee.Library.NamedContainer; import net.ME1312.SubServers.Bungee.Library.Util; import net.ME1312.SubServers.Bungee.Library.Version.Version; import net.ME1312.SubServers.Bungee.Network.Client; import net.ME1312.SubServers.Bungee.Network.PacketIn; import net.ME1312.SubServers.Bungee.Network.PacketOut; import net.ME1312.SubServers.Bungee.SubPlugin; +import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.connection.ProxiedPlayer; import org.json.JSONObject; +import java.util.UUID; + /** * Download Player List Packet */ @@ -39,16 +43,24 @@ public class PacketDownloadPlayerList implements PacketIn, PacketOut { } @Override + @SuppressWarnings("unchecked") public JSONObject generate() { JSONObject json = new JSONObject(); json.put("id", id); JSONObject players = new JSONObject(); - for (ProxiedPlayer player : plugin.getPlayers()) { + for (NamedContainer player : plugin.api.getGlobalPlayers()) { JSONObject pinfo = new JSONObject(); - pinfo.put("name", player.getName()); - pinfo.put("nick", player.getDisplayName()); - pinfo.put("server", player.getServer().getInfo().getName()); - players.put(player.getUniqueId().toString(), pinfo); + pinfo.put("name", player.get()); + if (plugin.redis) { + try { + pinfo.put("server", ((ServerInfo) plugin.redis("getServerFor", new NamedContainer<>(UUID.class, player.get()))).getName()); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + pinfo.put("server", plugin.getPlayer(player.get()).getServer().getInfo().getName()); + } + players.put(player.get().toString(), pinfo); } json.put("players", players); return json; diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadProxyInfo.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadProxyInfo.java index 83e2dc59..44fee5be 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadProxyInfo.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadProxyInfo.java @@ -51,7 +51,7 @@ public class PacketDownloadProxyInfo implements PacketIn, PacketOut { json.put("bungee", bungee); JSONObject minecraft = new JSONObject(); minecraft.put("version", plugin.api.getGameVersion()); - minecraft.put("players", plugin.getPlayers().size()); + minecraft.put("players", plugin.api.getGlobalPlayers().size()); json.put("minecraft", minecraft); JSONObject system = new JSONObject(); JSONObject os = new JSONObject(); diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadServerInfo.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadServerInfo.java index cdcde18e..41f33068 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadServerInfo.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadServerInfo.java @@ -3,6 +3,7 @@ package net.ME1312.SubServers.Bungee.Network.Packet; import net.ME1312.SubServers.Bungee.Host.Server; import net.ME1312.SubServers.Bungee.Host.ServerContainer; import net.ME1312.SubServers.Bungee.Host.SubServer; +import net.ME1312.SubServers.Bungee.Library.NamedContainer; import net.ME1312.SubServers.Bungee.Library.Util; import net.ME1312.SubServers.Bungee.Library.Version.Version; import net.ME1312.SubServers.Bungee.Network.Client; @@ -14,6 +15,7 @@ import org.json.JSONObject; import java.util.ArrayList; import java.util.List; +import java.util.UUID; /** * Download Server Info Packet @@ -85,11 +87,10 @@ public class PacketDownloadServerInfo implements PacketIn, PacketOut { info.put("extra", server.getExtra().toJSON()); JSONObject players = new JSONObject(); - for (ProxiedPlayer player : server.getPlayers()) { + for (NamedContainer player : server.getGlobalPlayers()) { JSONObject pinfo = new JSONObject(); - pinfo.put("name", player.getName()); - pinfo.put("nick", player.getDisplayName()); - players.put(player.getUniqueId().toString(), pinfo); + pinfo.put("name", player.name()); + players.put(player.get().toString(), pinfo); } info.put("players", players); } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubAPI.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubAPI.java index baa46563..5f1c616d 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubAPI.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubAPI.java @@ -14,6 +14,7 @@ import net.ME1312.SubServers.Bungee.Library.UniversalFile; import net.ME1312.SubServers.Bungee.Library.Util; import net.ME1312.SubServers.Bungee.Library.Version.Version; import net.ME1312.SubServers.Bungee.Network.SubDataServer; +import net.md_5.bungee.api.connection.ProxiedPlayer; import java.lang.reflect.InvocationTargetException; import java.net.InetAddress; @@ -433,6 +434,26 @@ public final class SubAPI { return getSubServers().get(name.toLowerCase()); } + /** + * Get players on this network across all known proxies + * + * @return Player Collection + */ + @SuppressWarnings("unchecked") + public Collection> getGlobalPlayers() { + List> players = new ArrayList>(); + if (plugin.redis) { + try { + for (UUID player : (Set) plugin.redis("getPlayersOnline")) players.add(new NamedContainer<>((String) plugin.redis("getNameFromUuid", new NamedContainer<>(UUID.class, player)), player)); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + for (ProxiedPlayer player : plugin.getPlayers()) players.add(new NamedContainer<>(player.getName(), player.getUniqueId())); + } + return players; + } + /** * Adds to the Language Map * diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubCommand.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubCommand.java index 1cf06eaf..ae0cb79d 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubCommand.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubCommand.java @@ -513,7 +513,6 @@ public final class SubCommand extends Command implements TabExecutor { /** * BungeeCord /server */ - @SuppressWarnings("unchecked") public static final class BungeeServer extends Command implements TabExecutor { private SubPlugin plugin; protected BungeeServer(SubPlugin plugin, String command) { @@ -547,7 +546,7 @@ public final class SubCommand extends Command implements TabExecutor { if (i != 0) serverm.addExtra(div); TextComponent message = new TextComponent(plugin.lang.get().getSection("Lang").getColoredString("Bungee.Server.List", '&').replace("$str$", server.getDisplayName())); try { - message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new TextComponent[]{new TextComponent(plugin.lang.get().getSection("Lang").getColoredString("Bungee.Server.Hover", '&').replace("$int$", Integer.toString((plugin.redis)?((Set)plugin.redis("getPlayersOnServer", new NamedContainer<>(String.class, server.getName()))).size():server.getPlayers().size())))})); + message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new TextComponent[]{new TextComponent(plugin.lang.get().getSection("Lang").getColoredString("Bungee.Server.Hover", '&').replace("$int$", Integer.toString(server.getGlobalPlayers().size())))})); } catch (Exception e) { e.printStackTrace(); } @@ -595,7 +594,6 @@ public final class SubCommand extends Command implements TabExecutor { /** * BungeeCord /glist */ - @SuppressWarnings("unchecked") public static final class BungeeList extends Command { private SubPlugin plugin; protected BungeeList(SubPlugin plugin, String command) { @@ -616,15 +614,7 @@ public final class SubCommand extends Command implements TabExecutor { int players = 0; for (Server server : plugin.api.getServers().values()) { List playerlist = new ArrayList(); - if (plugin.redis) { - try { - for (UUID player : (Set) plugin.redis("getPlayersOnServer", new NamedContainer<>(String.class, server.getName()))) playerlist.add((String) plugin.redis("getNameFromUuid", new NamedContainer<>(UUID.class, player))); - } catch (Exception e) { - e.printStackTrace(); - } - } else { - for (ProxiedPlayer player : server.getPlayers()) playerlist.add(player.getName()); - } + for (NamedContainer player : server.getGlobalPlayers()) playerlist.add(player.name()); Collections.sort(playerlist); players += playerlist.size(); diff --git a/SubServers.Client/Bukkit/src.jar b/SubServers.Client/Bukkit/src.jar index 9583ec03..8fb3e8d6 100644 Binary files a/SubServers.Client/Bukkit/src.jar and b/SubServers.Client/Bukkit/src.jar differ diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubCommand.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubCommand.java index 841f5d85..b6c65604 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubCommand.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubCommand.java @@ -26,7 +26,7 @@ import java.nio.charset.Charset; import java.text.DecimalFormat; import java.util.*; -public final class SubCommand implements CommandExecutor{ +public final class SubCommand implements CommandExecutor { private SubPlugin plugin; public SubCommand(SubPlugin plugin) { diff --git a/SubServers.Host/src.jar b/SubServers.Host/src.jar index 09da4ff7..1653385f 100644 Binary files a/SubServers.Host/src.jar and b/SubServers.Host/src.jar differ