From 185b6b84bb5884141f631baa0ce64fac8d1e3227 Mon Sep 17 00:00:00 2001 From: ME1312 Date: Mon, 13 May 2019 22:02:38 -0400 Subject: [PATCH] Mirror changes in SubServers.Sync --- SubServers.Bungee/pom.xml | 4 +- .../Bungee/Host/External/ExternalHost.java | 11 +- .../ME1312/SubServers/Bungee/Host/Host.java | 5 - .../ME1312/SubServers/Bungee/Host/Proxy.java | 9 +- .../Bungee/Host/ServerContainer.java | 8 +- .../Bungee/Library/Updates/ConfigUpdater.java | 2 +- .../Network/Packet/PacketLinkProxy.java | 5 +- .../Network/Packet/PacketOutExRunEvent.java | 22 +- SubServers.Client/Bukkit/pom.xml | 4 +- .../Client/Bukkit/Network/API/Host.java | 12 +- .../Client/Bukkit/Network/API/Proxy.java | 8 +- .../Client/Bukkit/Network/API/Server.java | 8 +- SubServers.Client/Sponge/pom.xml | 4 +- .../Client/Sponge/Network/API/Host.java | 12 +- .../Client/Sponge/Network/API/Proxy.java | 8 +- .../Client/Sponge/Network/API/Server.java | 8 +- SubServers.Host/pom.xml | 4 +- .../SubServers/Host/Network/API/Host.java | 12 +- .../SubServers/Host/Network/API/Proxy.java | 8 +- .../SubServers/Host/Network/API/Server.java | 8 +- .../Host/Network/Packet/PacketLinkExHost.java | 4 +- .../ME1312/SubServers/Host/SubCommand.java | 744 +++++------ SubServers.Sync/pom.xml | 12 +- .../Sync/Event/SubAddHostEvent.java | 2 +- .../Sync/Event/SubAddProxyEvent.java | 2 +- .../Sync/Event/SubAddServerEvent.java | 2 +- .../SubServers/Sync/Event/SubCreateEvent.java | 4 +- .../Sync/Event/SubEditServerEvent.java | 16 +- .../Sync/Event/SubNetworkConnectEvent.java | 4 +- .../Sync/Event/SubNetworkDisconnectEvent.java | 35 +- .../Sync/Event/SubRemoveHostEvent.java | 2 +- .../Sync/Event/SubRemoveProxyEvent.java | 2 +- .../Sync/Event/SubRemoveServerEvent.java | 2 +- .../Sync/Event/SubSendCommandEvent.java | 2 +- .../SubServers/Sync/Event/SubStartEvent.java | 2 +- .../SubServers/Sync/Event/SubStopEvent.java | 2 +- .../Sync/Event/SubStoppedEvent.java | 2 +- .../net/ME1312/SubServers/Sync/Launch.java | 8 +- .../SubServers/Sync/Library/Callback.java | 13 - .../Sync/Library/Compatibility/CommandX.java | 2 +- .../Compatibility/mc1_13/CommandX.java | 2 +- .../Sync/Library/Config/YAMLConfig.java | 110 -- .../Sync/Library/Config/YAMLSection.java | 1143 ----------------- .../Sync/Library/Config/YAMLValue.java | 400 ------ .../SubServers/Sync/Library/Container.java | 50 - .../Exception/IllegalPacketException.java | 11 - .../Sync/Library/ExtraDataHandler.java | 47 - .../Fallback/SmartReconnectHandler.java | 4 +- .../Sync/Library/NamedContainer.java | 52 - .../Sync/Library/UniversalFile.java | 70 - .../Sync/Library/Updates/ConfigUpdater.java | 85 ++ .../ME1312/SubServers/Sync/Library/Util.java | 398 ------ .../Sync/Library/Version/Version.java | 411 ------ .../Library/Version/VersionTokenizer.java | 64 - .../Sync/Library/Version/VersionType.java | 23 - .../SubServers/Sync/Network/API/Host.java | 436 ++++++- .../SubServers/Sync/Network/API/Proxy.java | 53 +- .../SubServers/Sync/Network/API/Server.java | 39 +- .../Sync/Network/API/SubCreator.java | 63 +- .../Sync/Network/API/SubServer.java | 227 +++- .../SubServers/Sync/Network/Cipher.java | 34 - .../Sync/Network/Encryption/AES.java | 332 ----- .../Sync/Network/Packet/PacketAddServer.java | 123 ++ .../Network/Packet/PacketAuthorization.java | 47 - .../Network/Packet/PacketCheckPermission.java | 77 ++ .../Network/Packet/PacketCommandServer.java | 46 +- .../Network/Packet/PacketCreateServer.java | 77 +- .../Network/Packet/PacketDeleteServer.java | 68 + .../Packet/PacketDownloadGroupInfo.java | 44 +- .../Packet/PacketDownloadHostInfo.java | 50 +- .../Network/Packet/PacketDownloadLang.java | 36 +- .../Packet/PacketDownloadNetworkList.java | 57 - .../Packet/PacketDownloadPlatformInfo.java | 43 +- .../Packet/PacketDownloadPlayerList.java | 60 +- .../Packet/PacketDownloadProxyInfo.java | 50 +- .../Packet/PacketDownloadServerInfo.java | 44 +- .../Sync/Network/Packet/PacketEditServer.java | 70 + .../Sync/Network/Packet/PacketInExReset.java | 21 + ...nRunEvent.java => PacketInExRunEvent.java} | 106 +- .../Packet/PacketInExUpdateWhitelist.java | 20 +- .../Sync/Network/Packet/PacketInReset.java | 23 - .../Sync/Network/Packet/PacketLinkProxy.java | 74 +- .../Network/Packet/PacketRemoveServer.java | 65 + .../Network/Packet/PacketRestartServer.java | 44 +- .../Network/Packet/PacketStartServer.java | 44 +- .../Sync/Network/Packet/PacketStopServer.java | 44 +- .../SubServers/Sync/Network/PacketIn.java | 33 - .../SubServers/Sync/Network/PacketOut.java | 23 - .../Sync/Network/SubDataClient.java | 495 ------- .../SubServers/Sync/Network/SubProtocol.java | 221 ++++ .../Sync/Server/ServerContainer.java | 43 +- .../Sync/Server/SubServerContainer.java | 3 +- .../net/ME1312/SubServers/Sync/SubAPI.java | 303 ++++- .../ME1312/SubServers/Sync/SubCommand.java | 936 +++++++------- .../net/ME1312/SubServers/Sync/SubPlugin.java | 127 +- pom.xml | 1 - 96 files changed, 3267 insertions(+), 5329 deletions(-) delete mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/Callback.java delete mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/Config/YAMLConfig.java delete mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/Config/YAMLSection.java delete mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/Config/YAMLValue.java delete mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/Container.java delete mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/Exception/IllegalPacketException.java delete mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/ExtraDataHandler.java delete mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/NamedContainer.java delete mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/UniversalFile.java create mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/Updates/ConfigUpdater.java delete mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/Util.java delete mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/Version/Version.java delete mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/Version/VersionTokenizer.java delete mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/Version/VersionType.java delete mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Cipher.java delete mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Encryption/AES.java create mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketAddServer.java delete mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketAuthorization.java create mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketCheckPermission.java create mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketDeleteServer.java delete mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketDownloadNetworkList.java create mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketEditServer.java create mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketInExReset.java rename SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/{PacketInRunEvent.java => PacketInExRunEvent.java} (55%) delete mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketInReset.java create mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketRemoveServer.java delete mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/PacketIn.java delete mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/PacketOut.java delete mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/SubDataClient.java create mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/SubProtocol.java diff --git a/SubServers.Bungee/pom.xml b/SubServers.Bungee/pom.xml index cc9699a1..c44971f0 100644 --- a/SubServers.Bungee/pom.xml +++ b/SubServers.Bungee/pom.xml @@ -30,13 +30,13 @@ net.ME1312.Galaxi GalaxiUtil - 19w20a + 19w20b compile net.ME1312.SubData Server - 19w20f + 19w20g compile diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalHost.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalHost.java index 2a4abe72..67ca0a59 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalHost.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalHost.java @@ -62,7 +62,7 @@ public class ExternalHost extends Host implements ClientHandler { this.queue = new LinkedList(); this.clean = false; - setSubData(null, 0); + subdata.put(0, null); } @Override @@ -365,4 +365,13 @@ public class ExternalHost extends Host implements ClientHandler { })); return true; } + + @Override + public ObjectMap forSubData() { + ObjectMap hinfo = super.forSubData(); + ObjectMap subdata = new ObjectMap(); + for (int channel : this.subdata.keySet()) subdata.set(channel, (this.subdata.get(channel) == null)?null:this.subdata.get(channel).getID()); + hinfo.set("subdata", subdata); + return hinfo; + } } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Host.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Host.java index f70ebf60..b375171b 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Host.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Host.java @@ -450,11 +450,6 @@ public abstract class Host implements ExtraDataHandler { servers.set(server.getName(), server.forSubData()); } hinfo.set("servers", servers); - if (this instanceof ClientHandler) { - LinkedList subdata = new LinkedList(); - for (DataClient client : ((ClientHandler) this).getSubData()) subdata.add((client == null)?null:client.getID()); - hinfo.set("subdata", subdata); - } hinfo.set("signature", signature); hinfo.set("extra", getExtra()); return hinfo; 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 0094ddbc..8923ab77 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Proxy.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Proxy.java @@ -36,7 +36,7 @@ public class Proxy implements ClientHandler, ExtraDataHandler { this.name = name; this.signature = SubAPI.getInstance().signAnonymousObject(); - setSubData(null, 0); + subdata.put(0, null); } @Override @@ -48,8 +48,7 @@ public class Proxy implements ClientHandler, ExtraDataHandler { return channels.toArray(new DataClient[0]); } - @SuppressWarnings("deprecation") - public void setSubData(DataClient client, int channel) { + public void setSubData(SubDataClient client, int channel) { boolean update = false; if (channel < 0) throw new IllegalArgumentException("Subchannel ID cannot be less than zero"); if (client != null || channel == 0) { @@ -189,8 +188,8 @@ public class Proxy implements ClientHandler, ExtraDataHandler { } info.set("players", players); info.set("redis", isRedis()); - LinkedList subdata = new LinkedList(); - for (DataClient client : getSubData()) subdata.add((client == null)?null:client.getID()); + ObjectMap subdata = new ObjectMap(); + for (int channel : this.subdata.keySet()) subdata.set(channel, (this.subdata.get(channel) == null)?null:this.subdata.get(channel).getID()); info.set("subdata", subdata); info.set("signature", signature); info.set("extra", getExtra()); 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 8a3d950e..fadc2fd6 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/ServerContainer.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/ServerContainer.java @@ -41,7 +41,7 @@ public class ServerContainer extends BungeeServerInfo implements Server { SubAPI.getInstance().getSubDataNetwork().getProtocol().whitelist(getAddress().getAddress().getHostAddress()); this.hidden = hidden; - setSubData(null, 0); + subdata.put(0, null); } @Override @@ -71,7 +71,7 @@ public class ServerContainer extends BungeeServerInfo implements Server { ObjectMap args = new ObjectMap(); args.set("server", getName()); args.set("channel", channel); - if (client != null) args.set("address", client.getAddress().toString()); + if (client != null) args.set("id", client.getID()); ((SubDataClient) proxy.getSubData()[0]).sendPacket(new PacketOutExRunEvent((client != null)?SubNetworkConnectEvent.class:SubNetworkDisconnectEvent.class, args)); } } @@ -259,8 +259,8 @@ public class ServerContainer extends BungeeServerInfo implements Server { players.set(player.get().toString(), pinfo); } info.set("players", players); - LinkedList subdata = new LinkedList(); - for (DataClient client : getSubData()) subdata.add((client == null)?null:client.getID()); + ObjectMap subdata = new ObjectMap(); + for (int channel : this.subdata.keySet()) subdata.set(channel, (this.subdata.get(channel) == null)?null:this.subdata.get(channel).getID()); info.set("subdata", subdata); info.set("signature", signature); info.set("extra", getExtra()); diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Updates/ConfigUpdater.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Updates/ConfigUpdater.java index 3ff59a26..c70742e7 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Updates/ConfigUpdater.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Updates/ConfigUpdater.java @@ -81,6 +81,7 @@ public class ConfigUpdater { if (i > 0) { YAMLSection settings = new YAMLSection(); settings.set("Version", ((now.compareTo(was) <= 0)?was:now).toString()); + settings.set("Smart-Fallback", updated.getMap("Settings", new YAMLSection()).getBoolean("Smart-Fallback", true)); settings.set("Override-Bungee-Commands", updated.getMap("Settings", new YAMLSection()).getBoolean("Override-Bungee-Commands", true)); YAMLSection upnp = new YAMLSection(); @@ -164,7 +165,6 @@ public class ConfigUpdater { if (i > 0) { YAMLSection settings = new YAMLSection(); settings.set("Version", ((now.compareTo(was) <= 0)?was:now).toString()); - settings.set("Smart-Fallback", updated.getMap("Settings", new YAMLSection()).getBoolean("Smart-Fallback", true)); settings.set("Run-On-Launch-Timeout", updated.getMap("Settings", new YAMLSection()).getInt("Run-On-Launch-Timeout", 0)); rewritten.set("Settings", settings); 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 3c588204..23074957 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 @@ -61,17 +61,20 @@ public class PacketLinkProxy implements InitialPacket, PacketObjectIn, Map proxies = plugin.api.getProxies(); String name = ((data.contains(0x0000))?data.getRawString(0x0000):null); Integer channel = data.getInt(0x0001); + + boolean isnew = false; Proxy proxy; if (name != null && proxies.keySet().contains(name.toLowerCase())) { proxy = proxies.get(name.toLowerCase()); } else { proxy = new Proxy((name != null && !proxies.keySet().contains(name.toLowerCase()))?name:null); - plugin.getPluginManager().callEvent(new SubAddProxyEvent(proxy)); + isnew = true; plugin.proxies.put(proxy.getName().toLowerCase(), proxy); } HashMap subdata = Util.getDespiteException(() -> Util.reflect(Proxy.class.getDeclaredField("subdata"), proxy), null); if (!subdata.keySet().contains(channel) || (channel == 0 && subdata.get(0) == null)) { proxy.setSubData(client, channel); + if (isnew) plugin.getPluginManager().callEvent(new SubAddProxyEvent(proxy)); System.out.println("SubData > " + client.getAddress().toString() + " has been defined as Proxy: " + proxy.getName() + ((channel > 0)?" (Sub-"+channel+")":"")); client.sendPacket(new PacketLinkProxy(proxy.getName(), 0, null)); setReady(client, true); diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutExRunEvent.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutExRunEvent.java index 2312137d..f18267fb 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutExRunEvent.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutExRunEvent.java @@ -57,10 +57,18 @@ public class PacketOutExRunEvent implements Listener, PacketObjectOut { } private void broadcast(PacketOutExRunEvent packet) { + broadcast(null, packet); + } + + private void broadcast(Object self, PacketOutExRunEvent packet) { List clients = new LinkedList(); clients.addAll(plugin.subdata.getClients().values()); for (SubDataClient client : clients) { - client.sendPacket(packet); + if (client.getHandler() == null || client.getHandler() != self) { // Don't send events about yourself to yourself + if (client.getHandler() == null || client.getHandler().getSubData()[0] == client) { // Don't send events over subchannels + client.sendPacket(packet); + } + } } } @@ -68,7 +76,7 @@ public class PacketOutExRunEvent implements Listener, PacketObjectOut { public void event(SubAddProxyEvent event) { ObjectMap args = new ObjectMap(); args.set("proxy", event.getProxy().getName()); - broadcast(new PacketOutExRunEvent(event.getClass(), args)); + broadcast(event.getProxy(), new PacketOutExRunEvent(event.getClass(), args)); } @EventHandler(priority = Byte.MAX_VALUE) @@ -77,7 +85,7 @@ public class PacketOutExRunEvent implements Listener, PacketObjectOut { ObjectMap args = new ObjectMap(); if (event.getPlayer() != null) args.set("player", event.getPlayer().toString()); args.set("host", event.getHost().getName()); - broadcast(new PacketOutExRunEvent(event.getClass(), args)); + broadcast(event.getHost(), new PacketOutExRunEvent(event.getClass(), args)); } } @@ -88,7 +96,7 @@ public class PacketOutExRunEvent implements Listener, PacketObjectOut { if (event.getPlayer() != null) args.set("player", event.getPlayer().toString()); if (event.getHost() != null) args.set("host", event.getHost().getName()); args.set("server", event.getServer().getName()); - broadcast(new PacketOutExRunEvent(event.getClass(), args)); + broadcast(event.getServer(), new PacketOutExRunEvent(event.getClass(), args)); } } @@ -163,7 +171,7 @@ public class PacketOutExRunEvent implements Listener, PacketObjectOut { if (event.getPlayer() != null) args.set("player", event.getPlayer().toString()); if (event.getHost() != null) args.set("host", event.getHost().getName()); args.set("server", event.getServer().getName()); - broadcast(new PacketOutExRunEvent(event.getClass(), args)); + broadcast(event.getServer(), new PacketOutExRunEvent(event.getClass(), args)); } } @@ -173,7 +181,7 @@ public class PacketOutExRunEvent implements Listener, PacketObjectOut { ObjectMap args = new ObjectMap(); if (event.getPlayer() != null) args.set("player", event.getPlayer().toString()); args.set("host", event.getHost().getName()); - broadcast(new PacketOutExRunEvent(event.getClass(), args)); + broadcast(event.getHost(), new PacketOutExRunEvent(event.getClass(), args)); } } @@ -181,6 +189,6 @@ public class PacketOutExRunEvent implements Listener, PacketObjectOut { public void event(SubRemoveProxyEvent event) { ObjectMap args = new ObjectMap(); args.set("proxy", event.getProxy().getName()); - broadcast(new PacketOutExRunEvent(event.getClass(), args)); + broadcast(event.getProxy(), new PacketOutExRunEvent(event.getClass(), args)); } } \ No newline at end of file diff --git a/SubServers.Client/Bukkit/pom.xml b/SubServers.Client/Bukkit/pom.xml index 8b7e133e..3020802d 100644 --- a/SubServers.Client/Bukkit/pom.xml +++ b/SubServers.Client/Bukkit/pom.xml @@ -48,13 +48,13 @@ net.ME1312.Galaxi GalaxiUtil - 19w20a + 19w20b compile net.ME1312.SubData Client - 19w20f + 19w20g compile diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/Host.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/Host.java index de8ecc16..e7002f8c 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/Host.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/Host.java @@ -57,8 +57,18 @@ public class Host { * * @return SubData Client Channel ID Array (may be empty if unsupported) */ + @SuppressWarnings("unchecked") public UUID[] getSubData() { - return raw.getUUIDList("subdata", Collections.emptyList()).toArray(new UUID[0]); + if (raw.contains("subdata")) { + ObjectMap subdata = new ObjectMap((Map) raw.getObject("subdata")); + LinkedList keys = new LinkedList(subdata.getKeys()); + LinkedList channels = new LinkedList(); + Collections.sort(keys); + for (Integer channel : keys) channels.add(subdata.getUUID(channel)); + return channels.toArray(new UUID[0]); + } else { + return new UUID[0]; + } } /** diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/Proxy.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/Proxy.java index bf2a064e..d844f10b 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/Proxy.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/Proxy.java @@ -46,8 +46,14 @@ public class Proxy { * * @return SubData Client Channel ID Array */ + @SuppressWarnings("unchecked") public UUID[] getSubData() { - return raw.getUUIDList("subdata", Collections.emptyList()).toArray(new UUID[0]); + ObjectMap subdata = new ObjectMap((Map) raw.getObject("subdata")); + LinkedList keys = new LinkedList(subdata.getKeys()); + LinkedList channels = new LinkedList(); + Collections.sort(keys); + for (Integer channel : keys) channels.add(subdata.getUUID(channel)); + return channels.toArray(new UUID[0]); } /** diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/Server.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/Server.java index 0e5c94ba..89354200 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/Server.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/API/Server.java @@ -45,8 +45,14 @@ public class Server { * * @return SubData Client Channel ID Array */ + @SuppressWarnings("unchecked") public UUID[] getSubData() { - return raw.getUUIDList("subdata", Collections.emptyList()).toArray(new UUID[0]); + ObjectMap subdata = new ObjectMap((Map) raw.getObject("subdata")); + LinkedList keys = new LinkedList(subdata.getKeys()); + LinkedList channels = new LinkedList(); + Collections.sort(keys); + for (Integer channel : keys) channels.add(subdata.getUUID(channel)); + return channels.toArray(new UUID[0]); } /** diff --git a/SubServers.Client/Sponge/pom.xml b/SubServers.Client/Sponge/pom.xml index 9a198b1f..b2aa4a2d 100644 --- a/SubServers.Client/Sponge/pom.xml +++ b/SubServers.Client/Sponge/pom.xml @@ -30,13 +30,13 @@ net.ME1312.Galaxi GalaxiUtil - 19w20a + 19w20b compile net.ME1312.SubData Client - 19w20f + 19w20g compile diff --git a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Network/API/Host.java b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Network/API/Host.java index 97e5b96c..9485f55a 100644 --- a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Network/API/Host.java +++ b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Network/API/Host.java @@ -60,8 +60,18 @@ public class Host { * * @return SubData Client Channel ID Array (may be empty if unsupported) */ + @SuppressWarnings("unchecked") public UUID[] getSubData() { - return raw.getUUIDList("subdata", Collections.emptyList()).toArray(new UUID[0]); + if (raw.contains("subdata")) { + ObjectMap subdata = new ObjectMap((Map) raw.getObject("subdata")); + LinkedList keys = new LinkedList(subdata.getKeys()); + LinkedList channels = new LinkedList(); + Collections.sort(keys); + for (Integer channel : keys) channels.add(subdata.getUUID(channel)); + return channels.toArray(new UUID[0]); + } else { + return new UUID[0]; + } } /** diff --git a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Network/API/Proxy.java b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Network/API/Proxy.java index 901c079c..fd1f991e 100644 --- a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Network/API/Proxy.java +++ b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Network/API/Proxy.java @@ -46,8 +46,14 @@ public class Proxy { * * @return SubData Client Channel ID Array */ + @SuppressWarnings("unchecked") public UUID[] getSubData() { - return raw.getUUIDList("subdata", Collections.emptyList()).toArray(new UUID[0]); + ObjectMap subdata = new ObjectMap((Map) raw.getObject("subdata")); + LinkedList keys = new LinkedList(subdata.getKeys()); + LinkedList channels = new LinkedList(); + Collections.sort(keys); + for (Integer channel : keys) channels.add(subdata.getUUID(channel)); + return channels.toArray(new UUID[0]); } /** diff --git a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Network/API/Server.java b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Network/API/Server.java index a9ddee3d..5faac936 100644 --- a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Network/API/Server.java +++ b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Network/API/Server.java @@ -45,8 +45,14 @@ public class Server { * * @return SubData Client Channel ID Array */ + @SuppressWarnings("unchecked") public UUID[] getSubData() { - return raw.getUUIDList("subdata", Collections.emptyList()).toArray(new UUID[0]); + ObjectMap subdata = new ObjectMap((Map) raw.getObject("subdata")); + LinkedList keys = new LinkedList(subdata.getKeys()); + LinkedList channels = new LinkedList(); + Collections.sort(keys); + for (Integer channel : keys) channels.add(subdata.getUUID(channel)); + return channels.toArray(new UUID[0]); } /** diff --git a/SubServers.Host/pom.xml b/SubServers.Host/pom.xml index 08d9b450..46c1aeca 100644 --- a/SubServers.Host/pom.xml +++ b/SubServers.Host/pom.xml @@ -20,13 +20,13 @@ net.ME1312.Galaxi GalaxiEngine - 19w20a + 19w20b compile net.ME1312.SubData Client - 19w20f + 19w20g compile diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/API/Host.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/API/Host.java index bc1695e3..62d0172a 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/API/Host.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/API/Host.java @@ -60,8 +60,18 @@ public class Host { * * @return SubData Client Channel ID Array (may be empty if unsupported) */ + @SuppressWarnings("unchecked") public UUID[] getSubData() { - return raw.getUUIDList("subdata", Collections.emptyList()).toArray(new UUID[0]); + if (raw.contains("subdata")) { + ObjectMap subdata = new ObjectMap((Map) raw.getObject("subdata")); + LinkedList keys = new LinkedList(subdata.getKeys()); + LinkedList channels = new LinkedList(); + Collections.sort(keys); + for (Integer channel : keys) channels.add(subdata.getUUID(channel)); + return channels.toArray(new UUID[0]); + } else { + return new UUID[0]; + } } /** diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/API/Proxy.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/API/Proxy.java index 38ecd80e..5dfdb29c 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/API/Proxy.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/API/Proxy.java @@ -46,8 +46,14 @@ public class Proxy { * * @return SubData Client Channel ID Array */ + @SuppressWarnings("unchecked") public UUID[] getSubData() { - return raw.getUUIDList("subdata", Collections.emptyList()).toArray(new UUID[0]); + ObjectMap subdata = new ObjectMap((Map) raw.getObject("subdata")); + LinkedList keys = new LinkedList(subdata.getKeys()); + LinkedList channels = new LinkedList(); + Collections.sort(keys); + for (Integer channel : keys) channels.add(subdata.getUUID(channel)); + return channels.toArray(new UUID[0]); } /** diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/API/Server.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/API/Server.java index 3b8dd770..2989c663 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/API/Server.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/API/Server.java @@ -45,8 +45,14 @@ public class Server { * * @return SubData Client Channel ID Array */ + @SuppressWarnings("unchecked") public UUID[] getSubData() { - return raw.getUUIDList("subdata", Collections.emptyList()).toArray(new UUID[0]); + ObjectMap subdata = new ObjectMap((Map) raw.getObject("subdata")); + LinkedList keys = new LinkedList(subdata.getKeys()); + LinkedList channels = new LinkedList(); + Collections.sort(keys); + for (Integer channel : keys) channels.add(subdata.getUUID(channel)); + return channels.toArray(new UUID[0]); } /** diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketLinkExHost.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketLinkExHost.java index 095c41a7..cc7cd3b7 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketLinkExHost.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketLinkExHost.java @@ -4,6 +4,7 @@ import net.ME1312.Galaxi.Engine.GalaxiEngine; import net.ME1312.Galaxi.Library.Map.ObjectMap; import net.ME1312.Galaxi.Library.Util; import net.ME1312.Galaxi.Library.Version.Version; +import net.ME1312.SubData.Client.Library.DebugUtil; import net.ME1312.SubData.Client.Protocol.Initial.InitialPacket; import net.ME1312.SubData.Client.Protocol.PacketObjectIn; import net.ME1312.SubData.Client.Protocol.PacketObjectOut; @@ -57,7 +58,8 @@ public class PacketLinkExHost implements InitialPacket, PacketObjectIn, if (data.getInt(0x0001) == 0) { setReady(client, true); } else { - log.info("Could not link name with host" + ((data.contains(0x0002))?": "+data.getRawString(0x0002):'.')); + log.severe("Could not link name with host" + ((data.contains(0x0002))?": "+data.getRawString(0x0002):'.')); + DebugUtil.logException(new IllegalStateException(), log); GalaxiEngine.getInstance().stop(); } } diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/SubCommand.java b/SubServers.Host/src/net/ME1312/SubServers/Host/SubCommand.java index 76e691e5..e7394bfe 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/SubCommand.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/SubCommand.java @@ -16,8 +16,8 @@ import net.ME1312.SubServers.Host.Library.TextColor; import net.ME1312.SubServers.Host.Network.API.*; import net.ME1312.SubServers.Host.Network.Packet.*; -import java.lang.reflect.Field; import java.util.*; +import java.util.List; import java.util.concurrent.TimeUnit; /** @@ -30,6 +30,14 @@ public class SubCommand { private static TreeMap serverCache = new TreeMap(); private static long cacheDate = 0; + private static boolean canRun() { + if (SubAPI.getInstance().getSubDataNetwork()[0] == null) { + throw new IllegalStateException("SubData is not connected"); + } else { + return true; + } + } + private SubCommand() {} @SuppressWarnings("unchecked") protected static void load(ExHost host) { @@ -37,18 +45,20 @@ public class SubCommand { new Command(host.info) { @Override public void command(CommandSender sender, String handle, String[] args) { - if (args.length > 0) { - int i = 0; - String str = args[0]; - if (args.length > 1) { - do { - i++; - str = str + " " + args[i].replace(" ", "\\ "); - } while ((i + 1) != args.length); + if (canRun()) { + if (args.length > 0) { + int i = 0; + String str = args[0]; + if (args.length > 1) { + do { + i++; + str = str + " " + args[i].replace(" ", "\\ "); + } while ((i + 1) != args.length); + } + GalaxiEngine.getInstance().getConsoleReader().runCommand(sender, str); + } else { + sender.sendMessage("Usage: /" + handle + " [Args...]"); } - GalaxiEngine.getInstance().getConsoleReader().runCommand(sender, str); - } else { - sender.sendMessage("Usage: /" + handle + " [Args...]"); } } }.autocomplete((sender, handle, args) -> { @@ -91,7 +101,7 @@ public class SubCommand { new Command(host.info) { @Override public void command(CommandSender sender, String handle, String[] args) { - host.api.getGroups(groups -> host.api.getHosts(hosts -> host.api.getServers(servers -> host.api.getMasterProxy(proxymaster -> host.api.getProxies(proxies -> { + if (canRun()) host.api.getGroups(groups -> host.api.getHosts(hosts -> host.api.getServers(servers -> host.api.getMasterProxy(proxymaster -> host.api.getProxies(proxies -> { int i = 0; boolean sent = false; String div = TextColor.RESET + ", "; @@ -196,125 +206,127 @@ public class SubCommand { new Command(host.info) { @Override public void command(CommandSender sender, String handle, String[] args) { - if (args.length > 0) { - String type = (args.length > 1)?args[0]:null; - String name = args[(type != null)?1:0]; - - Runnable getServer = () -> host.api.getServer(name, server -> { - if (server != null) { - sender.sendMessage("SubServers > Info on " + ((server instanceof SubServer)?"Sub":"") + "Server: " + TextColor.WHITE + server.getDisplayName()); - if (!server.getName().equals(server.getDisplayName())) sender.sendMessage(" -> System Name: " + TextColor.WHITE + server.getName()); - if (server instanceof SubServer) { - sender.sendMessage(" -> Enabled: " + ((((SubServer) server).isEnabled())?TextColor.GREEN+"yes":TextColor.RED+"no")); - if (!((SubServer) server).isEditable()) sender.sendMessage(" -> Editable: " + TextColor.RED + "no"); - sender.sendMessage(" -> Host: " + TextColor.WHITE + ((SubServer) server).getHost()); - } - if (server.getGroups().size() > 0) sender.sendMessage(" -> Group" + ((server.getGroups().size() > 1)?"s:":": " + TextColor.WHITE + server.getGroups().get(0))); - if (server.getGroups().size() > 1) for (String group : server.getGroups()) sender.sendMessage(" - " + TextColor.WHITE + group); - sender.sendMessage(" -> Address: " + TextColor.WHITE + server.getAddress().getAddress().getHostAddress()+':'+server.getAddress().getPort()); - if (server instanceof SubServer) sender.sendMessage(" -> Running: " + ((((SubServer) server).isRunning())?TextColor.GREEN+"yes":TextColor.RED+"no")); - if (!(server instanceof SubServer) || ((SubServer) server).isRunning()) { - sender.sendMessage(" -> Connected: " + ((server.getSubData()[0] != null)?TextColor.GREEN+"yes"+((server.getSubData().length > 1)?TextColor.AQUA+" +"+(server.getSubData().length-1)+" subchannel"+((server.getSubData().length == 2)?"":"s"):""):TextColor.RED+"no")); - sender.sendMessage(" -> Players: " + TextColor.AQUA + server.getPlayers().size() + " online"); - } - sender.sendMessage(" -> MOTD: " + TextColor.WHITE + TextColor.stripColor(server.getMotd())); - if (server instanceof SubServer && ((SubServer) server).getStopAction() != SubServer.StopAction.NONE) sender.sendMessage(" -> Stop Action: " + TextColor.WHITE + ((SubServer) server).getStopAction().toString()); - sender.sendMessage(" -> Signature: " + TextColor.AQUA + server.getSignature()); - if (server instanceof SubServer) sender.sendMessage(" -> Logging: " + ((((SubServer) server).isLogging())?TextColor.GREEN+"yes":TextColor.RED+"no")); - sender.sendMessage(" -> Restricted: " + ((server.isRestricted())?TextColor.GREEN+"yes":TextColor.RED+"no")); - if (server instanceof SubServer && ((SubServer) server).getIncompatibilities().size() > 0) { - List current = new ArrayList(); - for (String other : ((SubServer) server).getCurrentIncompatibilities()) current.add(other.toLowerCase()); - sender.sendMessage(" -> Incompatibilities:"); - for (String other : ((SubServer) server).getIncompatibilities()) sender.sendMessage(" - " + ((current.contains(other.toLowerCase()))?TextColor.WHITE:TextColor.GRAY) + other); - } - sender.sendMessage(" -> Hidden: " + ((server.isHidden())?TextColor.GREEN+"yes":TextColor.RED+"no")); - } else { - if (type == null) { - sender.sendMessage("SubServers > There is no object with that name"); + if (canRun()) { + if (args.length > 0) { + String type = (args.length > 1)?args[0]:null; + String name = args[(type != null)?1:0]; + + Runnable getServer = () -> host.api.getServer(name, server -> { + if (server != null) { + sender.sendMessage("SubServers > Info on " + ((server instanceof SubServer)?"Sub":"") + "Server: " + TextColor.WHITE + server.getDisplayName()); + if (!server.getName().equals(server.getDisplayName())) sender.sendMessage(" -> System Name: " + TextColor.WHITE + server.getName()); + if (server instanceof SubServer) { + sender.sendMessage(" -> Enabled: " + ((((SubServer) server).isEnabled())?TextColor.GREEN+"yes":TextColor.RED+"no")); + if (!((SubServer) server).isEditable()) sender.sendMessage(" -> Editable: " + TextColor.RED + "no"); + sender.sendMessage(" -> Host: " + TextColor.WHITE + ((SubServer) server).getHost()); + } + if (server.getGroups().size() > 0) sender.sendMessage(" -> Group" + ((server.getGroups().size() > 1)?"s:":": " + TextColor.WHITE + server.getGroups().get(0))); + if (server.getGroups().size() > 1) for (String group : server.getGroups()) sender.sendMessage(" - " + TextColor.WHITE + group); + sender.sendMessage(" -> Address: " + TextColor.WHITE + server.getAddress().getAddress().getHostAddress()+':'+server.getAddress().getPort()); + if (server instanceof SubServer) sender.sendMessage(" -> Running: " + ((((SubServer) server).isRunning())?TextColor.GREEN+"yes":TextColor.RED+"no")); + if (!(server instanceof SubServer) || ((SubServer) server).isRunning()) { + sender.sendMessage(" -> Connected: " + ((server.getSubData()[0] != null)?TextColor.GREEN+"yes"+((server.getSubData().length > 1)?TextColor.AQUA+" +"+(server.getSubData().length-1)+" subchannel"+((server.getSubData().length == 2)?"":"s"):""):TextColor.RED+"no")); + sender.sendMessage(" -> Players: " + TextColor.AQUA + server.getPlayers().size() + " online"); + } + sender.sendMessage(" -> MOTD: " + TextColor.WHITE + TextColor.stripColor(server.getMotd())); + if (server instanceof SubServer && ((SubServer) server).getStopAction() != SubServer.StopAction.NONE) sender.sendMessage(" -> Stop Action: " + TextColor.WHITE + ((SubServer) server).getStopAction().toString()); + sender.sendMessage(" -> Signature: " + TextColor.AQUA + server.getSignature()); + if (server instanceof SubServer) sender.sendMessage(" -> Logging: " + ((((SubServer) server).isLogging())?TextColor.GREEN+"yes":TextColor.RED+"no")); + sender.sendMessage(" -> Restricted: " + ((server.isRestricted())?TextColor.GREEN+"yes":TextColor.RED+"no")); + if (server instanceof SubServer && ((SubServer) server).getIncompatibilities().size() > 0) { + List current = new ArrayList(); + for (String other : ((SubServer) server).getCurrentIncompatibilities()) current.add(other.toLowerCase()); + sender.sendMessage(" -> Incompatibilities:"); + for (String other : ((SubServer) server).getIncompatibilities()) sender.sendMessage(" - " + ((current.contains(other.toLowerCase()))?TextColor.WHITE:TextColor.GRAY) + other); + } + sender.sendMessage(" -> Hidden: " + ((server.isHidden())?TextColor.GREEN+"yes":TextColor.RED+"no")); } else { - sender.sendMessage("SubServers > There is no server with that name"); + if (type == null) { + sender.sendMessage("SubServers > There is no object with that name"); + } else { + sender.sendMessage("SubServers > There is no server with that name"); + } + } + }); + Runnable getGroup = () -> host.api.getGroup(name, group -> { + if (group != null) { + sender.sendMessage("SubServers > Info on Group: " + TextColor.WHITE + name); + sender.sendMessage(" -> Servers: " + ((group.size() <= 0)?TextColor.GRAY + "(none)":TextColor.AQUA.toString() + group.size())); + for (Server server : group) sender.sendMessage(" - " + TextColor.WHITE + server.getDisplayName() + ((server.getName().equals(server.getDisplayName()))?"":" ("+server.getName()+')')); + } else { + if (type == null) { + getServer.run(); + } else { + sender.sendMessage("SubServers > There is no group with that name"); + } + } + }); + Runnable getHost = () -> host.api.getHost(name, host -> { + if (host != null) { + sender.sendMessage("SubServers > Info on Host: " + TextColor.WHITE + host.getDisplayName()); + if (!host.getName().equals(host.getDisplayName())) sender.sendMessage(" -> System Name: " + TextColor.WHITE + host.getName()); + sender.sendMessage(" -> Available: " + ((host.isAvailable())?TextColor.GREEN+"yes":TextColor.RED+"no")); + sender.sendMessage(" -> Enabled: " + ((host.isEnabled())?TextColor.GREEN+"yes":TextColor.RED+"no")); + sender.sendMessage(" -> Address: " + TextColor.WHITE + host.getAddress().getHostAddress()); + if (host.getSubData().length > 0) sender.sendMessage(" -> Connected: " + ((host.getSubData()[0] != null)?TextColor.GREEN+"yes"+((host.getSubData().length > 1)?TextColor.AQUA+" +"+(host.getSubData().length-1)+" subchannel"+((host.getSubData().length == 2)?"":"s"):""):TextColor.RED+"no")); + sender.sendMessage(" -> SubServers: " + ((host.getSubServers().keySet().size() <= 0)?TextColor.GRAY + "(none)":TextColor.AQUA.toString() + host.getSubServers().keySet().size())); + for (SubServer subserver : host.getSubServers().values()) sender.sendMessage(" - " + ((subserver.isEnabled())?TextColor.WHITE:TextColor.GRAY) + subserver.getDisplayName() + ((subserver.getName().equals(subserver.getDisplayName()))?"":" ("+subserver.getName()+')')); + sender.sendMessage(" -> Templates: " + ((host.getCreator().getTemplates().keySet().size() <= 0)?TextColor.GRAY + "(none)":TextColor.AQUA.toString() + host.getCreator().getTemplates().keySet().size())); + for (SubCreator.ServerTemplate template : host.getCreator().getTemplates().values()) sender.sendMessage(" - " + ((template.isEnabled())?TextColor.WHITE:TextColor.GRAY) + template.getDisplayName() + ((template.getName().equals(template.getDisplayName()))?"":" ("+template.getName()+')')); + sender.sendMessage(" -> Signature: " + TextColor.AQUA + host.getSignature()); + } else { + if (type == null) { + getGroup.run(); + } else { + sender.sendMessage("SubServers > There is no host with that name"); + } + } + }); + Runnable getProxy = () -> host.api.getProxy(name, proxy -> { + if (proxy != null) { + sender.sendMessage("SubServers > Info on Proxy: " + TextColor.WHITE + proxy.getDisplayName()); + if (!proxy.getName().equals(proxy.getDisplayName())) sender.sendMessage(" -> System Name: " + TextColor.WHITE + proxy.getName()); + sender.sendMessage(" -> Connected: " + ((proxy.getSubData()[0] != null)?TextColor.GREEN+"yes"+((proxy.getSubData().length > 1)?TextColor.AQUA+" +"+(proxy.getSubData().length-1)+" subchannel"+((proxy.getSubData().length == 2)?"":"s"):""):TextColor.RED+"no")); + sender.sendMessage(" -> Redis: " + ((proxy.isRedis())?TextColor.GREEN:TextColor.RED+"un") + "available"); + if (proxy.isRedis()) sender.sendMessage(" -> Players: " + TextColor.AQUA + proxy.getPlayers().size() + " online"); + sender.sendMessage(" -> Signature: " + TextColor.AQUA + proxy.getSignature()); + } else { + if (type == null) { + getHost.run(); + } else { + sender.sendMessage("SubServers > There is no proxy with that name"); + } + } + }); + + if (type == null) { + getProxy.run(); + } else { + switch (type.toLowerCase()) { + case "p": + case "proxy": + getProxy.run(); + break; + case "h": + case "host": + getHost.run(); + break; + case "g": + case "group": + getGroup.run(); + break; + case "s": + case "server": + case "subserver": + getServer.run(); + break; + default: + sender.sendMessage("SubServers > There is no object type with that name"); } } - }); - Runnable getGroup = () -> host.api.getGroup(name, group -> { - if (group != null) { - sender.sendMessage("SubServers > Info on Group: " + TextColor.WHITE + name); - sender.sendMessage(" -> Servers: " + ((group.size() <= 0)?TextColor.GRAY + "(none)":TextColor.AQUA.toString() + group.size())); - for (Server server : group) sender.sendMessage(" - " + TextColor.WHITE + server.getDisplayName() + ((server.getName().equals(server.getDisplayName()))?"":" ("+server.getName()+')')); - } else { - if (type == null) { - getServer.run(); - } else { - sender.sendMessage("SubServers > There is no group with that name"); - } - } - }); - Runnable getHost = () -> host.api.getHost(name, host -> { - if (host != null) { - sender.sendMessage("SubServers > Info on Host: " + TextColor.WHITE + host.getDisplayName()); - if (!host.getName().equals(host.getDisplayName())) sender.sendMessage(" -> System Name: " + TextColor.WHITE + host.getName()); - sender.sendMessage(" -> Available: " + ((host.isAvailable())?TextColor.GREEN+"yes":TextColor.RED+"no")); - sender.sendMessage(" -> Enabled: " + ((host.isEnabled())?TextColor.GREEN+"yes":TextColor.RED+"no")); - sender.sendMessage(" -> Address: " + TextColor.WHITE + host.getAddress().getHostAddress()); - if (host.getSubData().length > 0) sender.sendMessage(" -> Connected: " + ((host.getSubData()[0] != null)?TextColor.GREEN+"yes"+((host.getSubData().length > 1)?TextColor.AQUA+" +"+(host.getSubData().length-1)+" subchannel"+((host.getSubData().length == 2)?"":"s"):""):TextColor.RED+"no")); - sender.sendMessage(" -> SubServers: " + ((host.getSubServers().keySet().size() <= 0)?TextColor.GRAY + "(none)":TextColor.AQUA.toString() + host.getSubServers().keySet().size())); - for (SubServer subserver : host.getSubServers().values()) sender.sendMessage(" - " + ((subserver.isEnabled())?TextColor.WHITE:TextColor.GRAY) + subserver.getDisplayName() + ((subserver.getName().equals(subserver.getDisplayName()))?"":" ("+subserver.getName()+')')); - sender.sendMessage(" -> Templates: " + ((host.getCreator().getTemplates().keySet().size() <= 0)?TextColor.GRAY + "(none)":TextColor.AQUA.toString() + host.getCreator().getTemplates().keySet().size())); - for (SubCreator.ServerTemplate template : host.getCreator().getTemplates().values()) sender.sendMessage(" - " + ((template.isEnabled())?TextColor.WHITE:TextColor.GRAY) + template.getDisplayName() + ((template.getName().equals(template.getDisplayName()))?"":" ("+template.getName()+')')); - sender.sendMessage(" -> Signature: " + TextColor.AQUA + host.getSignature()); - } else { - if (type == null) { - getGroup.run(); - } else { - sender.sendMessage("SubServers > There is no host with that name"); - } - } - }); - Runnable getProxy = () -> host.api.getProxy(name, proxy -> { - if (proxy != null) { - sender.sendMessage("SubServers > Info on Proxy: " + TextColor.WHITE + proxy.getDisplayName()); - if (!proxy.getName().equals(proxy.getDisplayName())) sender.sendMessage(" -> System Name: " + TextColor.WHITE + proxy.getName()); - sender.sendMessage(" -> Connected: " + ((proxy.getSubData()[0] != null)?TextColor.GREEN+"yes"+((proxy.getSubData().length > 1)?TextColor.AQUA+" +"+(proxy.getSubData().length-1)+" subchannel"+((proxy.getSubData().length == 2)?"":"s"):""):TextColor.RED+"no")); - sender.sendMessage(" -> Redis: " + ((proxy.isRedis())?TextColor.GREEN:TextColor.RED+"un") + "available"); - if (proxy.isRedis()) sender.sendMessage(" -> Players: " + TextColor.AQUA + proxy.getPlayers().size() + " online"); - sender.sendMessage(" -> Signature: " + TextColor.AQUA + proxy.getSignature()); - } else { - if (type == null) { - getHost.run(); - } else { - sender.sendMessage("SubServers > There is no proxy with that name"); - } - } - }); - - if (type == null) { - getProxy.run(); } else { - switch (type.toLowerCase()) { - case "p": - case "proxy": - getProxy.run(); - break; - case "h": - case "host": - getHost.run(); - break; - case "g": - case "group": - getGroup.run(); - break; - case "s": - case "server": - case "subserver": - getServer.run(); - break; - default: - sender.sendMessage("SubServers > There is no object type with that name"); - } + sender.sendMessage("SubServers > Usage: /" + handle + " [proxy|host|group|server] "); } - } else { - sender.sendMessage("SubServers > Usage: /" + handle + " [proxy|host|group|server] "); } } }.autocomplete((sender, handle, args) -> { @@ -434,38 +446,40 @@ public class SubCommand { new Command(host.info) { @Override public void command(CommandSender sender, String handle, String[] args) { - if (args.length > 0) { - ((SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0]).sendPacket(new PacketStartServer(null, args[0], data -> { - switch (data.getInt(0x0001)) { - case 3: - sender.sendMessage("There is no server with that name"); - break; - case 4: - sender.sendMessage("That Server is not a SubServer"); - break; - case 5: - sender.sendMessage("That SubServer's Host is not available"); - break; - case 6: - sender.sendMessage("That SubServer's Host is not enabled"); - break; - case 7: - sender.sendMessage("That SubServer is not enabled"); - break; - case 8: - sender.sendMessage("That SubServer is already running"); - break; - case 9: - sender.sendMessage("That SubServer cannot start while these server(s) are running:", data.getRawString(0x0002)); - break; - case 0: - case 1: - sender.sendMessage("Server was started successfully"); - break; - } - })); - } else { - sender.sendMessage("Usage: /" + handle + " "); + if (canRun()) { + if (args.length > 0) { + ((SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0]).sendPacket(new PacketStartServer(null, args[0], data -> { + switch (data.getInt(0x0001)) { + case 3: + sender.sendMessage("There is no server with that name"); + break; + case 4: + sender.sendMessage("That Server is not a SubServer"); + break; + case 5: + sender.sendMessage("That SubServer's Host is not available"); + break; + case 6: + sender.sendMessage("That SubServer's Host is not enabled"); + break; + case 7: + sender.sendMessage("That SubServer is not enabled"); + break; + case 8: + sender.sendMessage("That SubServer is already running"); + break; + case 9: + sender.sendMessage("That SubServer cannot start while these server(s) are running:", data.getRawString(0x0002)); + break; + case 0: + case 1: + sender.sendMessage("Server was started successfully"); + break; + } + })); + } else { + sender.sendMessage("Usage: /" + handle + " "); + } } } }.autocomplete(defaultCompletor = (sender, handle, args) -> { @@ -498,72 +512,74 @@ public class SubCommand { new Command(host.info) { @Override public void command(CommandSender sender, String handle, String[] args) { - if (args.length > 0) { - TimerTask starter = new TimerTask() { - @Override - public void run() { - ((SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0]).sendPacket(new PacketStartServer(null, args[0], data -> { - switch (data.getInt(0x0001)) { - case 3: - case 4: - sender.sendMessage("Could not restart server: That SubServer has disappeared"); - break; - case 5: - sender.sendMessage("Could not restart server: That SubServer's Host is no longer available"); - break; - case 6: - sender.sendMessage("Could not restart server: That SubServer's Host is no longer enabled"); - break; - case 7: - sender.sendMessage("Could not restart server: That SubServer is no longer enabled"); - break; - case 9: - sender.sendMessage("Could not restart server: That SubServer cannot start while these server(s) are running:", data.getRawString(0x0002)); - break; - case 8: - case 0: - case 1: - sender.sendMessage("Server was started successfully"); - break; - } - })); - } - }; - - final Container listening = new Container(true); - PacketInExRunEvent.callback("SubStoppedEvent", new Callback>() { - @Override - public void run(ObjectMap json) { - try { - if (listening.get()) if (!json.getString("server").equalsIgnoreCase(args[0])) { - PacketInExRunEvent.callback("SubStoppedEvent", this); - } else { - new Timer(SubAPI.getInstance().getAppInfo().getName() + "::Server_Restart_Command_Handler(" + args[0] + ')').schedule(starter, 100); - } - } catch (Exception e) {} - } - }); - - ((SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0]).sendPacket(new PacketStopServer(null, args[0], false, data -> { - if (data.getInt(0x0001) != 0) listening.set(false); - switch (data.getInt(0x0001)) { - case 3: - sender.sendMessage("There is no server with that name"); - break; - case 4: - sender.sendMessage("That Server is not a SubServer"); - break; - case 5: - starter.run(); - break; - case 0: - case 1: - sender.sendMessage("Server was stopped successfully"); - break; - } - })); - } else { - sender.sendMessage("Usage: /" + handle + " "); + if (canRun()) { + if (args.length > 0) { + TimerTask starter = new TimerTask() { + @Override + public void run() { + ((SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0]).sendPacket(new PacketStartServer(null, args[0], data -> { + switch (data.getInt(0x0001)) { + case 3: + case 4: + sender.sendMessage("Could not restart server: That SubServer has disappeared"); + break; + case 5: + sender.sendMessage("Could not restart server: That SubServer's Host is no longer available"); + break; + case 6: + sender.sendMessage("Could not restart server: That SubServer's Host is no longer enabled"); + break; + case 7: + sender.sendMessage("Could not restart server: That SubServer is no longer enabled"); + break; + case 9: + sender.sendMessage("Could not restart server: That SubServer cannot start while these server(s) are running:", data.getRawString(0x0002)); + break; + case 8: + case 0: + case 1: + sender.sendMessage("Server was started successfully"); + break; + } + })); + } + }; + + final Container listening = new Container(true); + PacketInExRunEvent.callback("SubStoppedEvent", new Callback>() { + @Override + public void run(ObjectMap json) { + try { + if (listening.get()) if (!json.getString("server").equalsIgnoreCase(args[0])) { + PacketInExRunEvent.callback("SubStoppedEvent", this); + } else { + new Timer(SubAPI.getInstance().getAppInfo().getName() + "::Server_Restart_Command_Handler(" + args[0] + ')').schedule(starter, 100); + } + } catch (Exception e) {} + } + }); + + ((SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0]).sendPacket(new PacketStopServer(null, args[0], false, data -> { + if (data.getInt(0x0001) != 0) listening.set(false); + switch (data.getInt(0x0001)) { + case 3: + sender.sendMessage("There is no server with that name"); + break; + case 4: + sender.sendMessage("That Server is not a SubServer"); + break; + case 5: + starter.run(); + break; + case 0: + case 1: + sender.sendMessage("Server was stopped successfully"); + break; + } + })); + } else { + sender.sendMessage("Usage: /" + handle + " "); + } } } }.autocomplete(defaultCompletor).usage("").description("Restarts a SubServer").help( @@ -580,26 +596,28 @@ public class SubCommand { new Command(host.info) { @Override public void command(CommandSender sender, String handle, String[] args) { - if (args.length > 0) { - ((SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0]).sendPacket(new PacketStopServer(null, args[0], false, data -> { - switch (data.getInt(0x0001)) { - case 3: - sender.sendMessage("There is no server with that name"); - break; - case 4: - sender.sendMessage("That Server is not a SubServer"); - break; - case 5: - sender.sendMessage("That SubServer is not running"); - break; - case 0: - case 1: - sender.sendMessage("Server was stopped successfully"); - break; - } - })); - } else { - sender.sendMessage("Usage: /" + handle + " "); + if (canRun()) { + if (args.length > 0) { + ((SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0]).sendPacket(new PacketStopServer(null, args[0], false, data -> { + switch (data.getInt(0x0001)) { + case 3: + sender.sendMessage("There is no server with that name"); + break; + case 4: + sender.sendMessage("That Server is not a SubServer"); + break; + case 5: + sender.sendMessage("That SubServer is not running"); + break; + case 0: + case 1: + sender.sendMessage("Server was stopped successfully"); + break; + } + })); + } else { + sender.sendMessage("Usage: /" + handle + " "); + } } } }.autocomplete(defaultCompletor).usage("").description("Stops a SubServer").help( @@ -616,26 +634,28 @@ public class SubCommand { new Command(host.info) { @Override public void command(CommandSender sender, String handle, String[] args) { - if (args.length > 0) { - ((SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0]).sendPacket(new PacketStopServer(null, args[0], true, data -> { - switch (data.getInt(0x0001)) { - case 3: - sender.sendMessage("There is no server with that name"); - break; - case 4: - sender.sendMessage("That Server is not a SubServer"); - break; - case 5: - sender.sendMessage("That SubServer is not running"); - break; - case 0: - case 1: - sender.sendMessage("Server was terminated successfully"); - break; - } - })); - } else { - sender.sendMessage("Usage: /" + handle + " "); + if (canRun()) { + if (args.length > 0) { + ((SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0]).sendPacket(new PacketStopServer(null, args[0], true, data -> { + switch (data.getInt(0x0001)) { + case 3: + sender.sendMessage("There is no server with that name"); + break; + case 4: + sender.sendMessage("That Server is not a SubServer"); + break; + case 5: + sender.sendMessage("That SubServer is not running"); + break; + case 0: + case 1: + sender.sendMessage("Server was terminated successfully"); + break; + } + })); + } else { + sender.sendMessage("Usage: /" + handle + " "); + } } } }.autocomplete(defaultCompletor).usage("").description("Terminates a SubServer").help( @@ -652,35 +672,37 @@ public class SubCommand { new Command(host.info) { @Override public void command(CommandSender sender, String handle, String[] args) { - if (args.length > 1) { - int i = 1; - String str = args[1]; - if (args.length > 2) { - do { - i++; - str = str + " " + args[i]; - } while ((i + 1) != args.length); - } - final String cmd = str; - ((SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0]).sendPacket(new PacketCommandServer(null, args[0], cmd, data -> { - switch (data.getInt(0x0001)) { - case 3: - sender.sendMessage("There is no server with that name"); - break; - case 4: - sender.sendMessage("That Server is not a SubServer"); - break; - case 5: - sender.sendMessage("That SubServer is not running"); - break; - case 0: - case 1: - sender.sendMessage("Command was sent successfully"); - break; + if (canRun()) { + if (args.length > 1) { + int i = 1; + String str = args[1]; + if (args.length > 2) { + do { + i++; + str = str + " " + args[i]; + } while ((i + 1) != args.length); } - })); - } else { - sender.sendMessage("Usage: /" + handle + " [Args...]"); + final String cmd = str; + ((SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0]).sendPacket(new PacketCommandServer(null, args[0], cmd, data -> { + switch (data.getInt(0x0001)) { + case 3: + sender.sendMessage("There is no server with that name"); + break; + case 4: + sender.sendMessage("That Server is not a SubServer"); + break; + case 5: + sender.sendMessage("That SubServer is not running"); + break; + case 0: + case 1: + sender.sendMessage("Command was sent successfully"); + break; + } + })); + } else { + sender.sendMessage("Usage: /" + handle + " [Args...]"); + } } } }.autocomplete(defaultCompletor).usage("", "", "[Args...]").description("Sends a Command to a SubServer").help( @@ -699,47 +721,49 @@ public class SubCommand { new Command(host.info) { @Override public void command(CommandSender sender, String handle, String[] args) { - if (args.length > 3) { - if (args.length > 4 && Util.isException(() -> Integer.parseInt(args[4]))) { - sender.sendMessage("Invalid Port Number"); + if (canRun()) { + if (args.length > 3) { + if (args.length > 4 && Util.isException(() -> Integer.parseInt(args[4]))) { + sender.sendMessage("Invalid Port Number"); + } else { + ((SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0]).sendPacket(new PacketCreateServer(null, args[0], args[1], args[2], new Version(args[3]), (args.length > 4)?Integer.parseInt(args[4]):null, data -> { + switch (data.getInt(0x0001)) { + case 3: + sender.sendMessage("Server names cannot use spaces"); + case 4: + sender.sendMessage("There is already a SubServer with that name"); + break; + case 5: + sender.sendMessage("There is no host with that name"); + break; + case 6: + sender.sendMessage("That Host is not available"); + break; + case 7: + sender.sendMessage("That Host is not enabled"); + break; + case 8: + sender.sendMessage("There is no template with that name"); + break; + case 9: + sender.sendMessage("That Template is not enabled"); + break; + case 10: + sender.sendMessage("That Template requires a Minecraft Version to be specified"); + break; + case 11: + sender.sendMessage("Invalid Port Number"); + break; + case 0: + case 1: + sender.sendMessage("Launching SubCreator..."); + break; + } + })); + } } else { - ((SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0]).sendPacket(new PacketCreateServer(null, args[0], args[1], args[2], new Version(args[3]), (args.length > 4)?Integer.parseInt(args[4]):null, data -> { - switch (data.getInt(0x0001)) { - case 3: - sender.sendMessage("Server names cannot use spaces"); - case 4: - sender.sendMessage("There is already a SubServer with that name"); - break; - case 5: - sender.sendMessage("There is no host with that name"); - break; - case 6: - sender.sendMessage("That Host is not available"); - break; - case 7: - sender.sendMessage("That Host is not enabled"); - break; - case 8: - sender.sendMessage("There is no template with that name"); - break; - case 9: - sender.sendMessage("That Template is not enabled"); - break; - case 10: - sender.sendMessage("That Template requires a Minecraft Version to be specified"); - break; - case 11: - sender.sendMessage("Invalid Port Number"); - break; - case 0: - case 1: - sender.sendMessage("Launching SubCreator..."); - break; - } - })); + sender.sendMessage("Usage: /" + handle + "