From 4aa943953ffcd46dc8cdd5718fbe8f81abe48d50 Mon Sep 17 00:00:00 2001 From: ME1312 Date: Sun, 5 Aug 2018 17:41:17 -0400 Subject: [PATCH] Flesh out the Proxy API - Proxies connected to Redis are downloaded on startup/reload - Named proxies are no longer removed on disconnect - Proxies now show up in `/sub list` - Proxies now have Add/Remove events in the API - Proxies are included in the response of the `DownloadServerList` packet --- .../Bungee/Event/SubAddProxyEvent.java | 30 ++ .../Bungee/Event/SubNetworkConnectEvent.java | 61 +++ .../Event/SubNetworkDisconnectEvent.java | 43 ++ .../Bungee/Event/SubRemoveHostEvent.java | 4 +- .../Bungee/Event/SubRemoveProxyEvent.java | 30 ++ .../ME1312/SubServers/Bungee/Host/Proxy.java | 18 +- .../Bungee/Host/ServerContainer.java | 4 +- .../SubServers/Bungee/Library/Files/lang.yml | 3 +- .../Packet/PacketDownloadProxyInfo.java | 11 +- .../Packet/PacketDownloadServerList.java | 7 + .../Network/Packet/PacketLinkProxy.java | 12 +- .../Network/Packet/PacketOutRunEvent.java | 14 + .../Bungee/Network/SubDataServer.java | 28 +- .../net/ME1312/SubServers/Bungee/SubAPI.java | 4 +- .../ME1312/SubServers/Bungee/SubCommand.java | 13 +- .../ME1312/SubServers/Bungee/SubPlugin.java | 35 +- .../Client/Bukkit/Event/SubAddProxyEvent.java | 39 ++ .../Bukkit/Event/SubNetworkConnectEvent.java | 15 +- .../Bukkit/Event/SubRemoveHostEvent.java | 4 +- .../Bukkit/Event/SubRemoveProxyEvent.java | 39 ++ .../Library/Compatibility/BungeeChat.java | 464 ++++++++++-------- .../Network/Packet/PacketInRunEvent.java | 18 + .../SubServers/Client/Bukkit/SubAPI.java | 8 +- .../SubServers/Client/Bukkit/SubCommand.java | 25 +- .../Client/Sponge/Event/SubAddProxyEvent.java | 43 ++ .../Sponge/Event/SubNetworkConnectEvent.java | 15 +- .../Sponge/Event/SubRemoveHostEvent.java | 4 +- .../Sponge/Event/SubRemoveProxyEvent.java | 42 ++ .../Network/Packet/PacketInRunEvent.java | 14 + .../SubServers/Client/Sponge/SubCommand.java | 27 +- .../Host/API/Event/SubAddProxyEvent.java | 28 ++ .../API/Event/SubNetworkConnectEvent.java | 15 +- .../Host/API/Event/SubRemoveHostEvent.java | 4 +- .../Host/API/Event/SubRemoveProxyEvent.java | 28 ++ .../Host/Network/Packet/PacketInRunEvent.java | 14 + .../ME1312/SubServers/Host/SubCommand.java | 11 +- .../Sync/Event/SubAddProxyEvent.java | 29 ++ .../Sync/Event/SubNetworkConnectEvent.java | 15 +- .../Sync/Event/SubRemoveHostEvent.java | 4 +- .../Sync/Event/SubRemoveProxyEvent.java | 29 ++ .../SubServers/Sync/Library/Files/config.yml | 3 +- .../Sync/Network/Packet/PacketInRunEvent.java | 14 + .../Sync/Network/SubDataClient.java | 6 +- .../ME1312/SubServers/Sync/SubCommand.java | 9 + 44 files changed, 988 insertions(+), 295 deletions(-) create mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubAddProxyEvent.java create mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubNetworkConnectEvent.java create mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubNetworkDisconnectEvent.java create mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubRemoveProxyEvent.java create mode 100644 SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Event/SubAddProxyEvent.java create mode 100644 SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Event/SubRemoveProxyEvent.java create mode 100644 SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Event/SubAddProxyEvent.java create mode 100644 SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Event/SubRemoveProxyEvent.java create mode 100644 SubServers.Host/src/net/ME1312/SubServers/Host/API/Event/SubAddProxyEvent.java create mode 100644 SubServers.Host/src/net/ME1312/SubServers/Host/API/Event/SubRemoveProxyEvent.java create mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Event/SubAddProxyEvent.java create mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Event/SubRemoveProxyEvent.java diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubAddProxyEvent.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubAddProxyEvent.java new file mode 100644 index 00000000..c2fcb1e4 --- /dev/null +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubAddProxyEvent.java @@ -0,0 +1,30 @@ +package net.ME1312.SubServers.Bungee.Event; + +import net.ME1312.SubServers.Bungee.Host.Proxy; +import net.ME1312.SubServers.Bungee.Library.SubEvent; +import net.ME1312.SubServers.Bungee.Library.Util; +import net.md_5.bungee.api.plugin.Event; + +/** + * Proxy Add Event + */ +public class SubAddProxyEvent extends Event implements SubEvent { + private Proxy proxy; + + /** + * Proxy Add Event + * + * @param proxy Host Being Added + */ + public SubAddProxyEvent(Proxy proxy) { + if (Util.isNull(proxy)) throw new NullPointerException(); + this.proxy = proxy; + } + + /** + * Gets the Proxy to be Added + * + * @return The Proxy to be Added + */ + public Proxy getProxy() { return proxy; } +} diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubNetworkConnectEvent.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubNetworkConnectEvent.java new file mode 100644 index 00000000..8006f074 --- /dev/null +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubNetworkConnectEvent.java @@ -0,0 +1,61 @@ +package net.ME1312.SubServers.Bungee.Event; + +import net.ME1312.SubServers.Bungee.Library.SubEvent; +import net.ME1312.SubServers.Bungee.Library.Util; +import net.ME1312.SubServers.Bungee.Network.SubDataServer; +import net.md_5.bungee.api.plugin.Cancellable; +import net.md_5.bungee.api.plugin.Event; + +import java.net.InetAddress; + +/** + * SubData Network Connect Event + */ +public class SubNetworkConnectEvent extends Event implements SubEvent, Cancellable { + private boolean cancelled = false; + private SubDataServer network; + private InetAddress address; + + /** + * SubData Network Connect Event + */ + public SubNetworkConnectEvent(SubDataServer network, InetAddress address) { + if (Util.isNull(network, address)) throw new NullPointerException(); + this.network = network; + this.address = address; + } + + /** + * Get the network the client is trying to connect to + * + * @return SubData Network + */ + public SubDataServer getNetwork() { + return network; + } + + /** + * Get the address of the connecting client + * + * @return Client address + */ + public InetAddress getAddress() { + return address; + } + + /** + * Gets the Cancelled Status + * + * @return Cancelled Status + */ + public boolean isCancelled() { + return cancelled; + } + + /** + * Sets the Cancelled Status + */ + public void setCancelled(boolean value) { + cancelled = value; + } +} \ No newline at end of file diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubNetworkDisconnectEvent.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubNetworkDisconnectEvent.java new file mode 100644 index 00000000..5445532c --- /dev/null +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubNetworkDisconnectEvent.java @@ -0,0 +1,43 @@ +package net.ME1312.SubServers.Bungee.Event; + +import net.ME1312.SubServers.Bungee.Library.SubEvent; +import net.ME1312.SubServers.Bungee.Library.Util; +import net.ME1312.SubServers.Bungee.Network.Client; +import net.ME1312.SubServers.Bungee.Network.SubDataServer; +import net.md_5.bungee.api.plugin.Event; + +/** + * SubData Network Disconnect Event + */ +public class SubNetworkDisconnectEvent extends Event implements SubEvent { + private SubDataServer network; + private Client client; + + /** + * SubData Network Disconnect Event + */ + public SubNetworkDisconnectEvent(SubDataServer network, Client client) { + if (Util.isNull(network, client)) throw new NullPointerException(); + this.network = network; + this.client = client; + } + + /** + * Get the network the client is disconnecting from + * + * @return SubData Network + */ + public SubDataServer getNetwork() { + return network; + } + + /** + * Get the disconnecting client + * + * @return Client + */ + public Client getClient() { + return client; + } + +} \ No newline at end of file diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubRemoveHostEvent.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubRemoveHostEvent.java index 1367f9b8..23cc8dbd 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubRemoveHostEvent.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubRemoveHostEvent.java @@ -10,7 +10,7 @@ import java.util.UUID; /** - * Server Remove Event + * Host Remove Event */ public class SubRemoveHostEvent extends Event implements SubEvent, Cancellable { private boolean cancelled = false; @@ -18,7 +18,7 @@ public class SubRemoveHostEvent extends Event implements SubEvent, Cancellable { private Host host; /** - * Server Remove Event + * Host Remove Event * * @param player Player Adding Server * @param host Host to be added diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubRemoveProxyEvent.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubRemoveProxyEvent.java new file mode 100644 index 00000000..65e7fae6 --- /dev/null +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubRemoveProxyEvent.java @@ -0,0 +1,30 @@ +package net.ME1312.SubServers.Bungee.Event; + +import net.ME1312.SubServers.Bungee.Host.Proxy; +import net.ME1312.SubServers.Bungee.Library.SubEvent; +import net.ME1312.SubServers.Bungee.Library.Util; +import net.md_5.bungee.api.plugin.Event; + +/** + * Proxy Remove Event + */ +public class SubRemoveProxyEvent extends Event implements SubEvent { + private Proxy proxy; + + /** + * Proxy Remove Event + * + * @param proxy Host Being Added + */ + public SubRemoveProxyEvent(Proxy proxy) { + if (Util.isNull(proxy)) throw new NullPointerException(); + this.proxy = proxy; + } + + /** + * Gets the Proxy to be Removed + * + * @return The Proxy to be Removed + */ + public Proxy getProxy() { return proxy; } +} diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Proxy.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Proxy.java index 3f74ed7b..2c1ab07e 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Proxy.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Proxy.java @@ -1,5 +1,6 @@ package net.ME1312.SubServers.Bungee.Host; +import net.ME1312.SubServers.Bungee.Event.SubRemoveProxyEvent; import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; import net.ME1312.SubServers.Bungee.Library.Config.YAMLValue; import net.ME1312.SubServers.Bungee.Library.ExtraDataHandler; @@ -9,6 +10,7 @@ import net.ME1312.SubServers.Bungee.Network.ClientHandler; import net.ME1312.SubServers.Bungee.SubAPI; import net.ME1312.SubServers.Bungee.SubPlugin; +import net.md_5.bungee.api.ProxyServer; import java.util.*; @@ -18,12 +20,17 @@ public class Proxy implements ClientHandler, ExtraDataHandler { private YAMLSection extra = new YAMLSection(); private final String signature; + private boolean persistent = true; private Client client = null; private String nick = null; private final String name; + @SuppressWarnings("deprecation") public Proxy(String name) throws IllegalArgumentException { - if (Util.isNull(name)) throw new NullPointerException(); + if (name == null) { + name = Util.getNew(SubAPI.getInstance().getInternals().proxies.keySet(), () -> UUID.randomUUID().toString()); + persistent = false; + } if (name.contains(" ")) throw new IllegalArgumentException("Proxy names cannot have spaces: " + name); this.name = name; this.signature = SubAPI.getInstance().signAnonymousObject(); @@ -38,7 +45,10 @@ public Client getSubData() { @SuppressWarnings("deprecation") public void setSubData(Client client) { this.client = client; - if (client == null) SubAPI.getInstance().getInternals().proxies.remove(getName().toLowerCase()); + if (client == null && !persistent) { + ProxyServer.getInstance().getPluginManager().callEvent(new SubRemoveProxyEvent(this)); + SubAPI.getInstance().getInternals().proxies.remove(getName().toLowerCase()); + } if (client != null && (client.getHandler() == null || !equals(client.getHandler()))) client.setHandler(this); } @@ -86,9 +96,7 @@ public Collection> getPlayers() { try { for (UUID player : (Set) plugin.redis("getPlayersOnProxy", new NamedContainer<>(String.class, getName()))) players.add(new NamedContainer<>((String) plugin.redis("getNameFromUuid", new NamedContainer<>(UUID.class, player)), player)); - } catch (Exception e) { - e.printStackTrace(); - } + } catch (Exception e) {} } return 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 30a0d9eb..de3e9f42 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/ServerContainer.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/ServerContainer.java @@ -95,9 +95,7 @@ public Collection> getGlobalPlayers() { 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(); - } + } catch (Exception e) {} } else { for (ProxiedPlayer player : getPlayers()) players.add(new NamedContainer<>(player.getName(), player.getUniqueId())); } 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 0fa6ad75..75007dd4 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 @@ -1,4 +1,4 @@ -Version: '2.13a+' +Version: '2.13b+' Lang: 'Bungee.Server.Current': '&6You are currently connected to $str$' 'Bungee.Server.Available': '&6You may connect to the following servers at this time:' @@ -36,6 +36,7 @@ Lang: 'Command.List.Group-Header': '&7SubServers &8&l\u00BB&7 Group/Server List:' 'Command.List.Host-Header': '&7SubServers &8&l\u00BB&7 Host/SubServer List:' 'Command.List.Server-Header': '&7SubServers &8&l\u00BB&7 Server List:' + 'Command.List.Proxy-Header': '&7SubServers &8&l\u00BB&7 Proxy List:' 'Command.List.Header': '&7: ' 'Command.List.Divider': '&7, ' 'Command.List.Empty': '&7(none)' 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 7661ace7..41da39c0 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 @@ -43,13 +43,14 @@ public YAMLSection generate() { YAMLSection data = new YAMLSection(); if (id != null) data.set("id", id); YAMLSection subservers = new YAMLSection(); - subservers.set("version", plugin.version.toString()); + subservers.set("version", plugin.api.getWrapperVersion().toString()); + if (plugin.api.getWrapperBuild() != null) subservers.set("build", plugin.api.getWrapperBuild().toString()); subservers.set("last-reload", plugin.resetDate); subservers.set("hosts", plugin.api.getHosts().size()); subservers.set("subservers", plugin.api.getSubServers().size()); data.set("subservers", subservers); YAMLSection bungee = new YAMLSection(); - bungee.set("version", plugin.api.getProxyVersion()); + bungee.set("version", plugin.api.getProxyVersion().toString()); bungee.set("disabled-cmds", plugin.getConfig().getDisabledCommands()); bungee.set("player-limit", plugin.getConfig().getPlayerLimit()); bungee.set("servers", plugin.api.getServers().size()); @@ -60,14 +61,14 @@ public YAMLSection generate() { listener.set("motd", info.getMotd()); listener.set("priorities", info.getServerPriority()); listener.set("player-limit", info.getMaxPlayers()); - listener.set("tab-list", info.getTabListType()); - listener.set("tab-list-size", info.getTabListSize()); listeners.add(listener); } bungee.set("listeners", listeners); data.set("bungee", bungee); YAMLSection minecraft = new YAMLSection(); - minecraft.set("version", Arrays.asList(plugin.api.getGameVersion())); + LinkedList mcversions = new LinkedList(); + for (Version version : plugin.api.getGameVersion()) mcversions.add(version.toString()); + minecraft.set("version", mcversions); minecraft.set("players", plugin.api.getGlobalPlayers().size()); data.set("minecraft", minecraft); YAMLSection system = new YAMLSection(); diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadServerList.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadServerList.java index 9fad679b..d0d67406 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadServerList.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadServerList.java @@ -2,6 +2,7 @@ import com.google.gson.Gson; import net.ME1312.SubServers.Bungee.Host.Host; +import net.ME1312.SubServers.Bungee.Host.Proxy; import net.ME1312.SubServers.Bungee.Host.Server; import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; import net.ME1312.SubServers.Bungee.Library.Util; @@ -54,6 +55,12 @@ public YAMLSection generate() { YAMLSection data = new YAMLSection(); data.set("id", id); + YAMLSection proxies = new YAMLSection(); + for (Proxy proxy : plugin.proxies.values()) { + proxies.set(proxy.getName(), new YAMLSection(new Gson().fromJson(proxy.toString(), Map.class))); + } + data.set("proxies", proxies); + YAMLSection exServers = new YAMLSection(); for (Server server : plugin.exServers.values()) { exServers.set(server.getName(), new YAMLSection(new Gson().fromJson(server.toString(), Map.class))); diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketLinkProxy.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketLinkProxy.java index 33681afd..a3967600 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketLinkProxy.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketLinkProxy.java @@ -1,5 +1,6 @@ package net.ME1312.SubServers.Bungee.Network.Packet; +import net.ME1312.SubServers.Bungee.Event.SubAddProxyEvent; import net.ME1312.SubServers.Bungee.Host.Proxy; import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; import net.ME1312.SubServers.Bungee.Library.Util; @@ -58,8 +59,15 @@ public YAMLSection generate() { public void execute(Client client, YAMLSection data) { try { Map proxies = plugin.api.getProxies(); - Proxy proxy = new Proxy((data.contains("name") && !proxies.keySet().contains(data.getRawString("name").toLowerCase()))?data.getRawString("name"):Util.getNew(proxies.keySet(), () -> UUID.randomUUID().toString())); - plugin.proxies.put(proxy.getName().toLowerCase(), proxy); + Proxy proxy; + if (data.contains("name") && proxies.keySet().contains(data.getRawString("name").toLowerCase()) && proxies.get(data.getRawString("name").toLowerCase()).getSubData() == null) { + proxy = proxies.get(data.getRawString("name").toLowerCase()); + } else { + proxy = new Proxy((data.contains("name") && !proxies.keySet().contains(data.getRawString("name").toLowerCase()))?data.getRawString("name"):null); + plugin.getPluginManager().callEvent(new SubAddProxyEvent(proxy)); + plugin.proxies.put(proxy.getName().toLowerCase(), proxy); + } + client.setHandler(proxy); System.out.println("SubData > " + client.getAddress().toString() + " has been defined as Proxy: " + proxy.getName()); client.sendPacket(new PacketLinkProxy(proxy.getName(), 0, "Definition Successful")); diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutRunEvent.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutRunEvent.java index 7fc9527d..54f177db 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutRunEvent.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutRunEvent.java @@ -53,6 +53,13 @@ public Version getVersion() { return new Version("2.11.0a"); } + @EventHandler(priority = Byte.MAX_VALUE) + public void event(SubAddProxyEvent event) { + YAMLSection args = new YAMLSection(); + args.set("proxy", event.getProxy().getName()); + plugin.subdata.broadcastPacket(new PacketOutRunEvent(event.getClass(), args)); + } + @EventHandler(priority = Byte.MAX_VALUE) public void event(SubAddHostEvent event) { if (!event.isCancelled()) { @@ -158,4 +165,11 @@ public void event(SubRemoveHostEvent event) { plugin.subdata.broadcastPacket(new PacketOutRunEvent(event.getClass(), args)); } } + + @EventHandler(priority = Byte.MAX_VALUE) + public void event(SubRemoveProxyEvent event) { + YAMLSection args = new YAMLSection(); + args.set("proxy", event.getProxy().getName()); + plugin.subdata.broadcastPacket(new PacketOutRunEvent(event.getClass(), args)); + } } \ No newline at end of file diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/SubDataServer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/SubDataServer.java index 7808501c..1e6e5a71 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/SubDataServer.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/SubDataServer.java @@ -2,6 +2,8 @@ import com.google.gson.Gson; import com.google.gson.JsonObject; +import net.ME1312.SubServers.Bungee.Event.SubNetworkConnectEvent; +import net.ME1312.SubServers.Bungee.Event.SubNetworkDisconnectEvent; import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; import net.ME1312.SubServers.Bungee.Library.Exception.IllegalPacketException; import net.ME1312.SubServers.Bungee.Library.NamedContainer; @@ -213,7 +215,7 @@ public Client addClient(Socket socket) throws IOException { */ public Client getClient(Socket socket) { if (Util.isNull(socket)) throw new NullPointerException(); - return clients.get(new InetSocketAddress(socket.getInetAddress(), socket.getPort()).toString()); + return getClient(new InetSocketAddress(socket.getInetAddress(), socket.getPort())); } /** @@ -224,7 +226,7 @@ public Client getClient(Socket socket) { */ public Client getClient(InetSocketAddress address) { if (Util.isNull(address)) throw new NullPointerException(); - return clients.get(address.toString()); + return getClient(address.toString()); } /** @@ -255,12 +257,7 @@ public Collection getClients() { */ public void removeClient(Client client) throws IOException { if (Util.isNull(client)) throw new NullPointerException(); - SocketAddress address = client.getAddress(); - if (clients.keySet().contains(address.toString())) { - clients.remove(address.toString()); - if (!client.closed) client.disconnect(); - System.out.println("SubData > " + client.getAddress().toString() + " has disconnected"); - } + removeClient(client.getAddress()); } /** @@ -271,12 +268,7 @@ public void removeClient(Client client) throws IOException { */ public void removeClient(InetSocketAddress address) throws IOException { if (Util.isNull(address)) throw new NullPointerException(); - Client client = clients.get(address.toString()); - if (clients.keySet().contains(address.toString())) { - clients.remove(address.toString()); - client.disconnect(); - System.out.println("SubData > " + client.getAddress().toString() + " has disconnected"); - } + removeClient(address.toString()); } /** @@ -287,8 +279,9 @@ public void removeClient(InetSocketAddress address) throws IOException { */ public void removeClient(String address) throws IOException { if (Util.isNull(address)) throw new NullPointerException(); - Client client = clients.get(address); if (clients.keySet().contains(address)) { + Client client = clients.get(address); + plugin.getPluginManager().callEvent(new SubNetworkDisconnectEvent(this, client)); clients.remove(address); client.disconnect(); System.out.println("SubData > " + client.getAddress().toString() + " has disconnected"); @@ -411,7 +404,10 @@ private boolean checkConnection(InetAddress address) { )) whitelisted = true; } } - return whitelisted; + SubNetworkConnectEvent event = new SubNetworkConnectEvent(this, address); + event.setCancelled(!whitelisted); + plugin.getPluginManager().callEvent(event); + return !event.isCancelled(); } /** diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubAPI.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubAPI.java index cc5c23b9..7dae1e96 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubAPI.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubAPI.java @@ -539,9 +539,7 @@ public Collection> getGlobalPlayers() { 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(); - } + } catch (Exception e) {} } else { for (ProxiedPlayer player : plugin.getPlayers()) players.add(new NamedContainer<>(player.getName(), player.getUniqueId())); } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubCommand.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubCommand.java index a71977e2..5cb0301c 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubCommand.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubCommand.java @@ -1,10 +1,7 @@ package net.ME1312.SubServers.Bungee; import com.google.gson.Gson; -import net.ME1312.SubServers.Bungee.Host.Host; -import net.ME1312.SubServers.Bungee.Host.Server; -import net.ME1312.SubServers.Bungee.Host.SubCreator; -import net.ME1312.SubServers.Bungee.Host.SubServer; +import net.ME1312.SubServers.Bungee.Host.*; import net.ME1312.SubServers.Bungee.Library.Compatibility.CommandX; import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; import net.ME1312.SubServers.Bungee.Library.NamedContainer; @@ -212,6 +209,14 @@ public void execute(CommandSender sender, String[] args) { } if (i == 0) message += ChatColor.RESET + "(none)"; sender.sendMessage(message); + if (plugin.api.getProxies().keySet().size() > 0) { + sender.sendMessage("SubServers > Proxy List:"); + message = " (master)"; + for (Proxy proxy : plugin.api.getProxies().values()) { + message += div + ((proxy.getSubData() != null)?ChatColor.AQUA:ChatColor.WHITE) + proxy.getDisplayName() + ((proxy.getName().equals(proxy.getDisplayName()))?"":" ("+proxy.getName()+')'); + } + sender.sendMessage(message); + } } else if (args[0].equalsIgnoreCase("info") || args[0].equalsIgnoreCase("status")) { if (args.length > 1) { Map servers = plugin.api.getServers(); diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubPlugin.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubPlugin.java index db192c69..b1a03b41 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubPlugin.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubPlugin.java @@ -1,6 +1,8 @@ package net.ME1312.SubServers.Bungee; import com.google.gson.Gson; +import net.ME1312.SubServers.Bungee.Event.SubAddProxyEvent; +import net.ME1312.SubServers.Bungee.Event.SubRemoveProxyEvent; import net.ME1312.SubServers.Bungee.Event.SubStoppedEvent; import net.ME1312.SubServers.Bungee.Host.*; import net.ME1312.SubServers.Bungee.Library.*; @@ -99,7 +101,7 @@ protected SubPlugin(PrintStream out, boolean isPatched) throws IOException { if (!(new UniversalFile(dir, "lang.yml").exists())) { Util.copyFromJar(SubPlugin.class.getClassLoader(), "net/ME1312/SubServers/Bungee/Library/Files/lang.yml", new UniversalFile(dir, "lang.yml").getPath()); System.out.println("SubServers > Created ~/SubServers/lang.yml"); - } else if ((new Version((new YAMLConfig(new UniversalFile(dir, "lang.yml"))).get().getString("Version", "0")).compareTo(new Version("2.13a+"))) != 0) { + } else if ((new Version((new YAMLConfig(new UniversalFile(dir, "lang.yml"))).get().getString("Version", "0")).compareTo(new Version("2.13b+"))) != 0) { Files.move(new UniversalFile(dir, "lang.yml").toPath(), new UniversalFile(dir, "lang.old" + Math.round(Math.random() * 100000) + ".yml").toPath()); Util.copyFromJar(SubPlugin.class.getClassLoader(), "net/ME1312/SubServers/Bungee/Library/Files/lang.yml", new UniversalFile(dir, "lang.yml").getPath()); System.out.println("SubServers > Updated ~/SubServers/lang.yml"); @@ -268,6 +270,30 @@ public void reload() throws IOException { e.printStackTrace(); } } + int proxies = 1; + if (redis) { + System.out.println("SubServers > "+((status)?"Rel":"L")+"oading Proxies..."); + try { + String master = (String) redis("getServerId"); + for (String name : (List) redis("getAllServers")) { + if (!ukeys.contains(name.toLowerCase()) && !master.equals(name)) try { + Proxy proxy = this.proxies.get(name.toLowerCase()); + if (proxy == null) { + proxy = new Proxy(name); + getPluginManager().callEvent(new SubAddProxyEvent(proxy)); + this.proxies.put(name.toLowerCase(), proxy); + } + ukeys.add(name.toLowerCase()); + proxies++; + } catch (Exception e) { + e.printStackTrace(); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + ukeys.clear(); int hosts = 0; System.out.println("SubServers > "+((status)?"Rel":"L")+"oading Hosts..."); @@ -488,7 +514,7 @@ public void reload() throws IOException { } } - System.out.println("SubServers > " + ((plugins > 0)?plugins+" Plugin"+((plugins == 1)?"":"s")+", ":"") + hosts + " Host"+((hosts == 1)?"":"s")+", " + servers + " Server"+((servers == 1)?"":"s")+", and " + subservers + " SubServer"+((subservers == 1)?"":"s")+" "+((status)?"re":"")+"loaded in " + new DecimalFormat("0.000").format((Calendar.getInstance().getTime().getTime() - begin) / 1000D) + "s"); + System.out.println("SubServers > " + ((plugins > 0)?plugins+" Plugin"+((plugins == 1)?"":"s")+", ":"") + ((proxies > 1)?proxies+" Proxies, ":"") + hosts + " Host"+((hosts == 1)?"":"s")+", " + servers + " Server"+((servers == 1)?"":"s")+", and " + subservers + " SubServer"+((subservers == 1)?"":"s")+" "+((status)?"re":"")+"loaded in " + new DecimalFormat("0.000").format((Calendar.getInstance().getTime().getTime() - begin) / 1000D) + "s"); } private void post() { @@ -578,6 +604,11 @@ public void stopListeners() { running = false; this.hosts.clear(); exServers.clear(); + + for (String proxy : proxies.keySet()) { + getPluginManager().callEvent(new SubRemoveProxyEvent(proxies.get(proxy))); + } + proxies.clear(); } String getNewSignature() { diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Event/SubAddProxyEvent.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Event/SubAddProxyEvent.java new file mode 100644 index 00000000..be1751a6 --- /dev/null +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Event/SubAddProxyEvent.java @@ -0,0 +1,39 @@ +package net.ME1312.SubServers.Client.Bukkit.Event; + +import net.ME1312.SubServers.Client.Bukkit.Library.SubEvent; +import net.ME1312.SubServers.Client.Bukkit.Library.Util; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +/** + * Proxy Add Event + */ +public class SubAddProxyEvent extends Event implements SubEvent { + private String proxy; + + /** + * Proxy Add Event + * + * @param proxy Host Being Added + */ + public SubAddProxyEvent(String proxy) { + if (Util.isNull(proxy)) throw new NullPointerException(); + this.proxy = proxy; + } + + /** + * Gets the Proxy to be Added + * + * @return The Proxy to be Added + */ + public String getProxy() { return proxy; } + + @Override + public HandlerList getHandlers() { + return handlers; + } + public static HandlerList getHandlerList() { + return handlers; + } + private static HandlerList handlers = new HandlerList(); +} diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Event/SubNetworkConnectEvent.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Event/SubNetworkConnectEvent.java index d049b977..fdeccd08 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Event/SubNetworkConnectEvent.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Event/SubNetworkConnectEvent.java @@ -1,23 +1,34 @@ package net.ME1312.SubServers.Client.Bukkit.Event; import net.ME1312.SubServers.Client.Bukkit.Library.SubEvent; +import net.ME1312.SubServers.Client.Bukkit.Library.Util; import net.ME1312.SubServers.Client.Bukkit.Network.SubDataClient; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; /** - * SubData Network Disconnect Event + * SubData Network Connect Event */ public class SubNetworkConnectEvent extends Event implements SubEvent { private SubDataClient network; /** - * SubData Network Disconnect Event + * SubData Network Connect Event */ public SubNetworkConnectEvent(SubDataClient network) { + if (Util.isNull(network)) throw new NullPointerException(); this.network = network; } + /** + * Get the SubData network + * + * @return SubData Network + */ + public SubDataClient getNetwork() { + return network; + } + @Override public HandlerList getHandlers() { return handlers; diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Event/SubRemoveHostEvent.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Event/SubRemoveHostEvent.java index 7c03753e..1010a651 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Event/SubRemoveHostEvent.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Event/SubRemoveHostEvent.java @@ -8,14 +8,14 @@ import java.util.UUID; /** - * Remove Server Event + * Remove Host Event */ public class SubRemoveHostEvent extends Event implements SubEvent { private UUID player; private String host; /** - * Server Remove Event + * Host Remove Event * * @param player Player Adding Host * @param host Server Starting diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Event/SubRemoveProxyEvent.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Event/SubRemoveProxyEvent.java new file mode 100644 index 00000000..01c11d03 --- /dev/null +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Event/SubRemoveProxyEvent.java @@ -0,0 +1,39 @@ +package net.ME1312.SubServers.Client.Bukkit.Event; + +import net.ME1312.SubServers.Client.Bukkit.Library.SubEvent; +import net.ME1312.SubServers.Client.Bukkit.Library.Util; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +/** + * Proxy Remove Event + */ +public class SubRemoveProxyEvent extends Event implements SubEvent { + private String proxy; + + /** + * Proxy Remove Event + * + * @param proxy Host Being Added + */ + public SubRemoveProxyEvent(String proxy) { + if (Util.isNull(proxy)) throw new NullPointerException(); + this.proxy = proxy; + } + + /** + * Gets the Proxy to be Removed + * + * @return The Proxy to be Removed + */ + public String getProxy() { return proxy; } + + @Override + public HandlerList getHandlers() { + return handlers; + } + public static HandlerList getHandlerList() { + return handlers; + } + private static HandlerList handlers = new HandlerList(); +} diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Compatibility/BungeeChat.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Compatibility/BungeeChat.java index e93f02a8..bc09d809 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Compatibility/BungeeChat.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Compatibility/BungeeChat.java @@ -1,6 +1,8 @@ package net.ME1312.SubServers.Client.Bukkit.Library.Compatibility; import net.ME1312.SubServers.Client.Bukkit.Library.Config.YAMLSection; +import net.ME1312.SubServers.Client.Bukkit.Network.API.Proxy; +import net.ME1312.SubServers.Client.Bukkit.Network.Packet.PacketDownloadServerList; import net.ME1312.SubServers.Client.Bukkit.SubPlugin; import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.chat.ClickEvent; @@ -20,110 +22,230 @@ public BungeeChat(SubPlugin plugin) { this.plugin = plugin; } - public void listCommand(CommandSender sender, String label, YAMLSection data) { - int i = 0; - boolean sent = false; - TextComponent div = new TextComponent(plugin.api.getLang("SubServers", "Command.List.Divider")); - if (data.getSection("groups").getKeys().size() > 0) { - sender.sendMessage(plugin.api.getLang("SubServers", "Command.List.Group-Header")); - for (String group : data.getSection("groups").getKeys()) { + public void listCommand(CommandSender sender, String label) { + plugin.subdata.sendPacket(new PacketDownloadServerList(null, null, data -> { + int i = 0; + boolean sent = false; + TextComponent div = new TextComponent(plugin.api.getLang("SubServers", "Command.List.Divider")); + if (data.getSection("groups").getKeys().size() > 0) { + sender.sendMessage(plugin.api.getLang("SubServers", "Command.List.Group-Header")); + for (String group : data.getSection("groups").getKeys()) { + List hoverm = new LinkedList(); + TextComponent msg = new TextComponent(" "); + TextComponent message = new TextComponent(group); + TextComponent hover = new TextComponent(group + '\n'); + message.setColor(ChatColor.GOLD); + hover.setColor(ChatColor.GOLD); + hoverm.add(hover); + hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Group-Menu.Group-Server-Count").replace("$int$", new DecimalFormat("#,###").format(data.getSection("groups").getSection(group).getKeys().size()))); + hoverm.add(hover); + message.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, label + " open Server 1 " + group)); + message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverm.toArray(new TextComponent[hoverm.size()]))); + msg.addExtra(message); + msg.addExtra(new TextComponent(plugin.api.getLang("SubServers", "Command.List.Header"))); + + for (String server : data.getSection("groups").getSection(group).getKeys()) { + hoverm = new LinkedList(); + message = new TextComponent(data.getSection("groups").getSection(group).getSection(server).getString("display")); + hover = new TextComponent(data.getSection("groups").getSection(group).getSection(server).getString("display") + '\n'); + if (data.getSection("groups").getSection(group).getSection(server).getKeys().contains("enabled")) { + message.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, label + " open SubServer/ " + server)); + if (data.getSection("groups").getSection(group).getSection(server).getBoolean("temp")) { + message.setColor(ChatColor.AQUA); + hover.setColor(ChatColor.AQUA); + hoverm.add(hover); + if (!server.equals(data.getSection("groups").getSection(group).getSection(server).getString("display"))) { + hover = new TextComponent(server + '\n'); + hover.setColor(ChatColor.GRAY); + hoverm.add(hover); + } + hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.Server-Player-Count").replace("$int$", new DecimalFormat("#,###").format(data.getSection("groups").getSection(group).getSection(server).getSection("players").getKeys().size())) + '\n'); + hoverm.add(hover); + hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.SubServer-Temporary")); + } else if (data.getSection("groups").getSection(group).getSection(server).getBoolean("running")) { + message.setColor(ChatColor.GREEN); + hover.setColor(ChatColor.GREEN); + hoverm.add(hover); + if (!server.equals(data.getSection("groups").getSection(group).getSection(server).getString("display"))) { + hover = new TextComponent(server + '\n'); + hover.setColor(ChatColor.GRAY); + hoverm.add(hover); + } + hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.Server-Player-Count").replace("$int$", new DecimalFormat("#,###").format(data.getSection("groups").getSection(group).getSection(server).getSection("players").getKeys().size()))); + } else if (data.getSection("groups").getSection(group).getSection(server).getBoolean("enabled") && data.getSection("groups").getSection(group).getSection(server).getList("incompatible").size() == 0) { + message.setColor(ChatColor.YELLOW); + hover.setColor(ChatColor.YELLOW); + hoverm.add(hover); + if (!server.equals(data.getSection("groups").getSection(group).getSection(server).getString("display"))) { + hover = new TextComponent(server + '\n'); + hover.setColor(ChatColor.GRAY); + hoverm.add(hover); + } + hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.SubServer-Offline")); + } else { + message.setColor(ChatColor.RED); + hover.setColor(ChatColor.RED); + if (!server.equals(data.getSection("groups").getSection(group).getSection(server).getString("display"))) { + hoverm.add(hover); + hover = new TextComponent(server + '\n'); + hover.setColor(ChatColor.GRAY); + } + if (data.getSection("groups").getSection(group).getSection(server).getList("incompatible").size() != 0) { + hoverm.add(hover); + String list = ""; + for (int ii = 0; ii < data.getSection("groups").getSection(group).getSection(server).getList("incompatible").size(); ii++) { + if (list.length() != 0) list += ", "; + list += data.getSection("groups").getSection(group).getSection(server).getList("incompatible").get(ii).asString(); + } + hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.SubServer-Incompatible").replace("$str$", list) + ((data.getSection("groups").getSection(group).getSection(server).getBoolean("enabled")) ? "" : "\n")); + } + if (!data.getSection("groups").getSection(group).getSection(server).getBoolean("enabled")) { + hoverm.add(hover); + hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.SubServer-Disabled")); + } + } + hoverm.add(hover); + if (plugin.config.get().getSection("Settings").getBoolean("Show-Addresses", false)) { + hover = new TextComponent('\n' + data.getSection("groups").getSection(group).getSection(server).getString("address")); + } else { + hover = new TextComponent('\n' + data.getSection("groups").getSection(group).getSection(server).getString("address").split(":")[data.getSection("groups").getSection(group).getSection(server).getString("address").split(":").length - 1]); + } + hover.setColor(ChatColor.WHITE); + hoverm.add(hover); + message.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, label + " open SubServer/ " + server)); + } else { + message.setColor(ChatColor.WHITE); + hover.setColor(ChatColor.WHITE); + hoverm.add(hover); + hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.Server-External")); + hoverm.add(hover); + if (plugin.config.get().getSection("Settings").getBoolean("Show-Addresses", false)) { + hover = new TextComponent('\n' + data.getSection("servers").getSection(server).getString("address")); + } else { + hover = new TextComponent('\n' + data.getSection("servers").getSection(server).getString("address").split(":")[data.getSection("servers").getSection(server).getString("address").split(":").length - 1]); + } + hover.setColor(ChatColor.WHITE); + hoverm.add(hover); + } + message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverm.toArray(new TextComponent[hoverm.size()]))); + if (i != 0) msg.addExtra(div); + msg.addExtra(message); + i++; + } + if (i == 0) msg.addExtra(new TextComponent(plugin.api.getLang("SubServers", "Command.List.Empty"))); + ((Player) sender).spigot().sendMessage(msg); + i = 0; + sent = true; + } + if (!sent) sender.sendMessage(" " + plugin.api.getLang("SubServers", "Command.List.Empty")); + sent = false; + } + sender.sendMessage(plugin.api.getLang("SubServers", "Command.List.Host-Header")); + for (String host : data.getSection("hosts").getKeys()) { List hoverm = new LinkedList(); TextComponent msg = new TextComponent(" "); - TextComponent message = new TextComponent(group); - TextComponent hover = new TextComponent(group + '\n'); - message.setColor(ChatColor.GOLD); - hover.setColor(ChatColor.GOLD); - hoverm.add(hover); - hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Group-Menu.Group-Server-Count").replace("$int$", new DecimalFormat("#,###").format(data.getSection("groups").getSection(group).getKeys().size()))); + TextComponent message = new TextComponent(data.getSection("hosts").getSection(host).getString("display")); + TextComponent hover = new TextComponent(data.getSection("hosts").getSection(host).getString("display") + '\n'); + if (data.getSection("hosts").getSection(host).getBoolean("enabled")) { + message.setColor(ChatColor.AQUA); + hover.setColor(ChatColor.AQUA); + hoverm.add(hover); + if (!host.equals(data.getSection("hosts").getSection(host).getString("display"))) { + hover = new TextComponent(host + '\n'); + hover.setColor(ChatColor.GRAY); + hoverm.add(hover); + } + hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Host-Menu.Host-Server-Count").replace("$int$", new DecimalFormat("#,###").format(data.getSection("hosts").getSection(host).getSection("servers").getKeys().size()))); + } else { + message.setColor(ChatColor.RED); + hover.setColor(ChatColor.RED); + hoverm.add(hover); + if (!host.equals(data.getSection("hosts").getSection(host).getString("display"))) { + hover = new TextComponent(host + '\n'); + hover.setColor(ChatColor.GRAY); + hoverm.add(hover); + } + hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Host-Menu.Host-Disabled")); + } + if (plugin.config.get().getSection("Settings").getBoolean("Show-Addresses", false)) { + hoverm.add(hover); + hover = new TextComponent('\n' + data.getSection("hosts").getSection(host).getString("address")); + hover.setColor(ChatColor.WHITE); + } hoverm.add(hover); - message.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, label + " open Server 1 " + group)); + message.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, label + " open Host/ " + host)); message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverm.toArray(new TextComponent[hoverm.size()]))); msg.addExtra(message); msg.addExtra(new TextComponent(plugin.api.getLang("SubServers", "Command.List.Header"))); - for (String server : data.getSection("groups").getSection(group).getKeys()) { + for (String subserver : data.getSection("hosts").getSection(host).getSection("servers").getKeys()) { hoverm = new LinkedList(); - message = new TextComponent(data.getSection("groups").getSection(group).getSection(server).getString("display")); - hover = new TextComponent(data.getSection("groups").getSection(group).getSection(server).getString("display") + '\n'); - if (data.getSection("groups").getSection(group).getSection(server).getKeys().contains("enabled")) { - message.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, label + " open SubServer/ " + server)); - if (data.getSection("groups").getSection(group).getSection(server).getBoolean("temp")) { - message.setColor(ChatColor.AQUA); - hover.setColor(ChatColor.AQUA); + message = new TextComponent(data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getString("display")); + hover = new TextComponent(data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getString("display") + '\n'); + message.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, label + " open SubServer/ " + subserver)); + if (data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getBoolean("temp")) { + message.setColor(ChatColor.AQUA); + hover.setColor(ChatColor.AQUA); + hoverm.add(hover); + if (!subserver.equals(data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getString("display"))) { + hover = new TextComponent(subserver + '\n'); + hover.setColor(ChatColor.GRAY); hoverm.add(hover); - if (!server.equals(data.getSection("groups").getSection(group).getSection(server).getString("display"))) { - hover = new TextComponent(server + '\n'); - hover.setColor(ChatColor.GRAY); - hoverm.add(hover); - } - hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.Server-Player-Count").replace("$int$", new DecimalFormat("#,###").format(data.getSection("groups").getSection(group).getSection(server).getSection("players").getKeys().size())) + '\n'); + } + hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.Server-Player-Count").replace("$int$", new DecimalFormat("#,###").format(data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getSection("players").getKeys().size())) + '\n'); + hoverm.add(hover); + hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.SubServer-Temporary")); + } else if (data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getBoolean("running")) { + message.setColor(ChatColor.GREEN); + hover.setColor(ChatColor.GREEN); + hoverm.add(hover); + if (!subserver.equals(data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getString("display"))) { + hover = new TextComponent(subserver + '\n'); + hover.setColor(ChatColor.GRAY); hoverm.add(hover); - hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.SubServer-Temporary")); - } else if (data.getSection("groups").getSection(group).getSection(server).getBoolean("running")) { - message.setColor(ChatColor.GREEN); - hover.setColor(ChatColor.GREEN); + } + hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.Server-Player-Count").replace("$int$", new DecimalFormat("#,###").format(data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getSection("players").getKeys().size()))); + } else if (data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getBoolean("enabled") && data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getList("incompatible").size() == 0) { + message.setColor(ChatColor.YELLOW); + hover.setColor(ChatColor.YELLOW); + hoverm.add(hover); + if (!subserver.equals(data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getString("display"))) { + hover = new TextComponent(subserver + '\n'); + hover.setColor(ChatColor.GRAY); hoverm.add(hover); - if (!server.equals(data.getSection("groups").getSection(group).getSection(server).getString("display"))) { - hover = new TextComponent(server + '\n'); - hover.setColor(ChatColor.GRAY); - hoverm.add(hover); - } - hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.Server-Player-Count").replace("$int$", new DecimalFormat("#,###").format(data.getSection("groups").getSection(group).getSection(server).getSection("players").getKeys().size()))); - } else if (data.getSection("groups").getSection(group).getSection(server).getBoolean("enabled") && data.getSection("groups").getSection(group).getSection(server).getList("incompatible").size() == 0) { - message.setColor(ChatColor.YELLOW); - hover.setColor(ChatColor.YELLOW); + } + hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.SubServer-Offline")); + } else { + message.setColor(ChatColor.RED); + hover.setColor(ChatColor.RED); + if (!subserver.equals(data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getString("display"))) { hoverm.add(hover); - if (!server.equals(data.getSection("groups").getSection(group).getSection(server).getString("display"))) { - hover = new TextComponent(server + '\n'); - hover.setColor(ChatColor.GRAY); - hoverm.add(hover); - } - hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.SubServer-Offline")); - } else { - message.setColor(ChatColor.RED); - hover.setColor(ChatColor.RED); - if (!server.equals(data.getSection("groups").getSection(group).getSection(server).getString("display"))) { - hoverm.add(hover); - hover = new TextComponent(server + '\n'); - hover.setColor(ChatColor.GRAY); - } - if (data.getSection("groups").getSection(group).getSection(server).getList("incompatible").size() != 0) { - hoverm.add(hover); - String list = ""; - for (int ii = 0; ii < data.getSection("groups").getSection(group).getSection(server).getList("incompatible").size(); ii++) { - if (list.length() != 0) list += ", "; - list += data.getSection("groups").getSection(group).getSection(server).getList("incompatible").get(ii).asString(); - } - hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.SubServer-Incompatible").replace("$str$", list) + ((data.getSection("groups").getSection(group).getSection(server).getBoolean("enabled"))?"":"\n")); - } - if (!data.getSection("groups").getSection(group).getSection(server).getBoolean("enabled")) { - hoverm.add(hover); - hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.SubServer-Disabled")); + hover = new TextComponent(subserver + '\n'); + hover.setColor(ChatColor.GRAY); + } + if (data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getList("incompatible").size() != 0) { + hoverm.add(hover); + String list = ""; + for (int ii = 0; ii < data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getList("incompatible").size(); ii++) { + if (list.length() != 0) list += ", "; + list += data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getList("incompatible").get(ii).asString(); } + hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.SubServer-Incompatible").replace("$str$", list) + ((data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getBoolean("enabled")) ? "" : "\n")); } - hoverm.add(hover); - if (plugin.config.get().getSection("Settings").getBoolean("Show-Addresses", false)) { - hover = new TextComponent('\n' + data.getSection("groups").getSection(group).getSection(server).getString("address")); - } else { - hover = new TextComponent('\n' + data.getSection("groups").getSection(group).getSection(server).getString("address").split(":")[data.getSection("groups").getSection(group).getSection(server).getString("address").split(":").length - 1]); + if (!data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getBoolean("enabled")) { + hoverm.add(hover); + hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.SubServer-Disabled")); } - hover.setColor(ChatColor.WHITE); - hoverm.add(hover); - message.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, label + " open SubServer/ " + server)); + } + hoverm.add(hover); + if (plugin.config.get().getSection("Settings").getBoolean("Show-Addresses", false)) { + hover = new TextComponent('\n' + data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getString("address")); } else { - message.setColor(ChatColor.WHITE); - hover.setColor(ChatColor.WHITE); - hoverm.add(hover); - hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.Server-External")); - hoverm.add(hover); - if (plugin.config.get().getSection("Settings").getBoolean("Show-Addresses", false)) { - hover = new TextComponent('\n' + data.getSection("servers").getSection(server).getString("address")); - } else { - hover = new TextComponent('\n' + data.getSection("servers").getSection(server).getString("address").split(":")[data.getSection("servers").getSection(server).getString("address").split(":").length - 1]); - } - hover.setColor(ChatColor.WHITE); - hoverm.add(hover); + hover = new TextComponent('\n' + data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getString("address").split(":")[data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getString("address").split(":").length - 1]); } + hover.setColor(ChatColor.WHITE); + hoverm.add(hover); + message.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, label + " open SubServer/ " + subserver)); message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverm.toArray(new TextComponent[hoverm.size()]))); if (i != 0) msg.addExtra(div); msg.addExtra(message); @@ -135,149 +257,63 @@ public void listCommand(CommandSender sender, String label, YAMLSection data) { sent = true; } if (!sent) sender.sendMessage(" " + plugin.api.getLang("SubServers", "Command.List.Empty")); - sent = false; - } - sender.sendMessage(plugin.api.getLang("SubServers", "Command.List.Host-Header")); - for (String host : data.getSection("hosts").getKeys()) { - List hoverm = new LinkedList(); + sender.sendMessage(plugin.api.getLang("SubServers", "Command.List.Server-Header")); TextComponent msg = new TextComponent(" "); - TextComponent message = new TextComponent(data.getSection("hosts").getSection(host).getString("display")); - TextComponent hover = new TextComponent(data.getSection("hosts").getSection(host).getString("display") + '\n'); - if (data.getSection("hosts").getSection(host).getBoolean("enabled")) { - message.setColor(ChatColor.AQUA); - hover.setColor(ChatColor.AQUA); - hoverm.add(hover); - if (!host.equals(data.getSection("hosts").getSection(host).getString("display"))) { - hover = new TextComponent(host + '\n'); - hover.setColor(ChatColor.GRAY); - hoverm.add(hover); - } - hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Host-Menu.Host-Server-Count").replace("$int$", new DecimalFormat("#,###").format(data.getSection("hosts").getSection(host).getSection("servers").getKeys().size()))); - } else { - message.setColor(ChatColor.RED); - hover.setColor(ChatColor.RED); + for (String server : data.getSection("servers").getKeys()) { + List hoverm = new LinkedList(); + TextComponent message = new TextComponent(data.getSection("servers").getSection(server).getString("display")); + TextComponent hover = new TextComponent(data.getSection("servers").getSection(server).getString("display") + '\n'); + message.setColor(ChatColor.WHITE); + hover.setColor(ChatColor.WHITE); hoverm.add(hover); - if (!host.equals(data.getSection("hosts").getSection(host).getString("display"))) { - hover = new TextComponent(host + '\n'); + if (!server.equals(data.getSection("servers").getSection(server).getString("display"))) { + hover = new TextComponent(server + '\n'); hover.setColor(ChatColor.GRAY); hoverm.add(hover); } - hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Host-Menu.Host-Disabled")); - } - if (plugin.config.get().getSection("Settings").getBoolean("Show-Addresses", false)) { - hoverm.add(hover); - hover = new TextComponent('\n' + data.getSection("hosts").getSection(host).getString("address")); - hover.setColor(ChatColor.WHITE); - } - hoverm.add(hover); - message.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, label + " open Host/ " + host)); - message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverm.toArray(new TextComponent[hoverm.size()]))); - msg.addExtra(message); - msg.addExtra(new TextComponent(plugin.api.getLang("SubServers", "Command.List.Header"))); - - for (String subserver : data.getSection("hosts").getSection(host).getSection("servers").getKeys()) { - hoverm = new LinkedList(); - message = new TextComponent(data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getString("display")); - hover = new TextComponent(data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getString("display") + '\n'); - message.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, label + " open SubServer/ " + subserver)); - if (data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getBoolean("temp")) { - message.setColor(ChatColor.AQUA); - hover.setColor(ChatColor.AQUA); - hoverm.add(hover); - if (!subserver.equals(data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getString("display"))) { - hover = new TextComponent(subserver + '\n'); - hover.setColor(ChatColor.GRAY); - hoverm.add(hover); - } - hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.Server-Player-Count").replace("$int$", new DecimalFormat("#,###").format(data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getSection("players").getKeys().size())) + '\n'); - hoverm.add(hover); - hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.SubServer-Temporary")); - } else if (data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getBoolean("running")) { - message.setColor(ChatColor.GREEN); - hover.setColor(ChatColor.GREEN); - hoverm.add(hover); - if (!subserver.equals(data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getString("display"))) { - hover = new TextComponent(subserver + '\n'); - hover.setColor(ChatColor.GRAY); - hoverm.add(hover); - } - hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.Server-Player-Count").replace("$int$", new DecimalFormat("#,###").format(data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getSection("players").getKeys().size()))); - } else if (data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getBoolean("enabled") && data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getList("incompatible").size() == 0) { - message.setColor(ChatColor.YELLOW); - hover.setColor(ChatColor.YELLOW); - hoverm.add(hover); - if (!subserver.equals(data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getString("display"))) { - hover = new TextComponent(subserver + '\n'); - hover.setColor(ChatColor.GRAY); - hoverm.add(hover); - } - hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.SubServer-Offline")); - } else { - message.setColor(ChatColor.RED); - hover.setColor(ChatColor.RED); - if (!subserver.equals(data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getString("display"))) { - hoverm.add(hover); - hover = new TextComponent(subserver + '\n'); - hover.setColor(ChatColor.GRAY); - } - if (data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getList("incompatible").size() != 0) { - hoverm.add(hover); - String list = ""; - for (int ii = 0; ii < data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getList("incompatible").size(); ii++) { - if (list.length() != 0) list += ", "; - list += data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getList("incompatible").get(ii).asString(); - } - hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.SubServer-Incompatible").replace("$str$", list) + ((data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getBoolean("enabled"))?"":"\n")); - } - if (!data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getBoolean("enabled")) { - hoverm.add(hover); - hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.SubServer-Disabled")); - } - } + hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.Server-External")); hoverm.add(hover); if (plugin.config.get().getSection("Settings").getBoolean("Show-Addresses", false)) { - hover = new TextComponent('\n' + data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getString("address")); + hover = new TextComponent('\n' + data.getSection("servers").getSection(server).getString("address")); } else { - hover = new TextComponent('\n' + data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getString("address").split(":")[data.getSection("hosts").getSection(host).getSection("servers").getSection(subserver).getString("address").split(":").length - 1]); + hover = new TextComponent('\n' + data.getSection("servers").getSection(server).getString("address").split(":")[data.getSection("servers").getSection(server).getString("address").split(":").length - 1]); } hover.setColor(ChatColor.WHITE); hoverm.add(hover); - message.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, label + " open SubServer/ " + subserver)); message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverm.toArray(new TextComponent[hoverm.size()]))); if (i != 0) msg.addExtra(div); msg.addExtra(message); i++; } - if (i == 0) msg.addExtra(new TextComponent(plugin.api.getLang("SubServers", "Command.List.Empty"))); - ((Player) sender).spigot().sendMessage(msg); - i = 0; - sent = true; - } - if (!sent) sender.sendMessage(" " + plugin.api.getLang("SubServers", "Command.List.Empty")); - sender.sendMessage(plugin.api.getLang("SubServers", "Command.List.Server-Header")); - TextComponent msg = new TextComponent(" "); - for (String server : data.getSection("servers").getKeys()) { - List hoverm = new LinkedList(); - TextComponent message = new TextComponent(data.getSection("servers").getSection(server).getString("display")); - TextComponent hover = new TextComponent(data.getSection("servers").getSection(server).getString("display") + '\n'); - message.setColor(ChatColor.WHITE); - hover.setColor(ChatColor.WHITE); - hoverm.add(hover); - hover = new TextComponent(plugin.api.getLang("SubServers", "Interface.Server-Menu.Server-External")); - hoverm.add(hover); - if (plugin.config.get().getSection("Settings").getBoolean("Show-Addresses", false)) { - hover = new TextComponent('\n' + data.getSection("servers").getSection(server).getString("address")); - } else { - hover = new TextComponent('\n' + data.getSection("servers").getSection(server).getString("address").split(":")[data.getSection("servers").getSection(server).getString("address").split(":").length - 1]); + if (i == 0) sender.sendMessage(" " + plugin.api.getLang("SubServers", "Command.List.Empty")); + else ((Player) sender).spigot().sendMessage(msg); + if (data.getSection("proxies").getKeys().size() > 0) { + sender.sendMessage(plugin.api.getLang("SubServers", "Command.List.Proxy-Header")); + msg = new TextComponent(" (master)"); + msg.setColor(ChatColor.GRAY); + for (String proxy : data.getSection("proxies").getKeys()) { + List hoverm = new LinkedList(); + TextComponent message = new TextComponent(data.getSection("proxies").getSection(proxy).getString("display")); + TextComponent hover = new TextComponent(data.getSection("proxies").getSection(proxy).getString("display")); + if (data.getSection("proxies").getSection(proxy).getKeys().contains("subdata")) { + message.setColor(ChatColor.AQUA); + hover.setColor(ChatColor.AQUA); + } else { + message.setColor(ChatColor.WHITE); + hover.setColor(ChatColor.WHITE); + } + hoverm.add(hover); + if (!proxy.equals(data.getSection("proxies").getSection(proxy).getString("display"))) { + hover = new TextComponent('\n' + proxy); + hover.setColor(ChatColor.GRAY); + hoverm.add(hover); + } + message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverm.toArray(new TextComponent[hoverm.size()]))); + msg.addExtra(div); + msg.addExtra(message); + } + ((Player) sender).spigot().sendMessage(msg); } - hover.setColor(ChatColor.WHITE); - hoverm.add(hover); - message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverm.toArray(new TextComponent[hoverm.size()]))); - if (i != 0) msg.addExtra(div); - msg.addExtra(message); - i++; - } - if (i == 0) sender.sendMessage(" " + plugin.api.getLang("SubServers", "Command.List.Empty")); - ((Player) sender).spigot().sendMessage(msg); + })); } } diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/Packet/PacketInRunEvent.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/Packet/PacketInRunEvent.java index 267d733c..4fe560b5 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/Packet/PacketInRunEvent.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/Packet/PacketInRunEvent.java @@ -33,6 +33,15 @@ public void run(YAMLSection data) { } } }); + callback("SubAddProxyEvent", new Callback() { + @Override + public void run(YAMLSection data) { + if (plugin.isEnabled()) { + Bukkit.getPluginManager().callEvent(new SubAddProxyEvent(data.getString("proxy"))); + callback("SubAddProxyEvent", this); + } + } + }); callback("SubAddServerEvent", new Callback() { @Override public void run(YAMLSection data) { @@ -106,6 +115,15 @@ public void run(YAMLSection data) { } } }); + callback("SubRemoveProxyEvent", new Callback() { + @Override + public void run(YAMLSection data) { + if (plugin.isEnabled()) { + Bukkit.getPluginManager().callEvent(new SubAddProxyEvent(data.getString("proxy"))); + callback("SubRemoveProxyEvent", this); + } + } + }); callback("SubRemoveHostEvent", new Callback() { @Override public void run(YAMLSection data) { diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubAPI.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubAPI.java index 61edab43..41d13694 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubAPI.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubAPI.java @@ -230,12 +230,10 @@ public void getSubServer(String name, Callback callback) { public void getProxies(Callback> callback) { if (Util.isNull(callback)) throw new NullPointerException(); StackTraceElement[] origin = new Exception().getStackTrace(); - plugin.subdata.sendPacket(new PacketDownloadNetworkList(data -> { + plugin.subdata.sendPacket(new PacketDownloadServerList(null, null, data -> { TreeMap proxies = new TreeMap(); - for (String client : data.getSection("clients").getKeys()) { - if (data.getSection("clients").getSection(client).getKeys().size() > 0 && data.getSection("clients").getSection(client).getRawString("type", "").equals("Proxy")) { - proxies.put(data.getSection("clients").getSection(client).getRawString("name").toLowerCase(), new Proxy(data.getSection("clients").getSection(client))); - } + for (String proxy : data.getSection("proxies").getKeys()) { + proxies.put(proxy.toLowerCase(), new Proxy(data.getSection("proxies").getSection(proxy))); } try { 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 51d0c601..ebd11a0a 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 @@ -4,6 +4,7 @@ import net.ME1312.SubServers.Client.Bukkit.Library.Config.YAMLSection; import net.ME1312.SubServers.Client.Bukkit.Library.Util; import net.ME1312.SubServers.Client.Bukkit.Library.Version.Version; +import net.ME1312.SubServers.Client.Bukkit.Network.API.Proxy; import net.ME1312.SubServers.Client.Bukkit.Network.Packet.*; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -71,11 +72,11 @@ public boolean onCommand(CommandSender sender, Command command, String label, St } catch (Exception e) {} }); } else if (args[0].equalsIgnoreCase("list")) { - final String fLabel = label; - plugin.subdata.sendPacket(new PacketDownloadServerList(null, null, data -> { - if (Util.getDespiteException(() -> Class.forName("net.md_5.bungee.api.chat.BaseComponent") != null, false) && sender instanceof Player) { - new net.ME1312.SubServers.Client.Bukkit.Library.Compatibility.BungeeChat(plugin).listCommand(sender, fLabel, data); - } else { + if (Util.getDespiteException(() -> Class.forName("net.md_5.bungee.api.chat.BaseComponent") != null, false) && sender instanceof Player) { + new net.ME1312.SubServers.Client.Bukkit.Library.Compatibility.BungeeChat(plugin).listCommand(sender, label); + } else { + final String fLabel = label; + plugin.subdata.sendPacket(new PacketDownloadServerList(null, null, data -> { int i = 0; boolean sent = false; sender.sendMessage(plugin.api.getLang("SubServers", "Command.List.Group-Header")); @@ -150,9 +151,17 @@ public boolean onCommand(CommandSender sender, Command command, String label, St i++; } if (i == 0) sender.sendMessage(" " + plugin.api.getLang("SubServers", "Command.List.Empty")); - sender.sendMessage(message); - } - })); + else sender.sendMessage(message); + if (data.getSection("proxies").getKeys().size() > 0) { + sender.sendMessage(plugin.api.getLang("SubServers", "Command.List.Proxy-Header")); + message = " (master)"; + for (String proxy : data.getSection("proxies").getKeys()) { + message += div + ((data.getSection("proxies").getSection(proxy).getKeys().contains("subdata"))?ChatColor.AQUA:ChatColor.WHITE) + data.getSection("proxies").getSection(proxy).getString("display") + ((proxy.equals(data.getSection("proxies").getSection(proxy).getString("display")))?"":" ("+proxy+')'); + } + sender.sendMessage(message); + } + })); + } } else if (args[0].equalsIgnoreCase("info") || args[0].equalsIgnoreCase("status")) { if (args.length > 1) { plugin.subdata.sendPacket(new PacketDownloadServerInfo(args[1].toLowerCase(), data -> { diff --git a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Event/SubAddProxyEvent.java b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Event/SubAddProxyEvent.java new file mode 100644 index 00000000..b9a71f06 --- /dev/null +++ b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Event/SubAddProxyEvent.java @@ -0,0 +1,43 @@ +package net.ME1312.SubServers.Client.Sponge.Event; + + +import net.ME1312.SubServers.Client.Sponge.Library.SubEvent; +import net.ME1312.SubServers.Client.Sponge.Library.Util; +import org.spongepowered.api.event.cause.Cause; +import org.spongepowered.api.event.impl.AbstractEvent; + +/** + * Proxy Add Event + */ +public class SubAddProxyEvent extends AbstractEvent implements SubEvent { + private String proxy; + + /** + * Proxy Add Event + * + * @param proxy Host Being Added + */ + public SubAddProxyEvent(String proxy) { + if (Util.isNull(proxy)) throw new NullPointerException(); + this.proxy = proxy; + } + + /** + * Gets the Proxy to be Added + * + * @return The Proxy to be Added + */ + public String getProxy() { return proxy; } + + /** + * Gets the cause of this Event + * + * @deprecated Use simplified methods where available + * @return An empty cause list + */ + @Override + @Deprecated + public Cause getCause() { + return Cause.builder().build(); + } +} diff --git a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Event/SubNetworkConnectEvent.java b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Event/SubNetworkConnectEvent.java index 128c32d8..bd06496f 100644 --- a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Event/SubNetworkConnectEvent.java +++ b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Event/SubNetworkConnectEvent.java @@ -1,23 +1,34 @@ package net.ME1312.SubServers.Client.Sponge.Event; import net.ME1312.SubServers.Client.Sponge.Library.SubEvent; +import net.ME1312.SubServers.Client.Sponge.Library.Util; import net.ME1312.SubServers.Client.Sponge.Network.SubDataClient; import org.spongepowered.api.event.cause.Cause; import org.spongepowered.api.event.impl.AbstractEvent; /** - * SubData Network Disconnect Event + * SubData Network Connect Event */ public class SubNetworkConnectEvent extends AbstractEvent implements SubEvent { private SubDataClient network; /** - * SubData Network Disconnect Event + * SubData Network Connect Event */ public SubNetworkConnectEvent(SubDataClient network) { + if (Util.isNull(network)) throw new NullPointerException(); this.network = network; } + /** + * Get the SubData network + * + * @return SubData Network + */ + public SubDataClient getNetwork() { + return network; + } + /** * Gets the cause of this Event * diff --git a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Event/SubRemoveHostEvent.java b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Event/SubRemoveHostEvent.java index 712430ef..84e1bd22 100644 --- a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Event/SubRemoveHostEvent.java +++ b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Event/SubRemoveHostEvent.java @@ -8,14 +8,14 @@ import java.util.UUID; /** - * Remove Server Event + * Remove Host Event */ public class SubRemoveHostEvent extends AbstractEvent implements SubEvent { private UUID player; private String host; /** - * Server Remove Event + * Host Remove Event * * @param player Player Adding Host * @param host Server Starting diff --git a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Event/SubRemoveProxyEvent.java b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Event/SubRemoveProxyEvent.java new file mode 100644 index 00000000..dc83a267 --- /dev/null +++ b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Event/SubRemoveProxyEvent.java @@ -0,0 +1,42 @@ +package net.ME1312.SubServers.Client.Sponge.Event; + +import net.ME1312.SubServers.Client.Sponge.Library.SubEvent; +import net.ME1312.SubServers.Client.Sponge.Library.Util; +import org.spongepowered.api.event.cause.Cause; +import org.spongepowered.api.event.impl.AbstractEvent; + +/** + * Proxy Remove Event + */ +public class SubRemoveProxyEvent extends AbstractEvent implements SubEvent { + private String proxy; + + /** + * Proxy Remove Event + * + * @param proxy Host Being Added + */ + public SubRemoveProxyEvent(String proxy) { + if (Util.isNull(proxy)) throw new NullPointerException(); + this.proxy = proxy; + } + + /** + * Gets the Proxy to be Removed + * + * @return The Proxy to be Removed + */ + public String getProxy() { return proxy; } + + /** + * Gets the cause of this Event + * + * @deprecated Use simplified methods where available + * @return An empty cause list + */ + @Override + @Deprecated + public Cause getCause() { + return Cause.builder().build(); + } +} diff --git a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Network/Packet/PacketInRunEvent.java b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Network/Packet/PacketInRunEvent.java index 1cbeae8a..e2a27860 100644 --- a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Network/Packet/PacketInRunEvent.java +++ b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Network/Packet/PacketInRunEvent.java @@ -31,6 +31,13 @@ public void run(YAMLSection data) { callback("SubAddHostEvent", this); } }); + callback("SubAddProxyEvent", new Callback() { + @Override + public void run(YAMLSection data) { + Sponge.getEventManager().post(new SubAddProxyEvent(data.getString("proxy"))); + callback("SubAddProxyEvent", this); + } + }); callback("SubAddServerEvent", new Callback() { @Override public void run(YAMLSection data) { @@ -88,6 +95,13 @@ public void run(YAMLSection data) { callback("SubRemoveServerEvent", this); } }); + callback("SubRemoveProxyEvent", new Callback() { + @Override + public void run(YAMLSection data) { + Sponge.getEventManager().post(new SubRemoveProxyEvent(data.getString("proxy"))); + callback("SubRemoveProxyEvent", this); + } + }); callback("SubRemoveHostEvent", new Callback() { @Override public void run(YAMLSection data) { diff --git a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubCommand.java b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubCommand.java index cc021733..edc25c08 100644 --- a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubCommand.java +++ b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubCommand.java @@ -5,6 +5,7 @@ import net.ME1312.SubServers.Client.Sponge.Library.Config.YAMLSection; import net.ME1312.SubServers.Client.Sponge.Library.Util; import net.ME1312.SubServers.Client.Sponge.Library.Version.Version; +import net.ME1312.SubServers.Client.Sponge.Network.API.Proxy; import net.ME1312.SubServers.Client.Sponge.Network.Packet.*; import org.spongepowered.api.Platform; import org.spongepowered.api.Sponge; @@ -379,6 +380,9 @@ public CommandResult execute(CommandSource sender, CommandContext args) throws C Text.Builder hover = Text.builder(data.getSection("servers").getSection(server).getString("display") + '\n'); message.color(TextColors.WHITE); hover.color(TextColors.WHITE); + if (!server.equals(data.getSection("servers").getSection(server).getString("display"))) { + hover.append(Text.builder(server + '\n').color(TextColors.GRAY).build()); + } hover.append(Text.of(plugin.api.getLang("SubServers", "Interface.Server-Menu.Server-External"))); if (plugin.config.get().getSection("Settings").getBoolean("Show-Addresses", false)) { hover.append(Text.builder('\n' + data.getSection("servers").getSection(server).getString("address")).color(TextColors.WHITE).build()); @@ -391,7 +395,28 @@ public CommandResult execute(CommandSource sender, CommandContext args) throws C i++; } if (i == 0) sender.sendMessage(Text.of(" " + plugin.api.getLang("SubServers", "Command.List.Empty"))); - sender.sendMessage(Text.builder(" ").append(msg.build()).build()); + else sender.sendMessage(Text.builder(" (master)").append(msg.build()).build()); + if (data.getSection("proxies").getKeys().size() > 0) { + sender.sendMessage(Text.of(plugin.api.getLang("SubServers", "Command.List.Proxy-Header"))); + msg = Text.builder(); + for (String proxy : data.getSection("proxies").getKeys()) { + Text.Builder message = Text.builder(data.getSection("proxies").getSection(proxy).getString("display")); + Text.Builder hover = Text.builder(data.getSection("proxies").getSection(proxy).getString("display")); + if (data.getSection("proxies").getSection(proxy).getKeys().contains("subdata")) { + message.color(TextColors.AQUA); + hover.color(TextColors.AQUA); + } else { + message.color(TextColors.WHITE); + hover.color(TextColors.WHITE); + } + if (!proxy.equals(data.getSection("proxies").getSection(proxy).getString("display"))) { + hover.append(Text.builder('\n' + proxy).color(TextColors.GRAY).build()); + } + message.onHover(TextActions.showText(hover.build())); + msg.append(div, message.build()); + } + sender.sendMessage(Text.builder(" ").append(msg.build()).build()); + } })); return CommandResult.builder().successCount(1).build(); } else { diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/API/Event/SubAddProxyEvent.java b/SubServers.Host/src/net/ME1312/SubServers/Host/API/Event/SubAddProxyEvent.java new file mode 100644 index 00000000..974a252a --- /dev/null +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/API/Event/SubAddProxyEvent.java @@ -0,0 +1,28 @@ +package net.ME1312.SubServers.Host.API.Event; + +import net.ME1312.SubServers.Host.Library.Event.Event; +import net.ME1312.SubServers.Host.Library.Util; + +/** + * Proxy Add Event + */ +public class SubAddProxyEvent extends Event { + private String proxy; + + /** + * Proxy Add Event + * + * @param proxy Host Being Added + */ + public SubAddProxyEvent(String proxy) { + if (Util.isNull(proxy)) throw new NullPointerException(); + this.proxy = proxy; + } + + /** + * Gets the Proxy to be Added + * + * @return The Proxy to be Added + */ + public String getProxy() { return proxy; } +} diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/API/Event/SubNetworkConnectEvent.java b/SubServers.Host/src/net/ME1312/SubServers/Host/API/Event/SubNetworkConnectEvent.java index a337ccdc..96867487 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/API/Event/SubNetworkConnectEvent.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/API/Event/SubNetworkConnectEvent.java @@ -1,18 +1,29 @@ package net.ME1312.SubServers.Host.API.Event; import net.ME1312.SubServers.Host.Library.Event.Event; +import net.ME1312.SubServers.Host.Library.Util; import net.ME1312.SubServers.Host.Network.SubDataClient; /** - * SubData Network Disconnect Event + * SubData Network Connect Event */ public class SubNetworkConnectEvent extends Event { private SubDataClient network; /** - * SubData Network Disconnect Event + * SubData Network Connect Event */ public SubNetworkConnectEvent(SubDataClient network) { + if (Util.isNull(network)) throw new NullPointerException(); this.network = network; } + + /** + * Get the SubData network + * + * @return SubData Network + */ + public SubDataClient getNetwork() { + return network; + } } \ No newline at end of file diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/API/Event/SubRemoveHostEvent.java b/SubServers.Host/src/net/ME1312/SubServers/Host/API/Event/SubRemoveHostEvent.java index 99de8cec..34954e78 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/API/Event/SubRemoveHostEvent.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/API/Event/SubRemoveHostEvent.java @@ -6,14 +6,14 @@ import java.util.UUID; /** - * Remove Server Event + * Remove Host Event */ public class SubRemoveHostEvent extends Event { private UUID player; private String host; /** - * Server Remove Event + * Server Host Event * * @param player Player Adding Host * @param host Server Starting diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/API/Event/SubRemoveProxyEvent.java b/SubServers.Host/src/net/ME1312/SubServers/Host/API/Event/SubRemoveProxyEvent.java new file mode 100644 index 00000000..8f54f7b7 --- /dev/null +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/API/Event/SubRemoveProxyEvent.java @@ -0,0 +1,28 @@ +package net.ME1312.SubServers.Host.API.Event; + +import net.ME1312.SubServers.Host.Library.Event.Event; +import net.ME1312.SubServers.Host.Library.Util; + +/** + * Proxy Remove Event + */ +public class SubRemoveProxyEvent extends Event { + private String proxy; + + /** + * Proxy Remove Event + * + * @param proxy Host Being Added + */ + public SubRemoveProxyEvent(String proxy) { + if (Util.isNull(proxy)) throw new NullPointerException(); + this.proxy = proxy; + } + + /** + * Gets the Proxy to be Removed + * + * @return The Proxy to be Removed + */ + public String getProxy() { return proxy; } +} diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketInRunEvent.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketInRunEvent.java index 6f716bbc..75ed2730 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketInRunEvent.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketInRunEvent.java @@ -30,6 +30,13 @@ public void run(YAMLSection data) { callback("SubAddHostEvent", this); } }); + callback("SubAddProxyEvent", new Callback() { + @Override + public void run(YAMLSection data) { + SubAPI.getInstance().executeEvent(new SubAddProxyEvent(data.getRawString("proxy"))); + callback("SubAddProxyEvent", this); + } + }); callback("SubAddServerEvent", new Callback() { @Override public void run(YAMLSection data) { @@ -87,6 +94,13 @@ public void run(YAMLSection data) { callback("SubRemoveServerEvent", this); } }); + callback("SubRemoveProxyEvent", new Callback() { + @Override + public void run(YAMLSection data) { + SubAPI.getInstance().executeEvent(new SubAddProxyEvent(data.getRawString("proxy"))); + callback("SubRemoveProxyEvent", this); + } + }); callback("SubRemoveHostEvent", new Callback() { @Override public void run(YAMLSection data) { diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/SubCommand.java b/SubServers.Host/src/net/ME1312/SubServers/Host/SubCommand.java index 9b3c5bbb..aa487ce9 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/SubCommand.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/SubCommand.java @@ -6,6 +6,7 @@ import net.ME1312.SubServers.Host.Library.TextColor; import net.ME1312.SubServers.Host.Library.Util; import net.ME1312.SubServers.Host.Library.Version.Version; +import net.ME1312.SubServers.Host.Network.API.Proxy; import net.ME1312.SubServers.Host.Network.Packet.*; import org.json.JSONObject; @@ -91,7 +92,7 @@ public void command(String handle, String[] args) { "This command will print what OS you're running, your OS version,", "your Java version, and the SubServers.Host version.", "", - "If the [plugin] option is provided, it will print information about the specified plugin instead.", + "If the [plugin] option is provided, it will print information about the specified plugin as well.", "", "Examples:", " /version", @@ -172,6 +173,14 @@ public void command(String handle, String[] args) { } if (i == 0) message += TextColor.RESET + "(none)"; host.log.message.println(message); + if (data.getSection("proxies").getKeys().size() > 0) { + host.log.message.println("Proxy List:"); + message = " (master)"; + for (String proxy : data.getSection("proxies").getKeys()) { + message += div + ((data.getSection("proxies").getSection(proxy).getKeys().contains("subdata"))?TextColor.AQUA:TextColor.WHITE) + data.getSection("proxies").getSection(proxy).getString("display") + ((proxy.equals(data.getSection("proxies").getSection(proxy).getString("display")))?"":" ("+proxy+')'); + } + host.log.message.println(message); + } })); } }.description("Lists the available Hosts and Servers").help( diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Event/SubAddProxyEvent.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Event/SubAddProxyEvent.java new file mode 100644 index 00000000..b12afcd1 --- /dev/null +++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Event/SubAddProxyEvent.java @@ -0,0 +1,29 @@ +package net.ME1312.SubServers.Sync.Event; + +import net.ME1312.SubServers.Sync.Library.SubEvent; +import net.ME1312.SubServers.Sync.Library.Util; +import net.md_5.bungee.api.plugin.Event; + +/** + * Proxy Add Event + */ +public class SubAddProxyEvent extends Event implements SubEvent { + private String proxy; + + /** + * Proxy Add Event + * + * @param proxy Host Being Added + */ + public SubAddProxyEvent(String proxy) { + if (Util.isNull(proxy)) throw new NullPointerException(); + this.proxy = proxy; + } + + /** + * Gets the Proxy to be Added + * + * @return The Proxy to be Added + */ + public String getProxy() { return proxy; } +} diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Event/SubNetworkConnectEvent.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Event/SubNetworkConnectEvent.java index 2b006574..96247ef4 100644 --- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Event/SubNetworkConnectEvent.java +++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Event/SubNetworkConnectEvent.java @@ -1,19 +1,30 @@ package net.ME1312.SubServers.Sync.Event; import net.ME1312.SubServers.Sync.Library.SubEvent; +import net.ME1312.SubServers.Sync.Library.Util; import net.ME1312.SubServers.Sync.Network.SubDataClient; import net.md_5.bungee.api.plugin.Event; /** - * SubData Network Disconnect Event + * SubData Network Connect Event */ public class SubNetworkConnectEvent extends Event implements SubEvent { private SubDataClient network; /** - * SubData Network Disconnect Event + * SubData Network Connect Event */ public SubNetworkConnectEvent(SubDataClient network) { + if (Util.isNull(network)) throw new NullPointerException(); this.network = network; } + + /** + * Get the SubData network + * + * @return SubData Network + */ + public SubDataClient getNetwork() { + return network; + } } \ No newline at end of file diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Event/SubRemoveHostEvent.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Event/SubRemoveHostEvent.java index c8db4341..60de7e44 100644 --- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Event/SubRemoveHostEvent.java +++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Event/SubRemoveHostEvent.java @@ -7,14 +7,14 @@ import java.util.UUID; /** - * Remove Server Event + * Remove Host Event */ public class SubRemoveHostEvent extends Event implements SubEvent { private UUID player; private String host; /** - * Server Remove Event + * Host Remove Event * * @param player Player Adding Host * @param host Server Starting diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Event/SubRemoveProxyEvent.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Event/SubRemoveProxyEvent.java new file mode 100644 index 00000000..b9e50507 --- /dev/null +++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Event/SubRemoveProxyEvent.java @@ -0,0 +1,29 @@ +package net.ME1312.SubServers.Sync.Event; + +import net.ME1312.SubServers.Sync.Library.SubEvent; +import net.ME1312.SubServers.Sync.Library.Util; +import net.md_5.bungee.api.plugin.Event; + +/** + * Proxy Remove Event + */ +public class SubRemoveProxyEvent extends Event implements SubEvent { + private String proxy; + + /** + * Proxy Remove Event + * + * @param proxy Host Being Added + */ + public SubRemoveProxyEvent(String proxy) { + if (Util.isNull(proxy)) throw new NullPointerException(); + this.proxy = proxy; + } + + /** + * Gets the Proxy to be Removed + * + * @return The Proxy to be Removed + */ + public String getProxy() { return proxy; } +} diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/Files/config.yml b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/Files/config.yml index 7bb0e8bc..d9f57486 100644 --- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/Files/config.yml +++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/Files/config.yml @@ -11,5 +11,4 @@ Sync: Forced-Hosts: true MOTD: false Player-Limit: false - Server-Priorities: true - Tab-List: false \ No newline at end of file + Server-Priorities: true \ No newline at end of file diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketInRunEvent.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketInRunEvent.java index 763bcd54..f64bbfbc 100644 --- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketInRunEvent.java +++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketInRunEvent.java @@ -30,6 +30,13 @@ public void run(YAMLSection data) { callback("SubAddHostEvent", this); } }); + callback("SubAddProxyEvent", new Callback() { + @Override + public void run(YAMLSection data) { + ProxyServer.getInstance().getPluginManager().callEvent(new SubAddProxyEvent(data.getRawString("proxy"))); + callback("SubAddProxyEvent", this); + } + }); callback("SubAddServerEvent", new Callback() { @Override public void run(YAMLSection data) { @@ -87,6 +94,13 @@ public void run(YAMLSection data) { callback("SubRemoveServerEvent", this); } }); + callback("SubRemoveProxyEvent", new Callback() { + @Override + public void run(YAMLSection data) { + ProxyServer.getInstance().getPluginManager().callEvent(new SubAddProxyEvent(data.getRawString("proxy"))); + callback("SubRemoveProxyEvent", this); + } + }); callback("SubRemoveHostEvent", new Callback() { @Override public void run(YAMLSection data) { diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/SubDataClient.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/SubDataClient.java index 3a2af1b9..87152e07 100644 --- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/SubDataClient.java +++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/SubDataClient.java @@ -99,15 +99,11 @@ private void init() { if (plugin.config.get().getSection("Sync", new YAMLSection()).getBoolean("MOTD", false)) updateField(ListenerInfo.class.getDeclaredField("motd"), listeners.get(i), proxy.getSection("bungee").getSectionList("listeners").get(i).getRawString("motd")); if (plugin.config.get().getSection("Sync", new YAMLSection()).getBoolean("Player-Limit", false)) updateField(ListenerInfo.class.getDeclaredField("maxPlayers"), listeners.get(i), proxy.getSection("bungee").getSectionList("listeners").get(i).getInt("player-limit")); if (plugin.config.get().getSection("Sync", new YAMLSection()).getBoolean("Server-Priorities", true)) updateField(ListenerInfo.class.getDeclaredField("serverPriority"), listeners.get(i), proxy.getSection("bungee").getSectionList("listeners").get(i).getRawStringList("priorities")); - if (plugin.config.get().getSection("Sync", new YAMLSection()).getBoolean("Tab-List", false)) { - updateField(ListenerInfo.class.getDeclaredField("tabListType"), listeners.get(i), proxy.getSection("bungee").getSectionList("listeners").get(i).getRawString("tab-list")); - updateField(ListenerInfo.class.getDeclaredField("tabListSize"), listeners.get(i), proxy.getSection("bungee").getSectionList("listeners").get(i).getInt("tab-list-size")); - } } if (plugin.config.get().getSection("Sync", new YAMLSection()).getBoolean("Disabled-Commands", false)) updateField(Configuration.class.getDeclaredField("disabledCommands"), plugin.getConfig(), proxy.getSection("bungee").getRawStringList("disabled-cmds")); if (plugin.config.get().getSection("Sync", new YAMLSection()).getBoolean("Player-Limit", false)) updateField(Configuration.class.getDeclaredField("playerLimit"), plugin.getConfig(), proxy.getSection("bungee").getInt("player-limit")); } catch (Exception e) { - System.out.println("SubServers > Problem syncing BungeeCord config"); + System.out.println("SubServers > Problem syncing BungeeCord configuration options"); e.printStackTrace(); } for (String host : data.getSection("hosts").getKeys()) { diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubCommand.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubCommand.java index d34c52c4..ab48f6ce 100644 --- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubCommand.java +++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubCommand.java @@ -6,6 +6,7 @@ import net.ME1312.SubServers.Sync.Library.NamedContainer; import net.ME1312.SubServers.Sync.Library.Util; import net.ME1312.SubServers.Sync.Library.Version.Version; +import net.ME1312.SubServers.Sync.Network.API.Proxy; import net.ME1312.SubServers.Sync.Network.Packet.*; import net.ME1312.SubServers.Sync.Server.Server; import net.ME1312.SubServers.Sync.Server.SubServer; @@ -161,6 +162,14 @@ public void execute(CommandSender sender, String[] args) { } if (i == 0) message += ChatColor.RESET + "(none)"; sender.sendMessage(message); + if (data.getSection("proxies").getKeys().size() > 0) { + sender.sendMessage("SubServers > Proxy List:"); + message = " (master)"; + for (String proxy : data.getSection("proxies").getKeys()) { + message += div + ((data.getSection("proxies").getSection(proxy).getKeys().contains("subdata"))?ChatColor.AQUA:ChatColor.WHITE) + data.getSection("proxies").getSection(proxy).getString("display") + ((proxy.equals(data.getSection("proxies").getSection(proxy).getString("display")))?"":" ("+proxy+')'); + } + sender.sendMessage(message); + } })); } else if (args[0].equalsIgnoreCase("info") || args[0].equalsIgnoreCase("status")) { if (args.length > 1) {