From 3dab84c0ebadba34739cad28105848ba6ce11a34 Mon Sep 17 00:00:00 2001 From: ME1312 Date: Thu, 18 Apr 2019 10:02:09 -0400 Subject: [PATCH] Begin rewrite for SubData 2 --- SubServers.Bungee/pom.xml | 14 +- .../Bungee/Event/SubAddHostEvent.java | 3 +- .../Bungee/Event/SubAddProxyEvent.java | 2 +- .../Bungee/Event/SubAddServerEvent.java | 2 +- .../Bungee/Event/SubCreateEvent.java | 6 +- .../Bungee/Event/SubEditServerEvent.java | 16 +- .../Bungee/Event/SubNetworkConnectEvent.java | 27 +- .../Event/SubNetworkDisconnectEvent.java | 31 +- .../Bungee/Event/SubRemoveHostEvent.java | 3 +- .../Bungee/Event/SubRemoveProxyEvent.java | 2 +- .../Bungee/Event/SubRemoveServerEvent.java | 2 +- .../Bungee/Event/SubSendCommandEvent.java | 2 +- .../Bungee/Event/SubStartEvent.java | 2 +- .../SubServers/Bungee/Event/SubStopEvent.java | 2 +- .../Bungee/Event/SubStoppedEvent.java | 2 +- .../SubServers/Bungee/Host/Executable.java | 3 +- .../Bungee/Host/External/ExternalHost.java | 140 +- .../Host/External/ExternalSubCreator.java | 41 +- .../Host/External/ExternalSubLogger.java | 5 +- .../Host/External/ExternalSubServer.java | 110 +- .../ME1312/SubServers/Bungee/Host/Host.java | 84 +- .../Bungee/Host/Internal/InternalHost.java | 116 +- .../Host/Internal/InternalSubCreator.java | 98 +- .../Host/Internal/InternalSubLogger.java | 6 +- .../Host/Internal/InternalSubServer.java | 110 +- .../ME1312/SubServers/Bungee/Host/Proxy.java | 46 +- .../ME1312/SubServers/Bungee/Host/Server.java | 9 +- .../Bungee/Host/ServerContainer.java | 54 +- .../SubServers/Bungee/Host/SubCreator.java | 35 +- .../SubServers/Bungee/Host/SubServer.java | 15 +- .../Bungee/Host/SubServerContainer.java | 15 +- .../Bungee/Host/SubServerController.java | 15 +- .../net/ME1312/SubServers/Bungee/Launch.java | 6 +- .../SubServers/Bungee/Library/Callback.java | 13 - .../Library/Compatibility/CommandX.java | 2 +- .../Bungee/Library/Compatibility/JNA.java | 2 +- .../Compatibility/mc1_13/CommandX.java | 2 +- .../Bungee/Library/Config/YAMLConfig.java | 110 -- .../Bungee/Library/Config/YAMLSection.java | 1141 ---------------- .../Bungee/Library/Config/YAMLValue.java | 397 ------ .../SubServers/Bungee/Library/Container.java | 50 - .../Bungee/Library/ExtraDataHandler.java | 47 - .../Bungee/Library/Files/config.yml | 6 +- .../Bungee/Library/NamedContainer.java | 52 - .../Bungee/Library/UniversalFile.java | 70 - .../SubServers/Bungee/Library/Util.java | 476 ------- .../Bungee/Library/Version/Version.java | 411 ------ .../Library/Version/VersionTokenizer.java | 64 - .../Bungee/Library/Version/VersionType.java | 23 - .../SubServers/Bungee/Network/Cipher.java | 34 - .../SubServers/Bungee/Network/Client.java | 225 ---- .../Bungee/Network/ClientHandler.java | 21 - .../Bungee/Network/Encryption/AES.java | 333 ----- .../Network/Packet/PacketAuthorization.java | 68 - .../Network/Packet/PacketCommandServer.java | 77 +- .../Network/Packet/PacketCreateServer.java | 94 +- .../Packet/PacketDownloadGroupInfo.java | 50 +- .../Packet/PacketDownloadHostInfo.java | 44 +- .../Network/Packet/PacketDownloadLang.java | 36 +- .../Packet/PacketDownloadNetworkList.java | 70 - .../Packet/PacketDownloadPlatformInfo.java | 71 +- .../Packet/PacketDownloadPlayerList.java | 45 +- .../Packet/PacketDownloadProxyInfo.java | 48 +- .../Packet/PacketDownloadServerInfo.java | 46 +- .../Network/Packet/PacketExAddServer.java | 59 +- .../Network/Packet/PacketExConfigureHost.java | 55 +- .../Network/Packet/PacketExCreateServer.java | 62 +- .../Network/Packet/PacketExDeleteServer.java | 52 +- .../Packet/PacketExDownloadTemplates.java | 56 + .../Network/Packet/PacketExRemoveServer.java | 43 +- .../Network/Packet/PacketExUpdateServer.java | 37 +- .../Network/Packet/PacketInExLogMessage.java | 23 +- .../Packet/PacketInExRequestQueue.java | 17 +- .../Bungee/Network/Packet/PacketInReload.java | 39 + .../Network/Packet/PacketLinkExHost.java | 48 +- .../Network/Packet/PacketLinkProxy.java | 47 +- .../Network/Packet/PacketLinkServer.java | 58 +- .../Network/Packet/PacketOutExReload.java | 38 + .../Network/Packet/PacketOutExReset.java | 38 + ...RunEvent.java => PacketOutExRunEvent.java} | 95 +- .../Packet/PacketOutExUpdateWhitelist.java | 26 +- .../Network/Packet/PacketOutReload.java | 37 - .../Bungee/Network/Packet/PacketOutReset.java | 37 - .../Network/Packet/PacketRestartServer.java | 82 +- .../Network/Packet/PacketStartServer.java | 95 +- .../Network/Packet/PacketStopServer.java | 89 +- .../SubServers/Bungee/Network/PacketIn.java | 34 - .../SubServers/Bungee/Network/PacketOut.java | 23 - .../Bungee/Network/SubDataServer.java | 486 ------- .../Bungee/Network/SubProtocol.java | 162 +++ .../net/ME1312/SubServers/Bungee/SubAPI.java | 14 +- .../ME1312/SubServers/Bungee/SubCommand.java | 30 +- .../ME1312/SubServers/Bungee/SubPlugin.java | 321 ++--- SubServers.Client/Bukkit/pom.xml | 28 +- .../Client/Bukkit/Event/SubAddHostEvent.java | 2 +- .../Client/Bukkit/Event/SubAddProxyEvent.java | 2 +- .../Bukkit/Event/SubAddServerEvent.java | 2 +- .../Client/Bukkit/Event/SubCreateEvent.java | 7 +- .../Bukkit/Event/SubEditServerEvent.java | 16 +- .../Bukkit/Event/SubNetworkConnectEvent.java | 4 +- .../Event/SubNetworkDisconnectEvent.java | 33 + .../Bukkit/Event/SubRemoveHostEvent.java | 2 +- .../Bukkit/Event/SubRemoveProxyEvent.java | 2 +- .../Bukkit/Event/SubRemoveServerEvent.java | 2 +- .../Bukkit/Event/SubSendCommandEvent.java | 2 +- .../Client/Bukkit/Event/SubStartEvent.java | 2 +- .../Client/Bukkit/Event/SubStopEvent.java | 2 +- .../Client/Bukkit/Event/SubStoppedEvent.java | 2 +- .../Bukkit/Graphic/DefaultUIHandler.java | 29 +- .../Bukkit/Graphic/DefaultUIRenderer.java | 52 +- .../Client/Bukkit/Graphic/UIRenderer.java | 12 +- .../Client/Bukkit/Library/Callback.java | 13 - .../Library/Compatibility/BungeeChat.java | 14 +- .../Bukkit/Library/Config/YAMLConfig.java | 110 -- .../Bukkit/Library/Config/YAMLSection.java | 1150 ----------------- .../Bukkit/Library/Config/YAMLValue.java | 400 ------ .../Client/Bukkit/Library/Container.java | 50 - .../Bukkit/Library/ExtraDataHandler.java | 47 - .../Client/Bukkit/Library/NamedContainer.java | 52 - .../Client/Bukkit/Library/UniversalFile.java | 70 - .../Client/Bukkit/Library/Util.java | 400 ------ .../Bukkit/Library/Version/Version.java | 411 ------ .../Library/Version/VersionTokenizer.java | 64 - .../Bukkit/Library/Version/VersionType.java | 23 - .../Client/Bukkit/Network/API/Host.java | 47 +- .../Client/Bukkit/Network/API/Proxy.java | 47 +- .../Client/Bukkit/Network/API/Server.java | 33 +- .../Client/Bukkit/Network/API/SubCreator.java | 43 +- .../Client/Bukkit/Network/API/SubServer.java | 28 +- .../Client/Bukkit/Network/Cipher.java | 34 - .../Client/Bukkit/Network/Encryption/AES.java | 332 ----- .../Network/Packet/PacketAuthorization.java | 49 - .../Network/Packet/PacketCommandServer.java | 46 +- .../Network/Packet/PacketCreateServer.java | 97 +- .../Packet/PacketDownloadGroupInfo.java | 44 +- .../Packet/PacketDownloadHostInfo.java | 51 +- .../Network/Packet/PacketDownloadLang.java | 26 +- .../Packet/PacketDownloadNetworkList.java | 57 - .../Packet/PacketDownloadPlatformInfo.java | 42 +- .../Packet/PacketDownloadPlayerList.java | 62 +- .../Packet/PacketDownloadProxyInfo.java | 50 +- .../Packet/PacketDownloadServerInfo.java | 44 +- .../Network/Packet/PacketInExReload.java | 40 + .../Network/Packet/PacketInExReset.java | 25 + ...nRunEvent.java => PacketInExRunEvent.java} | 92 +- .../Bukkit/Network/Packet/PacketInReload.java | 39 - .../Bukkit/Network/Packet/PacketInReset.java | 24 - .../Network/Packet/PacketLinkServer.java | 56 +- .../Network/Packet/PacketRestartServer.java | 44 +- .../Network/Packet/PacketStartServer.java | 44 +- .../Network/Packet/PacketStopServer.java | 45 +- .../Client/Bukkit/Network/PacketIn.java | 33 - .../Client/Bukkit/Network/PacketOut.java | 23 - .../Client/Bukkit/Network/SubDataClient.java | 453 ------- .../Client/Bukkit/Network/SubProtocol.java | 129 ++ .../SubServers/Client/Bukkit/SubAPI.java | 87 +- .../SubServers/Client/Bukkit/SubCommand.java | 84 +- .../SubServers/Client/Bukkit/SubPlugin.java | 91 +- SubServers.Client/Bukkit/src/plugin.yml | 6 +- .../SubServers/Client/Sponge/SubCommand.java | 3 +- .../SubServers/Client/Sponge/SubPlugin.java | 6 +- .../SubServers/Console/ConsoleCommand.java | 3 +- .../SubServers/Console/ConsolePlugin.java | 2 +- .../SubServers/Console/ConsoleWindow.java | 5 +- .../SubServers/Console/Library/HTMLogger.java | 2 +- .../Host/Executable/SubCreator.java | 2 +- pom.xml | 1 + 167 files changed, 2803 insertions(+), 10028 deletions(-) delete mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Callback.java delete mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Config/YAMLConfig.java delete mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Config/YAMLSection.java delete mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Config/YAMLValue.java delete mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Container.java delete mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/ExtraDataHandler.java delete mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/NamedContainer.java delete mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/UniversalFile.java delete mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Util.java delete mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Version/Version.java delete mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Version/VersionTokenizer.java delete mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Version/VersionType.java delete mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Cipher.java delete mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Client.java delete mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/ClientHandler.java delete mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Encryption/AES.java delete mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketAuthorization.java delete mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadNetworkList.java create mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExDownloadTemplates.java create mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketInReload.java create mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutExReload.java create mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutExReset.java rename SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/{PacketOutRunEvent.java => PacketOutExRunEvent.java} (60%) delete mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutReload.java delete mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutReset.java delete mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/PacketIn.java delete mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/PacketOut.java delete mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/SubDataServer.java create mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/SubProtocol.java delete mode 100644 SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Callback.java delete mode 100644 SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Config/YAMLConfig.java delete mode 100644 SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Config/YAMLSection.java delete mode 100644 SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Config/YAMLValue.java delete mode 100644 SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Container.java delete mode 100644 SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/ExtraDataHandler.java delete mode 100644 SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/NamedContainer.java delete mode 100644 SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/UniversalFile.java delete mode 100644 SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Util.java delete mode 100644 SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Version/Version.java delete mode 100644 SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Version/VersionTokenizer.java delete mode 100644 SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Version/VersionType.java delete mode 100644 SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/Cipher.java delete mode 100644 SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/Encryption/AES.java delete mode 100644 SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/Packet/PacketAuthorization.java delete mode 100644 SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/Packet/PacketDownloadNetworkList.java create mode 100644 SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/Packet/PacketInExReload.java create mode 100644 SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/Packet/PacketInExReset.java rename SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/Packet/{PacketInRunEvent.java => PacketInExRunEvent.java} (58%) delete mode 100644 SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/Packet/PacketInReload.java delete mode 100644 SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/Packet/PacketInReset.java delete mode 100644 SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/PacketIn.java delete mode 100644 SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/PacketOut.java delete mode 100644 SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/SubDataClient.java create mode 100644 SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/SubProtocol.java diff --git a/SubServers.Bungee/pom.xml b/SubServers.Bungee/pom.xml index 656298ce..2b090a46 100644 --- a/SubServers.Bungee/pom.xml +++ b/SubServers.Bungee/pom.xml @@ -28,9 +28,15 @@ provided - org.msgpack - msgpack-core - 0.8.16 + net.ME1312.Galaxi + GalaxiUtil + 19w16a + compile + + + net.ME1312.SubData + Server + 19w16b compile @@ -136,6 +142,8 @@ ${basedir}/../Javadoc/SubServers.Bungee -Xdoclint:none + https://src.me1312.net/jenkins/job/GalaxiEngine/javadoc/GalaxiUtil/ + https://src.me1312.net/jenkins/job/SubData/javadoc/Server/ https://ci.md-5.net/job/BungeeCord/ws/api/target/apidocs/ diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubAddHostEvent.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubAddHostEvent.java index 9bcc69cc..30a78e56 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubAddHostEvent.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubAddHostEvent.java @@ -1,9 +1,8 @@ package net.ME1312.SubServers.Bungee.Event; import net.ME1312.SubServers.Bungee.Host.Host; -import net.ME1312.SubServers.Bungee.Host.Server; import net.ME1312.SubServers.Bungee.Library.SubEvent; -import net.ME1312.SubServers.Bungee.Library.Util; +import net.ME1312.Galaxi.Library.Util; import net.md_5.bungee.api.plugin.Cancellable; import net.md_5.bungee.api.plugin.Event; diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubAddProxyEvent.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubAddProxyEvent.java index c2fcb1e4..cdb1008c 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubAddProxyEvent.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubAddProxyEvent.java @@ -2,7 +2,7 @@ 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.ME1312.Galaxi.Library.Util; import net.md_5.bungee.api.plugin.Event; /** diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubAddServerEvent.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubAddServerEvent.java index 7aa2cb08..b09e7661 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubAddServerEvent.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubAddServerEvent.java @@ -3,7 +3,7 @@ package net.ME1312.SubServers.Bungee.Event; import net.ME1312.SubServers.Bungee.Host.Host; import net.ME1312.SubServers.Bungee.Host.Server; import net.ME1312.SubServers.Bungee.Library.SubEvent; -import net.ME1312.SubServers.Bungee.Library.Util; +import net.ME1312.Galaxi.Library.Util; import net.md_5.bungee.api.plugin.Cancellable; import net.md_5.bungee.api.plugin.Event; diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubCreateEvent.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubCreateEvent.java index 3aede938..76c8f533 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubCreateEvent.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubCreateEvent.java @@ -3,8 +3,8 @@ package net.ME1312.SubServers.Bungee.Event; import net.ME1312.SubServers.Bungee.Host.Host; import net.ME1312.SubServers.Bungee.Host.SubCreator; import net.ME1312.SubServers.Bungee.Library.SubEvent; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Library.Version.Version; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.Galaxi.Library.Version.Version; import net.md_5.bungee.api.plugin.Cancellable; import net.md_5.bungee.api.plugin.Event; @@ -33,7 +33,7 @@ public class SubCreateEvent extends Event implements SubEvent, Cancellable { * @param port Server Port Number */ public SubCreateEvent(UUID player, Host host, String name, SubCreator.ServerTemplate template, Version version, int port) { - if (Util.isNull(host, name, template, version, port)) throw new NullPointerException(); + if (Util.isNull(host, name, template, port)) throw new NullPointerException(); this.player = player; this.host = host; this.name = name; diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubEditServerEvent.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubEditServerEvent.java index c5e3c9cc..93f49ebd 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubEditServerEvent.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubEditServerEvent.java @@ -1,11 +1,11 @@ package net.ME1312.SubServers.Bungee.Event; import net.ME1312.SubServers.Bungee.Host.Server; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLValue; -import net.ME1312.SubServers.Bungee.Library.NamedContainer; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Map.ObjectMapValue; +import net.ME1312.Galaxi.Library.NamedContainer; import net.ME1312.SubServers.Bungee.Library.SubEvent; -import net.ME1312.SubServers.Bungee.Library.Util; +import net.ME1312.Galaxi.Library.Util; import net.md_5.bungee.api.plugin.Cancellable; import net.md_5.bungee.api.plugin.Event; @@ -18,7 +18,7 @@ public class SubEditServerEvent extends Event implements SubEvent, Cancellable { private boolean cancelled = false; private UUID player; private Server server; - private NamedContainer edit; + private NamedContainer edit; private boolean perm; /** @@ -31,11 +31,11 @@ public class SubEditServerEvent extends Event implements SubEvent, Cancellable { */ public SubEditServerEvent(UUID player, Server server, NamedContainer edit, boolean permanent) { if (Util.isNull(server, edit)) throw new NullPointerException(); - YAMLSection section = new YAMLSection(); + ObjectMap section = new ObjectMap(); section.set(".", edit.get()); this.player = player; this.server = server; - this.edit = new NamedContainer(edit.name(), section.get(".")); + this.edit = new NamedContainer(edit.name(), section.get(".")); this.perm = permanent; } @@ -58,7 +58,7 @@ public class SubEditServerEvent extends Event implements SubEvent, Cancellable { * * @return Edit to be made */ - public NamedContainer getEdit() { + public NamedContainer getEdit() { return edit; } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubNetworkConnectEvent.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubNetworkConnectEvent.java index 8006f074..1580feb2 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubNetworkConnectEvent.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubNetworkConnectEvent.java @@ -1,8 +1,11 @@ package net.ME1312.SubServers.Bungee.Event; +import net.ME1312.SubData.Server.DataClient; +import net.ME1312.SubData.Server.DataServer; +import net.ME1312.SubData.Server.SubDataClient; import net.ME1312.SubServers.Bungee.Library.SubEvent; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Network.SubDataServer; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Server.SubDataServer; import net.md_5.bungee.api.plugin.Cancellable; import net.md_5.bungee.api.plugin.Event; @@ -13,16 +16,16 @@ import java.net.InetAddress; */ public class SubNetworkConnectEvent extends Event implements SubEvent, Cancellable { private boolean cancelled = false; - private SubDataServer network; - private InetAddress address; + private DataServer network; + private DataClient client; /** * SubData Network Connect Event */ - public SubNetworkConnectEvent(SubDataServer network, InetAddress address) { - if (Util.isNull(network, address)) throw new NullPointerException(); + public SubNetworkConnectEvent(DataServer network, DataClient client) { + if (Util.isNull(network, client)) throw new NullPointerException(); this.network = network; - this.address = address; + this.client = client; } /** @@ -30,17 +33,17 @@ public class SubNetworkConnectEvent extends Event implements SubEvent, Cancellab * * @return SubData Network */ - public SubDataServer getNetwork() { + public DataServer getNetwork() { return network; } /** - * Get the address of the connecting client + * Get the connecting client * - * @return Client address + * @return Client */ - public InetAddress getAddress() { - return address; + public DataClient getClient() { + return client; } /** diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubNetworkDisconnectEvent.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubNetworkDisconnectEvent.java index 5445532c..87ef0250 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubNetworkDisconnectEvent.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubNetworkDisconnectEvent.java @@ -1,25 +1,30 @@ package net.ME1312.SubServers.Bungee.Event; +import net.ME1312.SubData.Server.DataClient; +import net.ME1312.SubData.Server.DataServer; +import net.ME1312.SubData.Server.Library.DisconnectReason; +import net.ME1312.SubData.Server.SubDataClient; 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.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Server.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; + private DataServer network; + private DataClient client; + private DisconnectReason reason; /** * SubData Network Disconnect Event */ - public SubNetworkDisconnectEvent(SubDataServer network, Client client) { - if (Util.isNull(network, client)) throw new NullPointerException(); + public SubNetworkDisconnectEvent(DataServer network, DataClient client, DisconnectReason reason) { + if (Util.isNull(network, client, reason)) throw new NullPointerException(); this.network = network; this.client = client; + this.reason = reason; } /** @@ -27,7 +32,7 @@ public class SubNetworkDisconnectEvent extends Event implements SubEvent { * * @return SubData Network */ - public SubDataServer getNetwork() { + public DataServer getNetwork() { return network; } @@ -36,8 +41,16 @@ public class SubNetworkDisconnectEvent extends Event implements SubEvent { * * @return Client */ - public Client getClient() { + public DataClient getClient() { return client; } + /** + * Get the reason the client disconnected + * + * @return Disconnect Reason + */ + public DisconnectReason getReason() { + return reason; + } } \ 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 23cc8dbd..f4aba2b9 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubRemoveHostEvent.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubRemoveHostEvent.java @@ -1,9 +1,8 @@ package net.ME1312.SubServers.Bungee.Event; import net.ME1312.SubServers.Bungee.Host.Host; -import net.ME1312.SubServers.Bungee.Host.Server; import net.ME1312.SubServers.Bungee.Library.SubEvent; -import net.ME1312.SubServers.Bungee.Library.Util; +import net.ME1312.Galaxi.Library.Util; import net.md_5.bungee.api.plugin.Cancellable; import net.md_5.bungee.api.plugin.Event; diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubRemoveProxyEvent.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubRemoveProxyEvent.java index 65e7fae6..a69f3ae7 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubRemoveProxyEvent.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubRemoveProxyEvent.java @@ -2,7 +2,7 @@ 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.ME1312.Galaxi.Library.Util; import net.md_5.bungee.api.plugin.Event; /** diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubRemoveServerEvent.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubRemoveServerEvent.java index a0098b31..82fbde20 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubRemoveServerEvent.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubRemoveServerEvent.java @@ -3,7 +3,7 @@ package net.ME1312.SubServers.Bungee.Event; import net.ME1312.SubServers.Bungee.Host.Host; import net.ME1312.SubServers.Bungee.Host.Server; import net.ME1312.SubServers.Bungee.Library.SubEvent; -import net.ME1312.SubServers.Bungee.Library.Util; +import net.ME1312.Galaxi.Library.Util; import net.md_5.bungee.api.plugin.Cancellable; import net.md_5.bungee.api.plugin.Event; diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubSendCommandEvent.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubSendCommandEvent.java index 9eb28aff..d07fcb2b 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubSendCommandEvent.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubSendCommandEvent.java @@ -2,7 +2,7 @@ package net.ME1312.SubServers.Bungee.Event; import net.ME1312.SubServers.Bungee.Host.SubServer; import net.ME1312.SubServers.Bungee.Library.SubEvent; -import net.ME1312.SubServers.Bungee.Library.Util; +import net.ME1312.Galaxi.Library.Util; import net.md_5.bungee.api.plugin.Cancellable; import net.md_5.bungee.api.plugin.Event; diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubStartEvent.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubStartEvent.java index eda9209f..6ecf38d1 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubStartEvent.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubStartEvent.java @@ -2,7 +2,7 @@ package net.ME1312.SubServers.Bungee.Event; import net.ME1312.SubServers.Bungee.Host.SubServer; import net.ME1312.SubServers.Bungee.Library.SubEvent; -import net.ME1312.SubServers.Bungee.Library.Util; +import net.ME1312.Galaxi.Library.Util; import net.md_5.bungee.api.plugin.Cancellable; import net.md_5.bungee.api.plugin.Event; diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubStopEvent.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubStopEvent.java index daf3bd6f..bb7f43ae 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubStopEvent.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubStopEvent.java @@ -2,7 +2,7 @@ package net.ME1312.SubServers.Bungee.Event; import net.ME1312.SubServers.Bungee.Host.SubServer; import net.ME1312.SubServers.Bungee.Library.SubEvent; -import net.ME1312.SubServers.Bungee.Library.Util; +import net.ME1312.Galaxi.Library.Util; import net.md_5.bungee.api.plugin.Cancellable; import net.md_5.bungee.api.plugin.Event; diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubStoppedEvent.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubStoppedEvent.java index c63cd67f..339f7d81 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubStoppedEvent.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Event/SubStoppedEvent.java @@ -2,7 +2,7 @@ package net.ME1312.SubServers.Bungee.Event; import net.ME1312.SubServers.Bungee.Host.SubServer; import net.ME1312.SubServers.Bungee.Library.SubEvent; -import net.ME1312.SubServers.Bungee.Library.Util; +import net.ME1312.Galaxi.Library.Util; import net.md_5.bungee.api.plugin.Event; /** diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Executable.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Executable.java index e65f3ab0..3fcc5c18 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Executable.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Executable.java @@ -1,10 +1,9 @@ package net.ME1312.SubServers.Bungee.Host; import net.ME1312.SubServers.Bungee.Library.Compatibility.JNA; -import net.ME1312.SubServers.Bungee.Library.Util; +import net.ME1312.Galaxi.Library.Util; import java.io.File; -import java.lang.reflect.Field; /** * Executable Handler Class 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 c6ce67cf..279dc99b 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 @@ -1,23 +1,23 @@ package net.ME1312.SubServers.Bungee.Host.External; import com.google.common.collect.Range; +import net.ME1312.SubData.Server.DataClient; +import net.ME1312.SubData.Server.SerializableClientHandler; +import net.ME1312.SubData.Server.SubDataClient; import net.ME1312.SubServers.Bungee.Event.SubAddServerEvent; import net.ME1312.SubServers.Bungee.Event.SubRemoveServerEvent; import net.ME1312.SubServers.Bungee.Host.Host; import net.ME1312.SubServers.Bungee.Host.SubCreator; import net.ME1312.SubServers.Bungee.Host.SubServer; -import net.ME1312.SubServers.Bungee.Library.Callback; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; +import net.ME1312.Galaxi.Library.Map.ObjectMap; import net.ME1312.SubServers.Bungee.Library.Exception.InvalidServerException; -import net.ME1312.SubServers.Bungee.Library.NamedContainer; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Network.Client; -import net.ME1312.SubServers.Bungee.Network.ClientHandler; +import net.ME1312.Galaxi.Library.NamedContainer; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Server.Protocol.PacketObjectOut; import net.ME1312.SubServers.Bungee.Network.Packet.PacketExAddServer; import net.ME1312.SubServers.Bungee.Network.Packet.PacketExDeleteServer; import net.ME1312.SubServers.Bungee.Network.Packet.PacketExRemoveServer; -import net.ME1312.SubServers.Bungee.Network.Packet.PacketOutReset; -import net.ME1312.SubServers.Bungee.Network.PacketOut; +import net.ME1312.SubServers.Bungee.Network.Packet.PacketOutExReset; import net.ME1312.SubServers.Bungee.SubPlugin; import java.net.InetAddress; @@ -26,15 +26,15 @@ import java.util.*; /** * External Host Class */ -public class ExternalHost extends Host implements ClientHandler { +public class ExternalHost extends Host implements SerializableClientHandler { private HashMap servers = new HashMap(); private String name; private boolean enabled; private InetAddress address; private SubCreator creator; private String directory; - protected NamedContainer client; - private LinkedList queue; + protected NamedContainer client; + private LinkedList queue; private boolean clean; protected SubPlugin plugin; @@ -56,26 +56,26 @@ public class ExternalHost extends Host implements ClientHandler { this.name = name; this.enabled = enabled; this.address = address; - this.client = new NamedContainer(false, null); + this.client = new NamedContainer(false, null); this.creator = new ExternalSubCreator(this, ports, log, gitBash); this.directory = directory; - this.queue = new LinkedList(); + this.queue = new LinkedList(); this.clean = false; } @Override - public Client getSubData() { + public DataClient getSubData() { return client.get(); } @Override - public void setSubData(Client client) { - this.client = new NamedContainer(false, client); - if (client != null && (client.getHandler() == null || !equals(client.getHandler()))) client.setHandler(this); + public void setSubData(DataClient client) { + this.client = new NamedContainer(false, (SubDataClient) client); + if (client != null && (client.getHandler() == null || !equals(client.getHandler()))) ((SubDataClient) client).setHandler(this); } - protected void queue(PacketOut... packet) { - for (PacketOut p : packet) if (client.get() == null || client.name() == false) { + protected void queue(PacketObjectOut... packet) { + for (PacketObjectOut p : packet) if (client.get() == null || client.name() == false) { queue.add(p); } else { client.get().sendPacket(p); @@ -83,7 +83,7 @@ public class ExternalHost extends Host implements ClientHandler { } private void requeue() { if (!clean) { - client.get().sendPacket(new PacketOutReset("Prevent Desync")); + client.get().sendPacket(new PacketOutExReset("Prevent Desync")); clean = true; } for (SubServer server : servers.values()) { @@ -170,7 +170,7 @@ public class ExternalHost extends Host implements ClientHandler { getSubServer(server).waitFor(); } queue(new PacketExRemoveServer(server, data -> { - if (data.getInt("r") == 0) { + if (data.getInt(0x0001) == 0) { servers.remove(server.toLowerCase()); } })); @@ -189,13 +189,89 @@ public class ExternalHost extends Host implements ClientHandler { getSubServer(server).terminate(); } queue(new PacketExRemoveServer(server, data -> { - if (data.getInt("r") == 0) { + if (data.getInt(0x0001) == 0) { servers.remove(server.toLowerCase()); } })); return true; } + @Override + public boolean recycleSubServer(UUID player, String name) throws InterruptedException { + if (Util.isNull(name)) throw new NullPointerException(); + String server = servers.get(name.toLowerCase()).getName(); + + SubRemoveServerEvent event = new SubRemoveServerEvent(player, this, getSubServer(server)); + plugin.getPluginManager().callEvent(event); + if (!event.isCancelled()) { + if (getSubServer(server).isRunning()) { + getSubServer(server).stop(); + getSubServer(server).waitFor(); + } + + System.out.println("SubServers > Saving..."); + ObjectMap info = (plugin.config.get().getMap("Servers").getKeys().contains(server))?plugin.config.get().getMap("Servers").getMap(server).clone():new ObjectMap(); + info.set("Name", server); + info.set("Timestamp", Calendar.getInstance().getTime().getTime()); + try { + if (plugin.config.get().getMap("Servers").getKeys().contains(server)) { + plugin.config.get().getMap("Servers").remove(server); + plugin.config.save(); + } + } catch (Exception e) { + e.printStackTrace(); + } + + System.out.println("SubServers > Moving Files..."); + queue(new PacketExDeleteServer(server, info, true, data -> { + if (data.getInt(0x0001) == 0) { + servers.remove(server.toLowerCase()); + System.out.println("SubServers > Deleted SubServer: " + server); + } else { + System.out.println("SubServers > Couldn't remove " + server + " from memory. See " + getName() + " console for more details"); + } + })); + return true; + } else return false; + } + + @Override + public boolean forceRecycleSubServer(UUID player, String name) throws InterruptedException { + if (Util.isNull(name)) throw new NullPointerException(); + String server = servers.get(name.toLowerCase()).getName(); + + SubRemoveServerEvent event = new SubRemoveServerEvent(player, this, getSubServer(server)); + plugin.getPluginManager().callEvent(event); + if (getSubServer(server).isRunning()) { + getSubServer(server).terminate(); + } + + System.out.println("SubServers > Saving..."); + ObjectMap info = (plugin.config.get().getMap("Servers").getKeys().contains(server))?plugin.config.get().getMap("Servers").getMap(server).clone():new ObjectMap(); + info.set("Name", server); + info.set("Timestamp", Calendar.getInstance().getTime().getTime()); + try { + if (plugin.config.get().getMap("Servers").getKeys().contains(server)) { + plugin.config.get().getMap("Servers").remove(server); + plugin.config.save(); + } + } catch (Exception e) { + e.printStackTrace(); + } + + System.out.println("SubServers > Moving Files..."); + queue(new PacketExDeleteServer(server, info, true, data -> { + if (data.getInt(0x0001) == 0) { + for (String group : getSubServer(server).getGroups()) getSubServer(server).removeGroup(group); + servers.remove(server.toLowerCase()); + System.out.println("SubServers > Deleted SubServer: " + server); + } else { + System.out.println("SubServers > Couldn't remove " + server + " from memory. See " + getName() + " console for more details"); + } + })); + return true; + } + @Override public boolean deleteSubServer(UUID player, String name) throws InterruptedException { if (Util.isNull(name)) throw new NullPointerException(); @@ -210,12 +286,12 @@ public class ExternalHost extends Host implements ClientHandler { } System.out.println("SubServers > Saving..."); - YAMLSection info = (plugin.config.get().getSection("Servers").getKeys().contains(server))?plugin.config.get().getSection("Servers").getSection(server).clone():new YAMLSection(); + ObjectMap info = (plugin.config.get().getMap("Servers").getKeys().contains(server))?plugin.config.get().getMap("Servers").getMap(server).clone():new ObjectMap(); info.set("Name", server); info.set("Timestamp", Calendar.getInstance().getTime().getTime()); try { - if (plugin.config.get().getSection("Servers").getKeys().contains(server)) { - plugin.config.get().getSection("Servers").remove(server); + if (plugin.config.get().getMap("Servers").getKeys().contains(server)) { + plugin.config.get().getMap("Servers").remove(server); plugin.config.save(); } } catch (Exception e) { @@ -223,8 +299,8 @@ public class ExternalHost extends Host implements ClientHandler { } System.out.println("SubServers > Removing Files..."); - queue(new PacketExDeleteServer(server, info, data -> { - if (data.getInt("r") == 0) { + queue(new PacketExDeleteServer(server, info, false, data -> { + if (data.getInt(0x0001) == 0) { servers.remove(server.toLowerCase()); System.out.println("SubServers > Deleted SubServer: " + server); } else { @@ -247,12 +323,12 @@ public class ExternalHost extends Host implements ClientHandler { } System.out.println("SubServers > Saving..."); - YAMLSection info = (plugin.config.get().getSection("Servers").getKeys().contains(server))?plugin.config.get().getSection("Servers").getSection(server).clone():new YAMLSection(); + ObjectMap info = (plugin.config.get().getMap("Servers").getKeys().contains(server))?plugin.config.get().getMap("Servers").getMap(server).clone():new ObjectMap(); info.set("Name", server); info.set("Timestamp", Calendar.getInstance().getTime().getTime()); try { - if (plugin.config.get().getSection("Servers").getKeys().contains(server)) { - plugin.config.get().getSection("Servers").remove(server); + if (plugin.config.get().getMap("Servers").getKeys().contains(server)) { + plugin.config.get().getMap("Servers").remove(server); plugin.config.save(); } } catch (Exception e) { @@ -260,8 +336,8 @@ public class ExternalHost extends Host implements ClientHandler { } System.out.println("SubServers > Removing Files..."); - queue(new PacketExDeleteServer(server, info, data -> { - if (data.getInt("r") == 0) { + queue(new PacketExDeleteServer(server, info, false, data -> { + if (data.getInt(0x0001) == 0) { for (String group : getSubServer(server).getGroups()) getSubServer(server).removeGroup(group); servers.remove(server.toLowerCase()); System.out.println("SubServers > Deleted SubServer: " + server); diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalSubCreator.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalSubCreator.java index 22d01c8f..455bc96d 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalSubCreator.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalSubCreator.java @@ -1,17 +1,18 @@ package net.ME1312.SubServers.Bungee.Host.External; import com.google.common.collect.Range; +import net.ME1312.Galaxi.Library.*; +import net.ME1312.Galaxi.Library.Callback.Callback; +import net.ME1312.SubData.Server.SubDataClient; import net.ME1312.SubServers.Bungee.Event.SubCreateEvent; import net.ME1312.SubServers.Bungee.Host.*; -import net.ME1312.SubServers.Bungee.Host.Internal.InternalSubCreator; -import net.ME1312.SubServers.Bungee.Library.*; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLConfig; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Exception.InvalidHostException; -import net.ME1312.SubServers.Bungee.Library.Version.Version; +import net.ME1312.Galaxi.Library.Config.YAMLConfig; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Version.Version; import net.ME1312.SubServers.Bungee.Network.Packet.PacketExConfigureHost; import net.ME1312.SubServers.Bungee.Network.Packet.PacketExCreateServer; import net.ME1312.SubServers.Bungee.SubAPI; +import net.md_5.bungee.api.ChatColor; import java.io.File; import java.lang.reflect.InvocationTargetException; @@ -55,8 +56,8 @@ public class ExternalSubCreator extends SubCreator { if (new UniversalFile(host.plugin.dir, "SubServers:Templates").exists()) for (File file : new UniversalFile(host.plugin.dir, "SubServers:Templates").listFiles()) { try { if (file.isDirectory() && !file.getName().endsWith(".x")) { - YAMLSection config = (new UniversalFile(file, "template.yml").exists())?new YAMLConfig(new UniversalFile(file, "template.yml")).get().getSection("Template", new YAMLSection()):new YAMLSection(); - ServerTemplate template = new ServerTemplate(file.getName(), config.getBoolean("Enabled", true), config.getRawString("Icon", "::NULL::"), file, config.getSection("Build", new YAMLSection()), config.getSection("Settings", new YAMLSection())); + ObjectMap config = (new UniversalFile(file, "template.yml").exists())?new YAMLConfig(new UniversalFile(file, "template.yml")).get().getMap("Template", new ObjectMap()):new ObjectMap(); + ServerTemplate template = new ServerTemplate(file.getName(), config.getBoolean("Enabled", true), config.getRawString("Icon", "::NULL::"), file, config.getMap("Build", new ObjectMap()), config.getMap("Settings", new ObjectMap())); templates.put(file.getName().toLowerCase(), template); if (config.getKeys().contains("Display")) template.setDisplayName(config.getString("Display")); } @@ -70,7 +71,7 @@ public class ExternalSubCreator extends SubCreator { @Override public boolean create(UUID player, String name, ServerTemplate template, Version version, Integer port, Callback callback) { - if (Util.isNull(name, template, version)) throw new NullPointerException(); + if (Util.isNull(name, template)) throw new NullPointerException(); if (host.isAvailable() && host.isEnabled() && template.isEnabled() && !SubAPI.getInstance().getSubServers().keySet().contains(name.toLowerCase()) && !SubCreator.isReserved(name)) { StackTraceElement[] origin = new Exception().getStackTrace(); @@ -94,15 +95,15 @@ public class ExternalSubCreator extends SubCreator { logger.start(); host.queue(new PacketExCreateServer(name, template, version, port, logger.getExternalAddress(), data -> { try { - if (data.getInt("r") == 0) { + if (data.getInt(0x0001) == 0) { System.out.println(name + "/Creator > Saving..."); if (host.plugin.exServers.keySet().contains(name.toLowerCase())) host.plugin.exServers.remove(name.toLowerCase()); - YAMLSection server = new YAMLSection(); - YAMLSection config = new YAMLSection((Map) convert(data.getSection("c").get(), new NamedContainer<>("$player$", (player == null)?"":player.toString()), new NamedContainer<>("$name$", name), - new NamedContainer<>("$template$", template.getName()), new NamedContainer<>("$type$", template.getType().toString()), new NamedContainer<>("$version$", version.toString().replace(" ", "@")), - new NamedContainer<>("$address$", data.getSection("c").getRawString("\033address", "null")), new NamedContainer<>("$port$", Integer.toString(fport)))); + ObjectMap server = new ObjectMap(); + ObjectMap config = new ObjectMap((Map) convert(data.getMap(0x0002).get(), new NamedContainer<>("$player$", (player == null)?"":player.toString()), new NamedContainer<>("$name$", name), + new NamedContainer<>("$template$", template.getName()), new NamedContainer<>("$type$", template.getType().toString()), new NamedContainer<>("$version$", (version != null)?version.toString().replace(" ", "@"):""), + new NamedContainer<>("$address$", new ObjectMap((Map) data.getObject(0x0002)).getRawString("\033address", "null")), new NamedContainer<>("$port$", Integer.toString(fport)))); config.remove("\033address"); @@ -123,15 +124,15 @@ public class ExternalSubCreator extends SubCreator { server.set("Hidden", false); server.setAll(config); - SubServer subserver = host.addSubServer(player, name, server.getBoolean("Enabled"), fport, server.getColoredString("Motd", '&'), server.getBoolean("Log"), server.getRawString("Directory"), + SubServer subserver = host.addSubServer(player, name, server.getBoolean("Enabled"), fport, ChatColor.translateAlternateColorCodes('&', server.getString("Motd")), server.getBoolean("Log"), server.getRawString("Directory"), server.getRawString("Executable"), server.getRawString("Stop-Command"), server.getBoolean("Hidden"), server.getBoolean("Restricted")); if (server.getString("Display").length() > 0) subserver.setDisplayName(server.getString("Display")); for (String group : server.getStringList("Group")) subserver.addGroup(group); SubServer.StopAction action = Util.getDespiteException(() -> SubServer.StopAction.valueOf(server.getRawString("Stop-Action").toUpperCase().replace('-', '_').replace(' ', '_')), null); if (action != null) subserver.setStopAction(action); - if (server.contains("Extra")) for (String extra : server.getSection("Extra").getKeys()) - subserver.addExtra(extra, server.getSection("Extra").getObject(extra)); - host.plugin.config.get().getSection("Servers").set(name, server); + if (server.contains("Extra")) for (String extra : server.getMap("Extra").getKeys()) + subserver.addExtra(extra, server.getMap("Extra").getObject(extra)); + host.plugin.config.get().getMap("Servers").set(name, server); host.plugin.config.save(); if (template.getBuildOptions().getBoolean("Run-On-Finish", true)) subserver.start(); @@ -144,7 +145,7 @@ public class ExternalSubCreator extends SubCreator { ew.printStackTrace(); } } else { - System.out.println(name + "/Creator > " + data.getString("m")); + System.out.println(name + "/Creator > " + data.getString(0x0003)); } } catch (Exception e) { e.printStackTrace(); @@ -194,7 +195,7 @@ public class ExternalSubCreator extends SubCreator { @Override public void terminate(String name) { if (this.thread.keySet().contains(name.toLowerCase())) { - host.getSubData().sendPacket(new PacketExCreateServer(name.toLowerCase())); + ((SubDataClient) host.getSubData()).sendPacket(new PacketExCreateServer(name.toLowerCase())); thread.remove(name.toLowerCase()); } } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalSubLogger.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalSubLogger.java index eaf44fe5..0d7826e0 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalSubLogger.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalSubLogger.java @@ -2,8 +2,8 @@ package net.ME1312.SubServers.Bungee.Host.External; import net.ME1312.SubServers.Bungee.Host.SubLogFilter; import net.ME1312.SubServers.Bungee.Host.SubLogger; -import net.ME1312.SubServers.Bungee.Library.Container; -import net.ME1312.SubServers.Bungee.Library.Util; +import net.ME1312.Galaxi.Library.Container; +import net.ME1312.Galaxi.Library.Util; import net.ME1312.SubServers.Bungee.Network.Packet.PacketInExLogMessage; import net.ME1312.SubServers.Bungee.SubAPI; import net.md_5.bungee.api.ProxyServer; @@ -14,7 +14,6 @@ import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; -import java.util.LinkedList; import java.util.List; import java.util.UUID; import java.util.logging.Level; diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalSubServer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalSubServer.java index 90999b6d..bbad1493 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalSubServer.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalSubServer.java @@ -1,18 +1,18 @@ package net.ME1312.SubServers.Bungee.Host.External; +import net.ME1312.Galaxi.Library.Callback.ReturnRunnable; import net.ME1312.SubServers.Bungee.Event.*; import net.ME1312.SubServers.Bungee.Host.*; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLValue; -import net.ME1312.SubServers.Bungee.Library.Container; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Map.ObjectMapValue; +import net.ME1312.Galaxi.Library.Container; import net.ME1312.SubServers.Bungee.Library.Exception.InvalidServerException; -import net.ME1312.SubServers.Bungee.Library.NamedContainer; -import net.ME1312.SubServers.Bungee.Library.Util; +import net.ME1312.Galaxi.Library.NamedContainer; +import net.ME1312.Galaxi.Library.Util; import net.ME1312.SubServers.Bungee.Network.Packet.PacketExUpdateServer; -import net.ME1312.SubServers.Bungee.SubAPI; import net.md_5.bungee.BungeeServerInfo; +import net.md_5.bungee.api.ChatColor; -import java.io.File; import java.io.IOException; import java.lang.reflect.Field; import java.util.ArrayList; @@ -111,14 +111,16 @@ public class ExternalSubServer extends SubServerContainer { history.clear(); running = false; - if (stopaction == StopAction.REMOVE_SERVER || stopaction == StopAction.DELETE_SERVER) { + if (stopaction == StopAction.REMOVE_SERVER || stopaction == StopAction.RECYCLE_SERVER || stopaction == StopAction.DELETE_SERVER) { try { - if (stopaction == StopAction.DELETE_SERVER) { + if (stopaction == StopAction.RECYCLE_SERVER) { + host.recycleSubServer(getName()); + } else if (stopaction == StopAction.DELETE_SERVER) { host.deleteSubServer(getName()); } else { try { - if (host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - host.plugin.config.get().getSection("Servers").remove(getName()); + if (host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + host.plugin.config.get().getMap("Servers").remove(getName()); host.plugin.config.save(); } } catch (IOException e) { @@ -175,16 +177,16 @@ public class ExternalSubServer extends SubServerContainer { - @SuppressWarnings("deprecation") - public int edit(UUID player, YAMLSection edit) { + @SuppressWarnings({"deprecation", "unchecked"}) + public int edit(UUID player, ObjectMap edit) { int c = 0; boolean state = isRunning(); SubServer forward = null; - YAMLSection pending = edit.clone(); + ObjectMap pending = edit.clone(); for (String key : edit.getKeys()) { pending.remove(key); - YAMLValue value = edit.get(key); - SubEditServerEvent event = new SubEditServerEvent(player, this, new NamedContainer(key, value), true); + ObjectMapValue value = edit.get(key); + SubEditServerEvent event = new SubEditServerEvent(player, this, new NamedContainer(key, value), true); host.plugin.getPluginManager().callEvent(event); if (!event.isCancelled()) { try { @@ -193,10 +195,10 @@ public class ExternalSubServer extends SubServerContainer { if (value.isString() && host.removeSubServer(player, getName())) { SubServer server = host.addSubServer(player, value.asRawString(), isEnabled(), getAddress().getPort(), getMotd(), isLogging(), getPath(), getExecutable(), getStopCommand(), isHidden(), isRestricted()); if (server != null) { - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - YAMLSection config = this.host.plugin.config.get().getSection("Servers").getSection(getName()); - this.host.plugin.config.get().getSection("Servers").remove(getName()); - this.host.plugin.config.get().getSection("Servers").set(server.getName(), config); + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + ObjectMap config = this.host.plugin.config.get().getMap("Servers").getMap(getName()); + this.host.plugin.config.get().getMap("Servers").remove(getName()); + this.host.plugin.config.get().getMap("Servers").set(server.getName(), config); this.host.plugin.config.save(); } forward = server; @@ -215,11 +217,11 @@ public class ExternalSubServer extends SubServerContainer { } f.setAccessible(false); logger.name = getDisplayName(); - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { if (getName().equals(getDisplayName())) { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).remove("Display"); + this.host.plugin.config.get().getMap("Servers").getMap(getName()).remove("Display"); } else { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Display", getDisplayName()); + this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Display", getDisplayName()); } this.host.plugin.config.save(); } @@ -230,8 +232,8 @@ public class ExternalSubServer extends SubServerContainer { if (value.isBoolean()) { if (enabled != value.asBoolean()) host.queue(new PacketExUpdateServer(this, PacketExUpdateServer.UpdateType.SET_ENABLED, (Boolean) value.asBoolean())); enabled = value.asBoolean(); - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Enabled", isEnabled()); + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Enabled", isEnabled()); this.host.plugin.config.save(); } c++; @@ -240,8 +242,8 @@ public class ExternalSubServer extends SubServerContainer { case "group": if (value.isList()) { Util.reflect(ServerContainer.class.getDeclaredField("groups"), this, value.asStringList()); - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Group", value.asStringList()); + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Group", value.asStringList()); this.host.plugin.config.save(); } c++; @@ -252,8 +254,8 @@ public class ExternalSubServer extends SubServerContainer { waitFor(() -> host.getSubServer(getName()), null); SubServer server = this.host.plugin.api.getHost(value.asRawString()).addSubServer(player, getName(), isEnabled(), getAddress().getPort(), getMotd(), isLogging(), getPath(), getExecutable(), getStopCommand(), isHidden(), isRestricted()); if (server != null) { - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Host", server.getHost().getName()); + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Host", server.getHost().getName()); this.host.plugin.config.save(); } forward = server; @@ -266,8 +268,8 @@ public class ExternalSubServer extends SubServerContainer { waitFor(() -> host.getSubServer(getName()), null); SubServer server = host.addSubServer(player, getName(), isEnabled(), value.asInt(), getMotd(), isLogging(), getPath(), getExecutable(), getStopCommand(), isHidden(), isRestricted()); if (server != null) { - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Port", server.getAddress().getPort()); + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Port", server.getAddress().getPort()); this.host.plugin.config.save(); } forward = server; @@ -277,9 +279,9 @@ public class ExternalSubServer extends SubServerContainer { break; case "motd": if (value.isString()) { - Util.reflect(BungeeServerInfo.class.getDeclaredField("motd"), this, value.asColoredString('&')); - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Motd", value.asString()); + Util.reflect(BungeeServerInfo.class.getDeclaredField("motd"), this, ChatColor.translateAlternateColorCodes('&', value.asString())); + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Motd", value.asString()); this.host.plugin.config.save(); } c++; @@ -289,8 +291,8 @@ public class ExternalSubServer extends SubServerContainer { if (value.isBoolean()) { if (log.get() != value.asBoolean()) host.queue(new PacketExUpdateServer(this, PacketExUpdateServer.UpdateType.SET_LOGGING, (Boolean) value.asBoolean())); log.set(value.asBoolean()); - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Log", isLogging()); + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Log", isLogging()); this.host.plugin.config.save(); } c++; @@ -301,8 +303,8 @@ public class ExternalSubServer extends SubServerContainer { waitFor(() -> host.getSubServer(getName()), null); SubServer server = host.addSubServer(player, getName(), isEnabled(), getAddress().getPort(), getMotd(), isLogging(), value.asRawString(), getExecutable(), getStopCommand(), isHidden(), isRestricted()); if (server != null) { - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Directory", server.getPath()); + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Directory", server.getPath()); this.host.plugin.config.save(); } forward = server; @@ -315,8 +317,8 @@ public class ExternalSubServer extends SubServerContainer { waitFor(() -> host.getSubServer(getName()), null); SubServer server = host.addSubServer(player, getName(), isEnabled(), getAddress().getPort(), getMotd(), isLogging(), getPath(), value.asRawString(), getStopCommand(), isHidden(), isRestricted()); if (server != null) { - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Executable", value.asRawString()); + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Executable", value.asRawString()); this.host.plugin.config.save(); } forward = server; @@ -333,8 +335,8 @@ public class ExternalSubServer extends SubServerContainer { if (value.isString()) { if (!stopcmd.equals(value)) host.queue(new PacketExUpdateServer(this, PacketExUpdateServer.UpdateType.SET_STOP_COMMAND, value.asRawString())); stopcmd = value.asRawString(); - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Stop-Command", getStopCommand()); + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Stop-Command", getStopCommand()); this.host.plugin.config.save(); } c++; @@ -345,8 +347,8 @@ public class ExternalSubServer extends SubServerContainer { StopAction action = Util.getDespiteException(() -> StopAction.valueOf(value.asRawString().toUpperCase().replace('-', '_').replace(' ', '_')), null); if (action != null) { stopaction = action; - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Stop-Action", getStopAction().toString()); + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Stop-Action", getStopAction().toString()); this.host.plugin.config.save(); } c++; @@ -355,8 +357,8 @@ public class ExternalSubServer extends SubServerContainer { break; case "auto-run": if (value.isBoolean()) { - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Run-On-Launch", value.asBoolean()); + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Run-On-Launch", value.asBoolean()); this.host.plugin.config.save(); } c++; @@ -364,12 +366,12 @@ public class ExternalSubServer extends SubServerContainer { break; case "incompatible": if (value.isList()) { - for (String oname : value.asStringList()) { + for (String oname : (List) value.asStringList()) { SubServer oserver = host.plugin.api.getSubServer(oname); if (oserver != null && isCompatible(oserver)) toggleCompatibility(oserver); } - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Incompatible", value.asStringList()); + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Incompatible", value.asStringList()); this.host.plugin.config.save(); } c++; @@ -378,8 +380,8 @@ public class ExternalSubServer extends SubServerContainer { case "restricted": if (value.isBoolean()) { Util.reflect(BungeeServerInfo.class.getDeclaredField("restricted"), this, value.asBoolean()); - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Restricted", isRestricted()); + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Restricted", isRestricted()); this.host.plugin.config.save(); } c++; @@ -388,8 +390,8 @@ public class ExternalSubServer extends SubServerContainer { case "hidden": if (value.isBoolean()) { Util.reflect(ServerContainer.class.getDeclaredField("hidden"), this, value.asBoolean()); - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Hidden", isHidden()); + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Hidden", isHidden()); this.host.plugin.config.save(); } c++; @@ -422,7 +424,7 @@ public class ExternalSubServer extends SubServerContainer { } if (!isRunning() && forward == null && state) start(player); return c; - } private void waitFor(Util.ReturnRunnable method, V value) throws InterruptedException { + } private void waitFor(ReturnRunnable method, V value) throws InterruptedException { while (method.run() != value) { Thread.sleep(250); } 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 0ac2b7fa..afc987db 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Host.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Host.java @@ -1,16 +1,14 @@ package net.ME1312.SubServers.Bungee.Host; import com.google.common.collect.Range; -import com.google.gson.Gson; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLValue; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Map.ObjectMapValue; import net.ME1312.SubServers.Bungee.Library.Exception.InvalidHostException; import net.ME1312.SubServers.Bungee.Library.Exception.InvalidServerException; -import net.ME1312.SubServers.Bungee.Library.ExtraDataHandler; -import net.ME1312.SubServers.Bungee.Library.NamedContainer; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Network.ClientHandler; -import net.ME1312.SubServers.Bungee.Network.SubDataServer; +import net.ME1312.Galaxi.Library.ExtraDataHandler; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Server.ClientHandler; +import net.ME1312.SubServers.Bungee.SubAPI; import net.ME1312.SubServers.Bungee.SubPlugin; import java.net.InetAddress; @@ -21,7 +19,7 @@ import java.util.UUID; * Host Layout Class */ public abstract class Host implements ExtraDataHandler { - private YAMLSection extra = new YAMLSection(); + private ObjectMap extra = new ObjectMap(); private final String signature; private String nick = null; @@ -42,7 +40,7 @@ public abstract class Host implements ExtraDataHandler { if (!ports.hasLowerBound() || !ports.hasUpperBound()) throw new InvalidHostException("Port range is not bound"); if (Util.isNull(plugin, name, enabled, ports, log, address, directory, gitBash)) throw new NullPointerException(); signature = plugin.api.signAnonymousObject(); - SubDataServer.allowConnection(address.getHostAddress()); + SubAPI.getInstance().getSubDataNetwork().getProtocol().whitelist(address.getHostAddress()); } /** @@ -305,13 +303,51 @@ public abstract class Host implements ExtraDataHandler { } /** - * Forces the Removal of a SubServer + * Forces the Removal of a SubServer (will move to 'Recently Deleted') * * @param player Player Removing * @param name SubServer Name */ public abstract boolean forceRemoveSubServer(UUID player, String name) throws InterruptedException; + /** + * Delete a SubServer (will move to 'Recently Deleted') + * + * @param name SubServer Name + * @return Success Status + */ + public boolean recycleSubServer(String name) throws InterruptedException { + return recycleSubServer(null, name); + } + + /** + * Delete a SubServer + * + * @param player Player Deleting + * @param name SubServer Name + * @return Success Status + */ + public abstract boolean recycleSubServer(UUID player, String name) throws InterruptedException; + + /** + * Forced the Deletion of a SubServer (will move to 'Recently Deleted') + * + * @param name SubServer Name + * @return Success Status + */ + public boolean forceRecycleSubServer(String name) throws InterruptedException { + return forceRecycleSubServer(null, name); + } + + /** + * Forces the Deletion of a SubServer (will move to 'Recently Deleted') + * + * @param player Player Deleting + * @param name SubServer Name + * @return Success Status + */ + public abstract boolean forceRecycleSubServer(UUID player, String name) throws InterruptedException; + /** * Delete a SubServer * @@ -338,7 +374,7 @@ public abstract class Host implements ExtraDataHandler { * @return Success Status */ public boolean forceDeleteSubServer(String name) throws InterruptedException { - return deleteSubServer(null, name); + return forceDeleteSubServer(null, name); } /** @@ -372,13 +408,13 @@ public abstract class Host implements ExtraDataHandler { } @Override - public YAMLValue getExtra(String handle) { + public ObjectMapValue getExtra(String handle) { if (Util.isNull(handle)) throw new NullPointerException(); return extra.get(handle); } @Override - public YAMLSection getExtra() { + public ObjectMap getExtra() { return extra.clone(); } @@ -388,10 +424,8 @@ public abstract class Host implements ExtraDataHandler { extra.remove(handle); } - @Override - @SuppressWarnings("unchecked") - public String toString() { - YAMLSection hinfo = new YAMLSection(); + public ObjectMap forSubData() { + ObjectMap hinfo = new ObjectMap(); hinfo.set("type", "Host"); hinfo.set("name", getName()); hinfo.set("display", getDisplayName()); @@ -400,21 +434,21 @@ public abstract class Host implements ExtraDataHandler { hinfo.set("address", getAddress().getHostAddress()); hinfo.set("dir", getPath()); - YAMLSection cinfo = new YAMLSection(); - YAMLSection templates = new YAMLSection(); + ObjectMap cinfo = new ObjectMap(); + ObjectMap templates = new ObjectMap(); for (SubCreator.ServerTemplate template : getCreator().getTemplates().values()) - templates.set(template.getName(), new YAMLSection(new Gson().fromJson(template.toString(), Map.class))); + templates.set(template.getName(), template.forSubData()); cinfo.set("templates", templates); hinfo.set("creator", cinfo); - YAMLSection servers = new YAMLSection(); + ObjectMap servers = new ObjectMap(); for (SubServer server : getSubServers().values()) { - servers.set(server.getName(), new YAMLSection(new Gson().fromJson(server.toString(), Map.class))); + servers.set(server.getName(), server.forSubData()); } hinfo.set("servers", servers); - if (this instanceof ClientHandler && ((ClientHandler) this).getSubData() != null) hinfo.set("subdata", ((ClientHandler) this).getSubData().getAddress().toString()); + if (this instanceof ClientHandler && ((ClientHandler) this).getSubData() != null) hinfo.set("subdata", ((ClientHandler) this).getSubData().getID()); hinfo.set("signature", signature); hinfo.set("extra", getExtra()); - return hinfo.toJSON(); + return hinfo; } } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalHost.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalHost.java index 0e6bd753..2bf2eff3 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalHost.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalHost.java @@ -2,15 +2,16 @@ package net.ME1312.SubServers.Bungee.Host.Internal; import com.dosse.upnp.UPnP; import com.google.common.collect.Range; +import net.ME1312.Galaxi.Library.Config.YAMLSection; import net.ME1312.SubServers.Bungee.Event.SubAddServerEvent; import net.ME1312.SubServers.Bungee.Event.SubRemoveServerEvent; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; +import net.ME1312.Galaxi.Library.Map.ObjectMap; import net.ME1312.SubServers.Bungee.Library.Exception.InvalidServerException; import net.ME1312.SubServers.Bungee.Host.Host; import net.ME1312.SubServers.Bungee.Host.SubCreator; import net.ME1312.SubServers.Bungee.Host.SubServer; -import net.ME1312.SubServers.Bungee.Library.UniversalFile; -import net.ME1312.SubServers.Bungee.Library.Util; +import net.ME1312.Galaxi.Library.UniversalFile; +import net.ME1312.Galaxi.Library.Util; import net.ME1312.SubServers.Bungee.SubPlugin; import java.io.File; @@ -103,7 +104,7 @@ public class InternalHost extends Host { plugin.getPluginManager().callEvent(event); if (!event.isCancelled()) { servers.put(name.toLowerCase(), server); - if (UPnP.isUPnPAvailable() && plugin.config.get().getSection("Settings").getSection("UPnP", new YAMLSection()).getBoolean("Forward-Servers", false)) UPnP.openPortTCP(port); + if (UPnP.isUPnPAvailable() && plugin.config.get().getMap("Settings").getMap("UPnP", new ObjectMap()).getBoolean("Forward-Servers", false)) UPnP.openPortTCP(port); return server; } else { return null; @@ -143,6 +144,96 @@ public class InternalHost extends Host { return true; } + @Override + public boolean recycleSubServer(UUID player, String name) throws InterruptedException { + if (Util.isNull(name)) throw new NullPointerException(); + String server = servers.get(name.toLowerCase()).getName(); + File from = new File(getPath(), servers.get(server.toLowerCase()).getPath()); + if (removeSubServer(player, server)) { + new Thread(() -> { + UniversalFile to = new UniversalFile(plugin.dir, "SubServers:Recently Deleted:" + server.toLowerCase()); + try { + if (from.exists()) { + System.out.println("SubServers > Moving Files..."); + if (to.exists()) { + if (to.isDirectory()) Util.deleteDirectory(to); + else to.delete(); + } + to.mkdirs(); + Util.copyDirectory(from, to); + Util.deleteDirectory(from); + } + } catch (Exception e) { + e.printStackTrace(); + } + + System.out.println("SubServers > Saving..."); + YAMLSection info = (plugin.config.get().getMap("Servers").getKeys().contains(server))?new YAMLSection(plugin.config.get().getMap("Servers").getMap(server).get()):new YAMLSection(); + info.set("Name", server); + info.set("Timestamp", Calendar.getInstance().getTime().getTime()); + try { + if (plugin.config.get().getMap("Servers").getKeys().contains(server)) { + plugin.config.get().getMap("Servers").remove(server); + plugin.config.save(); + } + if (!to.exists()) to.mkdirs(); + FileWriter writer = new FileWriter(new File(to, "info.json")); + writer.write(info.toJSON().toString()); + writer.close(); + } catch (Exception e) { + e.printStackTrace(); + } + System.out.println("SubServers > Deleted SubServer: " + server); + }, "SubServers.Bungee::Internal_Server_Recycler(" + name + ')').start(); + return true; + } else return false; + } + + @Override + public boolean forceRecycleSubServer(UUID player, String name) throws InterruptedException { + if (Util.isNull(name)) throw new NullPointerException(); + String server = servers.get(name.toLowerCase()).getName(); + File from = new File(getPath(), servers.get(server.toLowerCase()).getPath()); + if (forceRemoveSubServer(player, server)) { + new Thread(() -> { + UniversalFile to = new UniversalFile(plugin.dir, "SubServers:Recently Deleted:" + server.toLowerCase()); + try { + if (from.exists()) { + System.out.println("SubServers > Moving Files..."); + if (to.exists()) { + if (to.isDirectory()) Util.deleteDirectory(to); + else to.delete(); + } + to.mkdirs(); + Util.copyDirectory(from, to); + Util.deleteDirectory(from); + } + } catch (Exception e) { + e.printStackTrace(); + } + + System.out.println("SubServers > Saving..."); + YAMLSection info = (plugin.config.get().getMap("Servers").getKeys().contains(server))?new YAMLSection(plugin.config.get().getMap("Servers").getMap(server).get()):new YAMLSection(); + info.set("Name", server); + info.set("Timestamp", Calendar.getInstance().getTime().getTime()); + try { + if (plugin.config.get().getMap("Servers").getKeys().contains(server)) { + plugin.config.get().getMap("Servers").remove(server); + plugin.config.save(); + } + if (!to.exists()) to.mkdirs(); + FileWriter writer = new FileWriter(new File(to, "info.json"), false); + writer.write(info.toJSON().toString()); + writer.close(); + } catch (Exception e) { + e.printStackTrace(); + } + System.out.println("SubServers > Deleted SubServer: " + server); + }, "SubServers.Bungee::Internal_Server_Recycler(" + name + ')').start(); + return true; + } else return false; + } + @Override public boolean deleteSubServer(UUID player, String name) throws InterruptedException { if (Util.isNull(name)) throw new NullPointerException(); @@ -159,7 +250,6 @@ public class InternalHost extends Host { else to.delete(); } to.mkdirs(); - Util.copyDirectory(from, to); Util.deleteDirectory(from); } } catch (Exception e) { @@ -167,17 +257,17 @@ public class InternalHost extends Host { } System.out.println("SubServers > Saving..."); - YAMLSection info = (plugin.config.get().getSection("Servers").getKeys().contains(server))?plugin.config.get().getSection("Servers").getSection(server).clone():new YAMLSection(); + YAMLSection info = (plugin.config.get().getMap("Servers").getKeys().contains(server))?new YAMLSection(plugin.config.get().getMap("Servers").getMap(server).get()):new YAMLSection(); info.set("Name", server); info.set("Timestamp", Calendar.getInstance().getTime().getTime()); try { - if (plugin.config.get().getSection("Servers").getKeys().contains(server)) { - plugin.config.get().getSection("Servers").remove(server); + if (plugin.config.get().getMap("Servers").getKeys().contains(server)) { + plugin.config.get().getMap("Servers").remove(server); plugin.config.save(); } if (!to.exists()) to.mkdirs(); FileWriter writer = new FileWriter(new File(to, "info.json")); - writer.write(info.toJSON()); + writer.write(info.toJSON().toString()); writer.close(); } catch (Exception e) { e.printStackTrace(); @@ -212,17 +302,17 @@ public class InternalHost extends Host { } System.out.println("SubServers > Saving..."); - YAMLSection info = (plugin.config.get().getSection("Servers").getKeys().contains(server))?plugin.config.get().getSection("Servers").getSection(server).clone():new YAMLSection(); + YAMLSection info = (plugin.config.get().getMap("Servers").getKeys().contains(server))?new YAMLSection(plugin.config.get().getMap("Servers").getMap(server).get()):new YAMLSection(); info.set("Name", server); info.set("Timestamp", Calendar.getInstance().getTime().getTime()); try { - if (plugin.config.get().getSection("Servers").getKeys().contains(server)) { - plugin.config.get().getSection("Servers").remove(server); + if (plugin.config.get().getMap("Servers").getKeys().contains(server)) { + plugin.config.get().getMap("Servers").remove(server); plugin.config.save(); } if (!to.exists()) to.mkdirs(); FileWriter writer = new FileWriter(new File(to, "info.json"), false); - writer.write(info.toJSON()); + writer.write(info.toJSON().toString()); writer.close(); } catch (Exception e) { e.printStackTrace(); diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubCreator.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubCreator.java index f90dbbc4..dad9f93d 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubCreator.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubCreator.java @@ -2,27 +2,27 @@ package net.ME1312.SubServers.Bungee.Host.Internal; import com.google.common.collect.Range; import com.google.gson.Gson; +import net.ME1312.Galaxi.Library.*; +import net.ME1312.Galaxi.Library.Callback.Callback; +import net.ME1312.Galaxi.Library.Config.YAMLSection; +import net.ME1312.Galaxi.Library.Map.ObjectMapValue; import net.ME1312.SubServers.Bungee.Event.SubCreateEvent; import net.ME1312.SubServers.Bungee.Host.*; -import net.ME1312.SubServers.Bungee.Library.*; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLConfig; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; +import net.ME1312.Galaxi.Library.Config.YAMLConfig; +import net.ME1312.Galaxi.Library.Map.ObjectMap; import net.ME1312.SubServers.Bungee.Library.Exception.InvalidServerException; import net.ME1312.SubServers.Bungee.Library.Exception.SubCreatorException; -import net.ME1312.SubServers.Bungee.Library.Version.Version; +import net.ME1312.Galaxi.Library.Version.Version; import net.ME1312.SubServers.Bungee.SubAPI; import net.ME1312.SubServers.Bungee.SubPlugin; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.InputSource; +import net.md_5.bungee.api.ChatColor; -import javax.xml.parsers.DocumentBuilderFactory; import java.io.*; import java.lang.reflect.InvocationTargetException; import java.net.InetSocketAddress; import java.net.URL; import java.nio.charset.Charset; +import java.nio.file.Files; import java.util.*; import java.util.regex.Pattern; @@ -59,8 +59,8 @@ public class InternalSubCreator extends SubCreator { this.callback = callback; } - private YAMLSection build(File dir, ServerTemplate template, List history) throws SubCreatorException { - YAMLSection server = new YAMLSection(); + private ObjectMap build(File dir, ServerTemplate template, List history) throws SubCreatorException { + ObjectMap server = new ObjectMap(); Version version = this.version; HashMap var = new HashMap(); boolean error = false; @@ -69,7 +69,7 @@ public class InternalSubCreator extends SubCreator { for (String other : template.getBuildOptions().getStringList("Import", new ArrayList())) { if (templates.keySet().contains(other.toLowerCase())) { if (templates.get(other.toLowerCase()).isEnabled()) { - YAMLSection config = build(dir, templates.get(other.toLowerCase()), history); + ObjectMap config = build(dir, templates.get(other.toLowerCase()), history); if (config == null) { throw new SubCreatorException(); } else { @@ -89,34 +89,36 @@ public class InternalSubCreator extends SubCreator { var.put("name", name); var.put("template", template.getName()); var.put("type", template.getType().toString().toUpperCase()); - var.put("version", version.toString()); + if (version != null) var.put("version", version.toString()); var.put("address", host.getAddress().getHostAddress()); var.put("port", Integer.toString(port)); switch (template.getType()) { case SPONGE: case FORGE: - System.out.println(name + File.separator + "Creator > Searching Versions..."); - YAMLSection spversionmanifest = new YAMLSection(new Gson().fromJson("{\"versions\":" + Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://dl-api.spongepowered.org/v1/org.spongepowered/sponge" + ((template.getType() == ServerType.FORGE)?"forge":"vanilla") + "/downloads?type=stable&minecraft=" + version).openStream(), Charset.forName("UTF-8")))) + '}', Map.class)); + if (version != null) { + System.out.println(name + File.separator + "Creator > Searching Versions..."); + ObjectMap spversionmanifest = new ObjectMap(new Gson().fromJson("{\"versions\":" + Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://dl-api.spongepowered.org/v1/org.spongepowered/sponge" + ((template.getType() == ServerType.FORGE)?"forge":"vanilla") + "/downloads?type=stable&minecraft=" + version).openStream(), Charset.forName("UTF-8")))) + '}', Map.class)); - YAMLSection spprofile = null; - Version spversion = null; - for (YAMLSection profile : spversionmanifest.getSectionList("versions")) { - if (profile.getSection("dependencies").getRawString("minecraft").equalsIgnoreCase(version.toString()) && (spversion == null || new Version(profile.getRawString("version")).compareTo(spversion) >= 0)) { - spprofile = profile; - spversion = new Version(profile.getRawString("version")); + ObjectMap spprofile = null; + Version spversion = null; + for (ObjectMap profile : spversionmanifest.getMapList("versions")) { + if (profile.getMap("dependencies").getRawString("minecraft").equalsIgnoreCase(version.toString()) && (spversion == null || new Version(profile.getRawString("version")).compareTo(spversion) >= 0)) { + spprofile = profile; + spversion = new Version(profile.getRawString("version")); + } } - } - if (spversion == null) - throw new InvalidServerException("Cannot find Sponge version for Minecraft " + version.toString()); - System.out.println(name + File.separator + "Creator > Found \"sponge" + ((template.getType() == ServerType.FORGE)?"forge":"vanilla") + "-" + spversion.toString() + '"'); + if (spversion == null) + throw new InvalidServerException("Cannot find Sponge version for Minecraft " + version.toString()); + System.out.println(name + File.separator + "Creator > Found \"sponge" + ((template.getType() == ServerType.FORGE)?"forge":"vanilla") + "-" + spversion.toString() + '"'); - if (template.getType() == ServerType.FORGE) { - Version mcfversion = new Version(spprofile.getSection("dependencies").getRawString("minecraft") + '-' + spprofile.getSection("dependencies").getRawString("forge")); - System.out.println(name + File.separator + "Creator > Found \"forge-" + mcfversion.toString() + '"'); + if (template.getType() == ServerType.FORGE) { + Version mcfversion = new Version(((spprofile.getMap("dependencies").getRawString("forge").contains("-"))?"":spprofile.getMap("dependencies").getRawString("minecraft") + '-') + spprofile.getMap("dependencies").getRawString("forge")); + System.out.println(name + File.separator + "Creator > Found \"forge-" + mcfversion.toString() + '"'); - var.put("mcf_version", mcfversion.toString()); + var.put("mcf_version", mcfversion.toString()); + } + var.put("sp_version", spversion.toString()); } - var.put("sp_version", spversion.toString()); break; } } catch (Exception e) { @@ -141,7 +143,7 @@ public class InternalSubCreator extends SubCreator { ProcessBuilder pb = new ProcessBuilder().command(Executable.parse(gitBash, template.getBuildOptions().getRawString("Executable"))).directory(dir); pb.environment().putAll(var); process = pb.start(); - log.file = new File(dir, "SubCreator-" + template.getName() + "-" + version.toString() + ".log"); + log.file = new File(dir, "SubCreator-" + template.getName() + ((version != null)?"-"+version.toString():"") + ".log"); log.process = process; log.start(); @@ -173,8 +175,8 @@ public class InternalSubCreator extends SubCreator { public void run() { UniversalFile dir = new UniversalFile(new File(host.getPath()), name); dir.mkdirs(); - YAMLSection server = new YAMLSection(); - YAMLSection config; + ObjectMap server = new ObjectMap(); + ObjectMap config; try { config = build(dir, template, new LinkedList<>()); generateProperties(dir, port); @@ -192,7 +194,7 @@ public class InternalSubCreator extends SubCreator { if (host.plugin.exServers.keySet().contains(name.toLowerCase())) host.plugin.exServers.remove(name.toLowerCase()); - config = new YAMLSection((Map) convert(config.get(), new NamedContainer<>("$player$", (player == null)?"":player.toString()), new NamedContainer<>("$name$", name), + config = new ObjectMap((Map) convert(config.get(), new NamedContainer<>("$player$", (player == null)?"":player.toString()), new NamedContainer<>("$name$", name), new NamedContainer<>("$template$", template.getName()), new NamedContainer<>("$type$", template.getType().toString()), new NamedContainer<>("$version$", version.toString().replace(" ", "@")), new NamedContainer<>("$address$", host.getAddress().getHostAddress()), new NamedContainer<>("$port$", Integer.toString(port)))); @@ -213,15 +215,15 @@ public class InternalSubCreator extends SubCreator { server.set("Hidden", false); server.setAll(config); - SubServer subserver = host.addSubServer(player, name, server.getBoolean("Enabled"), port, server.getColoredString("Motd", '&'), server.getBoolean("Log"), server.getRawString("Directory"), + SubServer subserver = host.addSubServer(player, name, server.getBoolean("Enabled"), port, ChatColor.translateAlternateColorCodes('&', server.getString("Motd")), server.getBoolean("Log"), server.getRawString("Directory"), server.getRawString("Executable"), server.getRawString("Stop-Command"), server.getBoolean("Hidden"), server.getBoolean("Restricted")); if (server.getString("Display").length() > 0) subserver.setDisplayName(server.getString("Display")); for (String group : server.getStringList("Group")) subserver.addGroup(group); SubServer.StopAction action = Util.getDespiteException(() -> SubServer.StopAction.valueOf(server.getRawString("Stop-Action").toUpperCase().replace('-', '_').replace(' ', '_')), null); if (action != null) subserver.setStopAction(action); - if (server.contains("Extra")) for (String extra : server.getSection("Extra").getKeys()) - subserver.addExtra(extra, server.getSection("Extra").getObject(extra)); - host.plugin.config.get().getSection("Servers").set(name, server); + if (server.contains("Extra")) for (String extra : server.getMap("Extra").getKeys()) + subserver.addExtra(extra, server.getMap("Extra").getObject(extra)); + host.plugin.config.get().getMap("Servers").set(name, server); host.plugin.config.save(); if (template.getBuildOptions().getBoolean("Run-On-Finish", true)) subserver.start(); @@ -287,8 +289,8 @@ public class InternalSubCreator extends SubCreator { for (File file : new UniversalFile(host.plugin.dir, "SubServers:Templates").listFiles()) { try { if (file.isDirectory() && !file.getName().endsWith(".x")) { - YAMLSection config = (new UniversalFile(file, "template.yml").exists()) ? new YAMLConfig(new UniversalFile(file, "template.yml")).get().getSection("Template", new YAMLSection()) : new YAMLSection(); - ServerTemplate template = new ServerTemplate(file.getName(), config.getBoolean("Enabled", true), config.getRawString("Icon", "::NULL::"), file, config.getSection("Build", new YAMLSection()), config.getSection("Settings", new YAMLSection())); + ObjectMap config = (new UniversalFile(file, "template.yml").exists()) ? new YAMLConfig(new UniversalFile(file, "template.yml")).get().getMap("Template", new ObjectMap()) : new ObjectMap(); + ServerTemplate template = new ServerTemplate(file.getName(), config.getBoolean("Enabled", true), config.getRawString("Icon", "::NULL::"), file, config.getMap("Build", new ObjectMap()), config.getMap("Settings", new ObjectMap())); templates.put(file.getName().toLowerCase(), template); if (config.getKeys().contains("Display")) template.setDisplayName(config.getString("Display")); } @@ -302,7 +304,7 @@ public class InternalSubCreator extends SubCreator { @SuppressWarnings("deprecation") @Override public boolean create(UUID player, String name, ServerTemplate template, Version version, Integer port, Callback callback) { - if (Util.isNull(name, template, version)) throw new NullPointerException(); + if (Util.isNull(name, template)) throw new NullPointerException(); if (host.isAvailable() && host.isEnabled() && template.isEnabled() && !SubAPI.getInstance().getSubServers().keySet().contains(name.toLowerCase()) && !SubCreator.isReserved(name)) { StackTraceElement[] origin = new Exception().getStackTrace(); @@ -450,6 +452,7 @@ public class InternalSubCreator extends SubCreator { private void generateClient(File dir, ServerType type, String name) throws IOException { if (new UniversalFile(dir, "subservers.client").exists()) { + Files.delete(new UniversalFile(dir, "subservers.client").toPath()); if (type == ServerType.SPIGOT) { if (!new UniversalFile(dir, "plugins").exists()) new UniversalFile(dir, "plugins").mkdirs(); Util.copyFromJar(SubPlugin.class.getClassLoader(), "net/ME1312/SubServers/Bungee/Library/Files/client.jar", new UniversalFile(dir, "plugins:SubServers.Client.jar").getPath()); @@ -458,13 +461,16 @@ public class InternalSubCreator extends SubCreator { Util.copyFromJar(SubPlugin.class.getClassLoader(), "net/ME1312/SubServers/Bungee/Library/Files/client.jar", new UniversalFile(dir, "mods:SubServers.Client.jar").getPath()); } YAMLSection config = new YAMLSection(); - FileWriter writer = new FileWriter(new UniversalFile(dir, "subservers.client"), false); + FileWriter writer = new FileWriter(new UniversalFile(dir, "subdata.json"), false); config.set("Name", name); - config.set("Address", host.plugin.config.get().getSection("Settings").getSection("SubData").getRawString("Address", "127.0.0.1").replace("0.0.0.0", "127.0.0.1")); - config.set("Password", host.plugin.config.get().getSection("Settings").getSection("SubData").getRawString("Password", "")); - config.set("Encryption", host.plugin.config.get().getSection("Settings").getSection("SubData").getRawString("Encryption", "NONE")); - writer.write(config.toJSON()); + config.set("Address", host.plugin.config.get().getMap("Settings").getMap("SubData").getRawString("Address", "127.0.0.1").replace("0.0.0.0", "127.0.0.1")); + config.set("Password", host.plugin.config.get().getMap("Settings").getMap("SubData").getRawString("Password", "")); + writer.write(config.toJSON().toString()); writer.close(); + + if (new UniversalFile("SubServers:subdata.rsa.key").exists()) { + Files.copy(new UniversalFile("SubServers:subdata.rsa.key").toPath(), new UniversalFile(dir, "subdata.rsa.key").toPath()); + } } } private void generateProperties(File dir, int port) throws IOException { diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubLogger.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubLogger.java index 1fb05913..f7c95383 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubLogger.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubLogger.java @@ -2,16 +2,14 @@ package net.ME1312.SubServers.Bungee.Host.Internal; import net.ME1312.SubServers.Bungee.Host.SubLogFilter; import net.ME1312.SubServers.Bungee.Host.SubLogger; -import net.ME1312.SubServers.Bungee.Library.Container; -import net.ME1312.SubServers.Bungee.Library.NamedContainer; -import net.ME1312.SubServers.Bungee.Library.Util; +import net.ME1312.Galaxi.Library.Container; +import net.ME1312.Galaxi.Library.Util; import net.ME1312.SubServers.Bungee.SubAPI; import net.md_5.bungee.api.ProxyServer; import java.io.*; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; -import java.util.LinkedList; import java.util.List; import java.util.logging.Level; import java.util.regex.Matcher; diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubServer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubServer.java index 17556f2b..e107fbd3 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubServer.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubServer.java @@ -2,20 +2,20 @@ package net.ME1312.SubServers.Bungee.Host.Internal; import net.ME1312.SubServers.Bungee.Event.*; import net.ME1312.SubServers.Bungee.Host.*; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLValue; -import net.ME1312.SubServers.Bungee.Library.Container; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Map.ObjectMapValue; +import net.ME1312.Galaxi.Library.Container; import net.ME1312.SubServers.Bungee.Library.Exception.InvalidServerException; -import net.ME1312.SubServers.Bungee.Library.NamedContainer; -import net.ME1312.SubServers.Bungee.Library.UniversalFile; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Library.Version.Version; +import net.ME1312.Galaxi.Library.NamedContainer; +import net.ME1312.Galaxi.Library.UniversalFile; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.Galaxi.Library.Version.Version; import net.ME1312.SubServers.Bungee.SubPlugin; import net.md_5.bungee.BungeeServerInfo; +import net.md_5.bungee.api.ChatColor; import java.io.*; import java.lang.reflect.Field; -import java.lang.reflect.Method; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; @@ -147,14 +147,16 @@ public class InternalSubServer extends SubServerContainer { command = null; history.clear(); - if (stopaction == StopAction.REMOVE_SERVER || stopaction == StopAction.DELETE_SERVER) { + if (stopaction == StopAction.REMOVE_SERVER || stopaction == StopAction.RECYCLE_SERVER || stopaction == StopAction.DELETE_SERVER) { try { - if (stopaction == StopAction.DELETE_SERVER) { + if (stopaction == StopAction.RECYCLE_SERVER) { + host.recycleSubServer(getName()); + } else if (stopaction == StopAction.DELETE_SERVER) { host.deleteSubServer(getName()); } else { try { - if (host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - host.plugin.config.get().getSection("Servers").remove(getName()); + if (host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + host.plugin.config.get().getMap("Servers").remove(getName()); host.plugin.config.save(); } } catch (IOException e) { @@ -255,16 +257,16 @@ public class InternalSubServer extends SubServerContainer { } else return false; } - @SuppressWarnings("deprecation") - public int edit(UUID player, YAMLSection edit) { + @SuppressWarnings({"deprecation", "unchecked"}) + public int edit(UUID player, ObjectMap edit) { int c = 0; boolean state = isRunning(); SubServer forward = null; - YAMLSection pending = edit.clone(); + ObjectMap pending = edit.clone(); for (String key : edit.getKeys()) { pending.remove(key); - YAMLValue value = edit.get(key); - SubEditServerEvent event = new SubEditServerEvent(player, this, new NamedContainer(key, value), true); + ObjectMapValue value = edit.get(key); + SubEditServerEvent event = new SubEditServerEvent(player, this, new NamedContainer(key, value), true); host.plugin.getPluginManager().callEvent(event); if (!event.isCancelled()) { try { @@ -273,10 +275,10 @@ public class InternalSubServer extends SubServerContainer { if (value.isString() && host.removeSubServer(player, getName())) { SubServer server = host.addSubServer(player, value.asRawString(), isEnabled(), getAddress().getPort(), getMotd(), isLogging(), getPath(), getExecutable(), getStopCommand(), isHidden(), isRestricted()); if (server != null) { - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - YAMLSection config = this.host.plugin.config.get().getSection("Servers").getSection(getName()); - this.host.plugin.config.get().getSection("Servers").remove(getName()); - this.host.plugin.config.get().getSection("Servers").set(server.getName(), config); + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + ObjectMap config = this.host.plugin.config.get().getMap("Servers").getMap(getName()); + this.host.plugin.config.get().getMap("Servers").remove(getName()); + this.host.plugin.config.get().getMap("Servers").set(server.getName(), config); this.host.plugin.config.save(); } forward = server; @@ -295,11 +297,11 @@ public class InternalSubServer extends SubServerContainer { } f.setAccessible(false); logger.name = getDisplayName(); - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { if (getName().equals(getDisplayName())) { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).remove("Display"); + this.host.plugin.config.get().getMap("Servers").getMap(getName()).remove("Display"); } else { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Display", getDisplayName()); + this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Display", getDisplayName()); } this.host.plugin.config.save(); } @@ -309,8 +311,8 @@ public class InternalSubServer extends SubServerContainer { case "enabled": if (value.isBoolean()) { enabled = value.asBoolean(); - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Enabled", isEnabled()); + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Enabled", isEnabled()); this.host.plugin.config.save(); } c++; @@ -319,8 +321,8 @@ public class InternalSubServer extends SubServerContainer { case "group": if (value.isList()) { Util.reflect(ServerContainer.class.getDeclaredField("groups"), this, value.asStringList()); - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Group", value.asStringList()); + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Group", value.asStringList()); this.host.plugin.config.save(); } c++; @@ -330,8 +332,8 @@ public class InternalSubServer extends SubServerContainer { if (value.isString() && host.removeSubServer(player, getName())) { SubServer server = this.host.plugin.api.getHost(value.asRawString()).addSubServer(player, getName(), isEnabled(), getAddress().getPort(), getMotd(), isLogging(), getPath(), getExecutable(), getStopCommand(), isHidden(), isRestricted()); if (server != null) { - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Host", server.getHost().getName()); + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Host", server.getHost().getName()); this.host.plugin.config.save(); } forward = server; @@ -343,8 +345,8 @@ public class InternalSubServer extends SubServerContainer { if (value.isNumber() && host.removeSubServer(player, getName())) { SubServer server = host.addSubServer(player, getName(), isEnabled(), value.asInt(), getMotd(), isLogging(), getPath(), getExecutable(), getStopCommand(), isHidden(), isRestricted()); if (server != null) { - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Port", server.getAddress().getPort()); + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Port", server.getAddress().getPort()); this.host.plugin.config.save(); } forward = server; @@ -354,9 +356,9 @@ public class InternalSubServer extends SubServerContainer { break; case "motd": if (value.isString()) { - Util.reflect(BungeeServerInfo.class.getDeclaredField("motd"), this, value.asColoredString('&')); - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Motd", value.asString()); + Util.reflect(BungeeServerInfo.class.getDeclaredField("motd"), this, ChatColor.translateAlternateColorCodes('&', value.asString())); + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Motd", value.asString()); this.host.plugin.config.save(); } c++; @@ -365,8 +367,8 @@ public class InternalSubServer extends SubServerContainer { case "log": if (value.isBoolean()) { log.set(value.asBoolean()); - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Log", isLogging()); + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Log", isLogging()); this.host.plugin.config.save(); } c++; @@ -380,8 +382,8 @@ public class InternalSubServer extends SubServerContainer { } dir = value.asRawString(); directory = new File(getHost().getPath(), value.asRawString()); - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Directory", getPath()); + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Directory", getPath()); this.host.plugin.config.save(); } c++; @@ -394,8 +396,8 @@ public class InternalSubServer extends SubServerContainer { waitFor(); } executable = value.asRawString(); - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Executable", value.asRawString()); + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Executable", value.asRawString()); this.host.plugin.config.save(); } c++; @@ -404,8 +406,8 @@ public class InternalSubServer extends SubServerContainer { case "stop-cmd": if (value.isString()) { stopcmd = value.asRawString(); - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Stop-Command", getStopCommand()); + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Stop-Command", getStopCommand()); this.host.plugin.config.save(); } c++; @@ -416,8 +418,8 @@ public class InternalSubServer extends SubServerContainer { StopAction action = Util.getDespiteException(() -> StopAction.valueOf(value.asRawString().toUpperCase().replace('-', '_').replace(' ', '_')), null); if (action != null) { stopaction = action; - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Stop-Action", getStopAction().toString()); + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Stop-Action", getStopAction().toString()); this.host.plugin.config.save(); } c++; @@ -431,8 +433,8 @@ public class InternalSubServer extends SubServerContainer { break; case "auto-run": if (value.isBoolean()) { - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Run-On-Launch", value.asBoolean()); + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Run-On-Launch", value.asBoolean()); this.host.plugin.config.save(); } c++; @@ -440,12 +442,12 @@ public class InternalSubServer extends SubServerContainer { break; case "incompatible": if (value.isList()) { - for (String oname : value.asStringList()) { + for (String oname : (List) value.asStringList()) { SubServer oserver = host.plugin.api.getSubServer(oname); if (oserver != null && isCompatible(oserver)) toggleCompatibility(oserver); } - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Incompatible", value.asStringList()); + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Incompatible", value.asStringList()); this.host.plugin.config.save(); } c++; @@ -454,8 +456,8 @@ public class InternalSubServer extends SubServerContainer { case "restricted": if (value.isBoolean()) { Util.reflect(BungeeServerInfo.class.getDeclaredField("restricted"), this, value.asBoolean()); - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Restricted", isRestricted()); + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Restricted", isRestricted()); this.host.plugin.config.save(); } c++; @@ -464,8 +466,8 @@ public class InternalSubServer extends SubServerContainer { case "hidden": if (value.isBoolean()) { Util.reflect(ServerContainer.class.getDeclaredField("hidden"), this, value.asBoolean()); - if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) { - this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Hidden", isHidden()); + if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) { + this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Hidden", isHidden()); this.host.plugin.config.save(); } c++; 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 632cdcf7..778ea773 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Proxy.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Proxy.java @@ -1,13 +1,15 @@ package net.ME1312.SubServers.Bungee.Host; +import net.ME1312.SubData.Server.DataClient; +import net.ME1312.SubData.Server.SerializableClientHandler; +import net.ME1312.SubData.Server.SubDataClient; 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; -import net.ME1312.SubServers.Bungee.Library.NamedContainer; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Network.Client; -import net.ME1312.SubServers.Bungee.Network.ClientHandler; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Map.ObjectMapValue; +import net.ME1312.Galaxi.Library.ExtraDataHandler; +import net.ME1312.Galaxi.Library.NamedContainer; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Server.ClientHandler; import net.ME1312.SubServers.Bungee.SubAPI; import net.ME1312.SubServers.Bungee.SubPlugin; import net.md_5.bungee.api.ProxyServer; @@ -17,11 +19,11 @@ import java.util.*; /** * Proxy Class */ -public class Proxy implements ClientHandler, ExtraDataHandler { - private YAMLSection extra = new YAMLSection(); +public class Proxy implements SerializableClientHandler, ExtraDataHandler { + private ObjectMap extra = new ObjectMap(); private final String signature; private boolean persistent = true; - private Client client = null; + private SubDataClient client = null; private String nick = null; private final String name; @@ -37,19 +39,19 @@ public class Proxy implements ClientHandler, ExtraDataHandler { } @Override - public Client getSubData() { + public DataClient getSubData() { return client; } @Override @SuppressWarnings("deprecation") - public void setSubData(Client client) { - this.client = client; + public void setSubData(DataClient client) { + this.client = (SubDataClient) client; 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); + if (client != null && (client.getHandler() == null || !equals(client.getHandler()))) ((SubDataClient) client).setHandler(this); } /** @@ -134,13 +136,13 @@ public class Proxy implements ClientHandler, ExtraDataHandler { } @Override - public YAMLValue getExtra(String handle) { + public ObjectMapValue getExtra(String handle) { if (Util.isNull(handle)) throw new NullPointerException(); return extra.get(handle); } @Override - public YAMLSection getExtra() { + public ObjectMap getExtra() { return extra.clone(); } @@ -151,22 +153,22 @@ public class Proxy implements ClientHandler, ExtraDataHandler { } @Override - public String toString() { - YAMLSection info = new YAMLSection(); + public ObjectMap forSubData() { + ObjectMap info = new ObjectMap(); info.set("type", "Proxy"); info.set("name", getName()); info.set("display", getDisplayName()); - YAMLSection players = new YAMLSection(); + ObjectMap players = new ObjectMap(); for (NamedContainer player : getPlayers()) { - YAMLSection pinfo = new YAMLSection(); + ObjectMap pinfo = new ObjectMap(); pinfo.set("name", player.name()); players.set(player.get().toString(), pinfo); } info.set("players", players); info.set("redis", isRedis()); - if (getSubData() != null) info.set("subdata", getSubData().getAddress().toString()); + if (getSubData() != null) info.set("subdata", getSubData().getID()); info.set("signature", signature); info.set("extra", getExtra()); - return info.toJSON(); + return info; } } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Server.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Server.java index b9a738dd..73f7ecbe 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Server.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Server.java @@ -1,8 +1,9 @@ package net.ME1312.SubServers.Bungee.Host; -import net.ME1312.SubServers.Bungee.Library.ExtraDataHandler; -import net.ME1312.SubServers.Bungee.Library.NamedContainer; -import net.ME1312.SubServers.Bungee.Network.ClientHandler; +import net.ME1312.Galaxi.Library.ExtraDataHandler; +import net.ME1312.Galaxi.Library.NamedContainer; +import net.ME1312.SubData.Server.ClientHandler; +import net.ME1312.SubData.Server.SerializableClientHandler; import net.md_5.bungee.api.config.ServerInfo; import java.util.Collection; @@ -12,7 +13,7 @@ import java.util.UUID; /** * Server Interface */ -public interface Server extends ServerInfo, ClientHandler, ExtraDataHandler { +public interface Server extends ServerInfo, SerializableClientHandler, ExtraDataHandler { /** * Get the Display Name of this Server 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 329a70d2..494867d5 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/ServerContainer.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/ServerContainer.java @@ -1,24 +1,23 @@ package net.ME1312.SubServers.Bungee.Host; +import net.ME1312.SubData.Server.DataClient; +import net.ME1312.SubData.Server.SubDataClient; import net.ME1312.SubServers.Bungee.Event.SubEditServerEvent; 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.Config.YAMLValue; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Map.ObjectMapValue; import net.ME1312.SubServers.Bungee.Library.Exception.InvalidServerException; -import net.ME1312.SubServers.Bungee.Library.NamedContainer; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Network.Client; +import net.ME1312.Galaxi.Library.NamedContainer; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubServers.Bungee.Network.Packet.PacketOutExRunEvent; import net.ME1312.SubServers.Bungee.Network.Packet.PacketOutExUpdateWhitelist; -import net.ME1312.SubServers.Bungee.Network.Packet.PacketOutRunEvent; -import net.ME1312.SubServers.Bungee.Network.SubDataServer; import net.ME1312.SubServers.Bungee.SubAPI; import net.ME1312.SubServers.Bungee.SubPlugin; import net.md_5.bungee.BungeeServerInfo; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.connection.ProxiedPlayer; -import java.lang.reflect.Field; import java.net.InetSocketAddress; import java.util.*; @@ -26,8 +25,8 @@ import java.util.*; * Server Class */ public class ServerContainer extends BungeeServerInfo implements Server { - private YAMLSection extra = new YAMLSection(); - private Client client = null; + private ObjectMap extra = new ObjectMap(); + private SubDataClient client = null; private String nick = null; private List groups = new ArrayList(); private List whitelist = new ArrayList(); @@ -39,25 +38,25 @@ public class ServerContainer extends BungeeServerInfo implements Server { if (Util.isNull(name, address, motd, hidden, restricted)) throw new NullPointerException(); if (name.contains(" ")) throw new InvalidServerException("Server names cannot have spaces: " + name); signature = SubAPI.getInstance().signAnonymousObject(); - SubDataServer.allowConnection(getAddress().getAddress().getHostAddress()); + SubAPI.getInstance().getSubDataNetwork().getProtocol().whitelist(getAddress().getAddress().getHostAddress()); this.hidden = hidden; } @Override - public Client getSubData() { + public DataClient getSubData() { return client; } @Override - public void setSubData(Client client) { - this.client = client; + public void setSubData(DataClient client) { + this.client = (SubDataClient) client; for (Proxy proxy : SubAPI.getInstance().getProxies().values()) if (proxy.getSubData() != null) { - YAMLSection args = new YAMLSection(); + ObjectMap args = new ObjectMap(); args.set("server", getName()); if (client != null) args.set("address", client.getAddress().toString()); - proxy.getSubData().sendPacket(new PacketOutRunEvent((client != null)?SubNetworkConnectEvent.class:SubNetworkDisconnectEvent.class, args)); + ((SubDataClient) proxy.getSubData()).sendPacket(new PacketOutExRunEvent((client != null)?SubNetworkConnectEvent.class:SubNetworkDisconnectEvent.class, args)); } - if (client != null && (client.getHandler() == null || !equals(client.getHandler()))) client.setHandler(this); + if (client != null && (client.getHandler() == null || !equals(client.getHandler()))) ((SubDataClient) client).setHandler(this); } @Override @@ -175,14 +174,14 @@ public class ServerContainer extends BungeeServerInfo implements Server { public void whitelist(UUID player) { if (Util.isNull(player)) throw new NullPointerException(); whitelist.add(player); - for (Proxy proxy : SubAPI.getInstance().getProxies().values()) if (proxy.getSubData() != null) proxy.getSubData().sendPacket(new PacketOutExUpdateWhitelist(getName(), true, player)); + for (Proxy proxy : SubAPI.getInstance().getProxies().values()) if (proxy.getSubData() != null) ((SubDataClient) proxy.getSubData()).sendPacket(new PacketOutExUpdateWhitelist(getName(), true, player)); } @Override public void unwhitelist(UUID player) { if (Util.isNull(player)) throw new NullPointerException(); whitelist.remove(player); - for (Proxy proxy : SubAPI.getInstance().getProxies().values()) if (proxy.getSubData() != null) proxy.getSubData().sendPacket(new PacketOutExUpdateWhitelist(getName(), false, player)); + for (Proxy proxy : SubAPI.getInstance().getProxies().values()) if (proxy.getSubData() != null) ((SubDataClient) proxy.getSubData()).sendPacket(new PacketOutExUpdateWhitelist(getName(), false, player)); } @Override @@ -203,13 +202,13 @@ public class ServerContainer extends BungeeServerInfo implements Server { } @Override - public YAMLValue getExtra(String handle) { + public ObjectMapValue getExtra(String handle) { if (Util.isNull(handle)) throw new NullPointerException(); return extra.get(handle); } @Override - public YAMLSection getExtra() { + public ObjectMap getExtra() { return extra.clone(); } @@ -220,8 +219,8 @@ public class ServerContainer extends BungeeServerInfo implements Server { } @Override - public String toString() { - YAMLSection info = new YAMLSection(); + public ObjectMap forSubData() { + ObjectMap info = new ObjectMap(); info.set("type", "Server"); info.set("name", getName()); info.set("display", getDisplayName()); @@ -231,17 +230,16 @@ public class ServerContainer extends BungeeServerInfo implements Server { info.set("whitelist", whitelist); info.set("restricted", isRestricted()); info.set("hidden", isHidden()); - if (getSubData() != null) info.set("subdata", getSubData().getAddress().toString()); - YAMLSection players = new YAMLSection(); + ObjectMap players = new ObjectMap(); for (NamedContainer player : getGlobalPlayers()) { - YAMLSection pinfo = new YAMLSection(); + ObjectMap pinfo = new ObjectMap(); pinfo.set("name", player.name()); players.set(player.get().toString(), pinfo); } info.set("players", players); - if (getSubData() != null) info.set("subdata", getSubData().getAddress().toString()); + if (getSubData() != null) info.set("subdata", getSubData().getID()); info.set("signature", signature); info.set("extra", getExtra()); - return info.toJSON(); + return info; } } \ No newline at end of file diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubCreator.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubCreator.java index 75b76029..29f0c12a 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubCreator.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubCreator.java @@ -1,15 +1,14 @@ package net.ME1312.SubServers.Bungee.Host; import com.google.common.collect.Range; -import net.ME1312.SubServers.Bungee.Library.Callback; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; +import net.ME1312.Galaxi.Library.Callback.Callback; +import net.ME1312.Galaxi.Library.Map.ObjectMap; import net.ME1312.SubServers.Bungee.Library.Exception.InvalidTemplateException; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Library.Version.Version; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.Galaxi.Library.Version.Version; import net.ME1312.SubServers.Bungee.SubAPI; import java.io.File; -import java.net.InetAddress; import java.net.InetSocketAddress; import java.util.*; @@ -24,8 +23,8 @@ public abstract class SubCreator { private String icon; private File directory; private ServerType type; - private YAMLSection build; - private YAMLSection options; + private ObjectMap build; + private ObjectMap options; /** * Create a SubCreator Template @@ -35,7 +34,7 @@ public abstract class SubCreator { * @param build Build Options * @param options Configuration Options */ - public ServerTemplate(String name, boolean enabled, String icon, File directory, YAMLSection build, YAMLSection options) { + public ServerTemplate(String name, boolean enabled, String icon, File directory, ObjectMap build, ObjectMap options) { if (Util.isNull(name, enabled, directory, build, options)) throw new NullPointerException(); if (name.contains(" ")) throw new InvalidTemplateException("Template names cannot have spaces: " + name); this.name = name; @@ -137,7 +136,7 @@ public abstract class SubCreator { * * @return Build Options */ - public YAMLSection getBuildOptions() { + public ObjectMap getBuildOptions() { return build; } @@ -146,19 +145,19 @@ public abstract class SubCreator { * * @return Configuration Options */ - public YAMLSection getConfigOptions() { + public ObjectMap getConfigOptions() { return options; } - @Override - public String toString() { - YAMLSection tinfo = new YAMLSection(); + + public ObjectMap forSubData() { + ObjectMap tinfo = new ObjectMap(); tinfo.set("enabled", isEnabled()); tinfo.set("name", getName()); tinfo.set("display", getDisplayName()); tinfo.set("icon", getIcon()); tinfo.set("type", getType().toString()); - return tinfo.toJSON(); + return tinfo; } } public enum ServerType { @@ -180,7 +179,7 @@ public abstract class SubCreator { * @param player Player Creating * @param name Server Name * @param template Server Template - * @param version Server Version + * @param version Server Version (may be null) * @param port Server Port Number (null to auto-select) * @return Success Status */ @@ -192,7 +191,7 @@ public abstract class SubCreator { * @param player Player Creating * @param name Server Name * @param template Server Template - * @param version Server Version + * @param version Server Version (may be null) * @param port Server Port Number (null to auto-select) * @return Success Status */ @@ -205,7 +204,7 @@ public abstract class SubCreator { * * @param name Server Name * @param template Server Template - * @param version Server Version + * @param version Server Version (may be null) * @param port Server Port Number (null to auto-select) * @return Success Status */ @@ -218,7 +217,7 @@ public abstract class SubCreator { * * @param name Server Name * @param template Server Template - * @param version Server Version + * @param version Server Version (may be null) * @param port Server Port Number (null to auto-select) * @return Success Status */ diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubServer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubServer.java index 7d5c43d3..4abb3bb4 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubServer.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubServer.java @@ -1,7 +1,7 @@ package net.ME1312.SubServers.Bungee.Host; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Util; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Util; import java.util.*; @@ -17,6 +17,7 @@ public interface SubServer extends Server { NONE, RESTART, REMOVE_SERVER, + RECYCLE_SERVER, DELETE_SERVER; @Override @@ -169,7 +170,7 @@ public interface SubServer extends Server { * @param edit Edits * @return Success Status */ - default int edit(UUID player, YAMLSection edit) { + default int edit(UUID player, ObjectMap edit) { return -1; } @@ -179,7 +180,7 @@ public interface SubServer extends Server { * @param edit Edits * @return Success Status */ - default int edit(YAMLSection edit) { + default int edit(ObjectMap edit) { return -1; } @@ -221,12 +222,12 @@ public interface SubServer extends Server { /** * If the Server is accepting requests to edit() * - * @see #edit(YAMLSection) - * @see #edit(UUID, YAMLSection) + * @see #edit(ObjectMap) + * @see #edit(UUID, ObjectMap) * @return Edit Status */ default boolean isEditable() { - return edit(new YAMLSection()) >= 0; + return edit(new ObjectMap()) >= 0; } /** diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubServerContainer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubServerContainer.java index 012f5544..1354c54b 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubServerContainer.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubServerContainer.java @@ -1,9 +1,8 @@ package net.ME1312.SubServers.Bungee.Host; -import com.google.gson.Gson; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; +import net.ME1312.Galaxi.Library.Map.ObjectMap; import net.ME1312.SubServers.Bungee.Library.Exception.InvalidServerException; -import net.ME1312.SubServers.Bungee.Library.NamedContainer; +import net.ME1312.Galaxi.Library.NamedContainer; import net.ME1312.SubServers.Bungee.SubAPI; import java.io.File; @@ -51,7 +50,7 @@ public abstract class SubServerContainer extends ServerContainer implements SubS } @Override - public int edit(YAMLSection edit) { + public int edit(ObjectMap edit) { return edit(null, edit); } @@ -109,8 +108,8 @@ public abstract class SubServerContainer extends ServerContainer implements SubS @SuppressWarnings({"deprecation", "unchecked"}) @Override - public String toString() { - YAMLSection sinfo = new YAMLSection(new Gson().fromJson(super.toString(), Map.class)); + public ObjectMap forSubData() { + ObjectMap sinfo = super.forSubData(); sinfo.set("type", "SubServer"); sinfo.set("host", getHost().getName()); sinfo.set("enabled", isEnabled()); @@ -121,13 +120,13 @@ public abstract class SubServerContainer extends ServerContainer implements SubS sinfo.set("running", isRunning()); sinfo.set("stop-cmd", getStopCommand()); sinfo.set("stop-action", getStopAction().toString()); - sinfo.set("auto-run", SubAPI.getInstance().getInternals().config.get().getSection("Servers").getSection(getName(), new YAMLSection()).getBoolean("Run-On-Launch", false)); + sinfo.set("auto-run", SubAPI.getInstance().getInternals().config.get().getMap("Servers").getMap(getName(), new ObjectMap()).getBoolean("Run-On-Launch", false)); List incompatibleCurrent = new ArrayList(); List incompatible = new ArrayList(); for (SubServer server : getCurrentIncompatibilities()) incompatibleCurrent.add(server.getName()); for (SubServer server : getIncompatibilities()) incompatible.add(server.getName()); sinfo.set("incompatible", incompatibleCurrent); sinfo.set("incompatible-list", incompatible); - return sinfo.toJSON(); + return sinfo; } } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubServerController.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubServerController.java index f25f94ca..958631db 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubServerController.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubServerController.java @@ -1,6 +1,6 @@ package net.ME1312.SubServers.Bungee.Host; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; +import net.ME1312.Galaxi.Library.Map.ObjectMap; import net.ME1312.SubServers.Bungee.Library.Exception.InvalidServerException; import java.util.*; @@ -64,12 +64,12 @@ public abstract class SubServerController { } @Override - public int edit(YAMLSection edit) { + public int edit(ObjectMap edit) { return SubServerController.this.edit(edit); } @Override - public int edit(UUID player, YAMLSection edit) { + public int edit(UUID player, ObjectMap edit) { return SubServerController.this.edit(player, edit); } @@ -236,7 +236,7 @@ public abstract class SubServerController { * @param edit Edits * @return Success Status */ - public int edit(UUID player, YAMLSection edit) { + public int edit(UUID player, ObjectMap edit) { return -1; } @@ -246,7 +246,7 @@ public abstract class SubServerController { * @param edit Edits * @return Success Status */ - public int edit(YAMLSection edit) { + public int edit(ObjectMap edit) { return -1; } @@ -352,9 +352,4 @@ public abstract class SubServerController { * @param action Stop Action */ public abstract void setStopAction(SubServer.StopAction action); - - @Override - public String toString() { - return control.toString(); - } } \ No newline at end of file diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Launch.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Launch.java index 64a83ed9..407f012d 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Launch.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Launch.java @@ -1,11 +1,7 @@ package net.ME1312.SubServers.Bungee; -import net.ME1312.SubServers.Bungee.Library.Container; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Library.Version.VersionType; +import net.ME1312.Galaxi.Library.Util; -import java.lang.reflect.Field; import java.security.Security; import java.text.SimpleDateFormat; import java.util.Calendar; diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Callback.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Callback.java deleted file mode 100644 index d230f513..00000000 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Callback.java +++ /dev/null @@ -1,13 +0,0 @@ -package net.ME1312.SubServers.Bungee.Library; - -/** - * Callback Class - */ -public interface Callback { - /** - * Run the Callback - * - * @param obj Object - */ - void run(T obj); -} diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Compatibility/CommandX.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Compatibility/CommandX.java index 3f8416bb..145493da 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Compatibility/CommandX.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Compatibility/CommandX.java @@ -1,6 +1,6 @@ package net.ME1312.SubServers.Bungee.Library.Compatibility; -import net.ME1312.SubServers.Bungee.Library.NamedContainer; +import net.ME1312.Galaxi.Library.NamedContainer; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.plugin.Command; import net.md_5.bungee.api.plugin.TabExecutor; diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Compatibility/JNA.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Compatibility/JNA.java index 9d25b560..56de7cce 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Compatibility/JNA.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Compatibility/JNA.java @@ -1,7 +1,7 @@ package net.ME1312.SubServers.Bungee.Library.Compatibility; import com.google.common.io.Resources; -import net.ME1312.SubServers.Bungee.Library.UniversalFile; +import net.ME1312.Galaxi.Library.UniversalFile; import net.ME1312.SubServers.Bungee.SubAPI; import java.io.FileNotFoundException; diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Compatibility/mc1_13/CommandX.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Compatibility/mc1_13/CommandX.java index ebc1550a..8f80d3bc 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Compatibility/mc1_13/CommandX.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Compatibility/mc1_13/CommandX.java @@ -1,6 +1,6 @@ package net.ME1312.SubServers.Bungee.Library.Compatibility.mc1_13; -import net.ME1312.SubServers.Bungee.Library.NamedContainer; +import net.ME1312.Galaxi.Library.NamedContainer; import net.md_5.bungee.api.CommandSender; import java.util.LinkedList; diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Config/YAMLConfig.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Config/YAMLConfig.java deleted file mode 100644 index a828d183..00000000 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Config/YAMLConfig.java +++ /dev/null @@ -1,110 +0,0 @@ -package net.ME1312.SubServers.Bungee.Library.Config; - -import net.ME1312.SubServers.Bungee.Library.Util; -import org.yaml.snakeyaml.DumperOptions; -import org.yaml.snakeyaml.Yaml; -import org.yaml.snakeyaml.error.YAMLException; - -import java.io.*; -import java.util.LinkedHashMap; - -/** - * YAML Config Class - */ -@SuppressWarnings("unused") -public class YAMLConfig { - private File file; - private Yaml yaml; - private YAMLSection config; - - /** - * Creates/Loads a YAML Formatted Config - * - * @param file - * @throws IOException - * @throws YAMLException - */ - @SuppressWarnings("unchecked") - public YAMLConfig(File file) throws IOException, YAMLException { - if (Util.isNull(file)) throw new NullPointerException(); - this.file = file; - this.yaml = new Yaml(getDumperOptions()); - if (file.exists()) { - InputStream stream = new FileInputStream(file); - this.config = new YAMLSection((LinkedHashMap) yaml.loadAs(stream, LinkedHashMap.class), null, null, yaml); - stream.close(); - } else { - this.config = new YAMLSection(null, null, null, yaml); - } - } - - /** - * Get Config Contents - * - * @return Config Contents - */ - public YAMLSection get() { - return config; - } - - /** - * Set Config Contents - * - * @param value Value - */ - public void set(YAMLSection value) { - if (Util.isNull(value)) throw new NullPointerException(); - config = value; - } - - /** - * Reload Config Contents - * - * @throws IOException - */ - @SuppressWarnings("unchecked") - public void reload() throws IOException { - if (file.exists()) { - InputStream stream = new FileInputStream(file); - this.config = new YAMLSection((LinkedHashMap) yaml.loadAs(stream, LinkedHashMap.class), null, null, yaml); - stream.close(); - } else { - this.config = new YAMLSection(null, null, null, yaml); - } - } - - /** - * Save Config Contents - * - * @throws IOException - */ - public void save() throws IOException { - if (!file.exists()) file.createNewFile(); - FileWriter writer = new FileWriter(file); - yaml.dump(config.map, writer); - writer.close(); - } - - @Override - public boolean equals(Object object) { - if (object instanceof YAMLConfig) { - return get().equals(((YAMLConfig) object).get()); - } else { - return super.equals(object); - } - } - - @Override - public String toString() { - return yaml.dump(config.map); - } - - protected static DumperOptions getDumperOptions() { - DumperOptions options = new DumperOptions(); - options.setAllowUnicode(false); - options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); - options.setIndent(2); - - return options; - } -} \ No newline at end of file diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Config/YAMLSection.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Config/YAMLSection.java deleted file mode 100644 index df3c6a69..00000000 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Config/YAMLSection.java +++ /dev/null @@ -1,1141 +0,0 @@ -package net.ME1312.SubServers.Bungee.Library.Config; - -import com.google.gson.Gson; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import org.msgpack.value.MapValue; -import org.msgpack.value.Value; -import org.msgpack.value.ValueFactory; -import org.yaml.snakeyaml.Yaml; -import org.yaml.snakeyaml.error.YAMLException; - -import java.io.InputStream; -import java.io.Reader; -import java.util.*; - -/** - * YAML Config Section Class - */ -@SuppressWarnings({"unchecked", "unused"}) -public class YAMLSection { - protected LinkedHashMap map; - protected String handle = null; - protected YAMLSection up = null; - private Yaml yaml; - - /** - * Creates an empty YAML Section - */ - public YAMLSection() { - this.map = new LinkedHashMap<>(); - this.yaml = new Yaml(YAMLConfig.getDumperOptions()); - } - - /** - * Creates a YAML Section from an Input Stream - * - * @param stream Input Stream - * @throws YAMLException - */ - public YAMLSection(InputStream stream) throws YAMLException { - if (Util.isNull(stream)) throw new NullPointerException(); - this.map = (LinkedHashMap) (this.yaml = new Yaml(YAMLConfig.getDumperOptions())).loadAs(stream, LinkedHashMap.class); - } - - /** - * Creates a YAML Section from a Reader - * - * @param reader Reader - * @throws YAMLException - */ - public YAMLSection(Reader reader) throws YAMLException { - if (Util.isNull(reader)) throw new NullPointerException(); - this.map = (LinkedHashMap) (this.yaml = new Yaml(YAMLConfig.getDumperOptions())).loadAs(reader, LinkedHashMap.class); - } - - /** - * Creates a YAML Section from String - * - * @param str String - * @throws YAMLException - */ - public YAMLSection(String str) throws YAMLException { - if (Util.isNull(str)) throw new NullPointerException(); - this.map = (LinkedHashMap) (this.yaml = new Yaml(YAMLConfig.getDumperOptions())).loadAs(str, LinkedHashMap.class); - } - - /** - * Creates a YAML Section from Map Contents - * - * @param map Map - */ - public YAMLSection(Map map) { - if (Util.isNull(map)) throw new NullPointerException(); - this.map = new LinkedHashMap<>(); - this.yaml = new Yaml(YAMLConfig.getDumperOptions()); - - setAll(map); - } - - /** - * Creates a YAML Section from Message Pack Contents - * - * @param msgpack MessagePack Map - */ - public YAMLSection(MapValue msgpack) { - if (Util.isNull(msgpack)) throw new NullPointerException(); - this.map = new LinkedHashMap<>(); - this.yaml = new Yaml(YAMLConfig.getDumperOptions()); - - boolean warned = false; - Map map = msgpack.map(); - for (Value key : map.keySet()) { - if (key.isStringValue()) { - set(key.asStringValue().asString(), map.get(key)); - } else if (!warned) { - new IllegalStateException("MessagePack contains non-string key(s)").printStackTrace(); - warned = true; - } - } - } - - protected YAMLSection(Map map, YAMLSection up, String handle, Yaml yaml) { - this.map = new LinkedHashMap(); - this.yaml = yaml; - this.handle = handle; - this.up = up; - - if (map != null) setAll(map); - } - - - /** - * Get a copy of the original Object Map - * - * @return Object Map - */ - public Map get() { - LinkedHashMap map = new LinkedHashMap(); - map.putAll(this.map); - return map; - } - - /** - * Get the Keys - * - * @return KeySet - */ - public Set getKeys() { - return map.keySet(); - } - - /** - * Get the Values - * - * @return Values - */ - public Collection getValues() { - List values = new ArrayList(); - for (String value : map.keySet()) { - values.add(new YAMLValue(map.get(value), this, value, yaml)); - } - return values; - } - - /** - * Check if a Handle exists - * - * @param handle Handle - * @return if that handle exists - */ - public boolean contains(String handle) { - return map.keySet().contains(handle); - } - - private Object convert(Object value) { - if (value instanceof Value) { - if (((Value) value).isNilValue()) { - value = null; - } else if (((Value) value).isMapValue()) { - value = new YAMLSection(((Value) value).asMapValue()); - } else if (((Value) value).isArrayValue()) { - value = ((Value) value).asArrayValue().list(); - } else if (((Value) value).isBooleanValue()) { - value = ((Value) value).asBooleanValue().getBoolean(); - } else if (((Value) value).isFloatValue()) { - if (((Value) value).asFloatValue().toDouble() == (double)(float) ((Value) value).asFloatValue().toDouble()) { - value = ((Value) value).asFloatValue().toFloat(); - } else { - value = ((Value) value).asFloatValue().toDouble(); - } - } else if (((Value) value).isIntegerValue()) { - if (((Value) value).asIntegerValue().isInByteRange()) { - value = ((Value) value).asIntegerValue().asByte(); - } else if (((Value) value).asIntegerValue().isInShortRange()) { - value = ((Value) value).asIntegerValue().asShort(); - } else if (((Value) value).asIntegerValue().isInIntRange()) { - value = ((Value) value).asIntegerValue().asInt(); - } else if (((Value) value).asIntegerValue().isInLongRange()) { - value = ((Value) value).asIntegerValue().asLong(); - } else { - value = ((Value) value).asIntegerValue().asBigInteger(); - } - } else if (((Value) value).isStringValue()) { - value = ((Value) value).asStringValue().asString(); - } - } - - if (value == null) { - return null; - } else if (value instanceof Map) { - List list = new ArrayList(); - list.addAll(((Map) value).keySet()); - for (String key : list) ((Map) value).put(key, convert(((Map) value).get(key))); - return value; - } else if (value instanceof YAMLConfig) { - ((YAMLConfig) value).get().up = this; - ((YAMLConfig) value).get().handle = handle; - return ((YAMLConfig) value).get().map; - } else if (value instanceof YAMLSection) { - ((YAMLSection) value).up = this; - ((YAMLSection) value).handle = handle; - return ((YAMLSection) value).map; - } else if (value instanceof YAMLValue) { - return ((YAMLValue) value).asObject(); - } else if (value instanceof Collection) { - List list = new ArrayList(); - for (Object val : (Collection) value) list.add(convert(val)); - return list; - } else if (value.getClass().isArray()) { - List list = new ArrayList(); - for (int i = 0; i < ((Object[]) value).length; i++) list.add(convert(((Object[]) value)[i])); - return list; - } else if (value instanceof UUID) { - return value.toString(); - } else if (value instanceof Version) { - return ((Version) value).toFullString(); - } else { - return value; - } - } - - /** - * Set Object into this YAML Section - * - * @param handle Handle - * @param value Value - */ - public void set(String handle, Object value) { - if (Util.isNull(handle)) throw new NullPointerException(); - map.put(handle, convert(value)); - - if (this.handle != null && this.up != null) { - this.up.set(this.handle, this); - } - } - - /** - * Set Object into this YAML Section without overwriting existing value - * - * @param handle Handle - * @param value Value - */ - public void safeSet(String handle, Object value) { - if (Util.isNull(handle)) throw new NullPointerException(); - if (!contains(handle)) set(handle, value); - } - - /** - * Set All Objects into this YAML Section - * - * @param values Map to set - */ - public void setAll(Map values) { - if (Util.isNull(values)) throw new NullPointerException(); - for (String value : values.keySet()) { - set(value, values.get(value)); - } - } - - /** - * Set All Objects into this YAML Section without overwriting existing values - * - * @param values Map to set - */ - public void safeSetAll(Map values) { - if (Util.isNull(values)) throw new NullPointerException(); - for (String value : values.keySet()) { - safeSet(value, values.get(value)); - } - } - - /** - * Copy YAML Values to this YAML Section - * - * @param values YAMLSection to merge - */ - public void setAll(YAMLSection values) { - if (Util.isNull(values)) throw new NullPointerException(); - setAll(values.map); - } - - /** - * Copy YAML Values to this YAML Section without overwriting existing values - * - * @param values YAMLSection to merge - */ - public void safeSetAll(YAMLSection values) { - if (Util.isNull(values)) throw new NullPointerException(); - safeSetAll(values.map); - } - - /** - * Remove an Object by Handle - * - * @param handle Handle - */ - public void remove(String handle) { - if (Util.isNull(handle)) throw new NullPointerException(); - map.remove(handle); - - if (this.handle != null && this.up != null) { - this.up.set(this.handle, this); - } - } - - /** - * Remove all Objects from this YAML Section - */ - public void clear() { - map.clear(); - } - - /** - * Clone this YAML Section - * - * @return - */ - public YAMLSection clone() { - return new YAMLSection(map, null, null, yaml); - } - - /** - * Go up a level in the config (or null if this is the top layer) - * - * @return Super Section - */ - public YAMLSection superSection() { - return up; - } - - /** - * Get an Object by Handle - * - * @param handle Handle - * @return Object - */ - public YAMLValue get(String handle) { - if (Util.isNull(handle)) throw new NullPointerException(); - return new YAMLValue(map.get(handle), this, handle, yaml); - } - - /** - * Get an Object by Handle - * - * @param handle Handle - * @param def Default - * @return Object - */ - public YAMLValue get(String handle, Object def) { - if (Util.isNull(handle)) throw new NullPointerException(); - return new YAMLValue((map.get(handle) != null)?map.get(handle):def, this, handle, yaml); - } - - /** - * Get an Object by Handle - * - * @param handle Handle - * @param def Default - * @return Object - */ - public YAMLValue get(String handle, YAMLValue def) { - if (Util.isNull(handle)) throw new NullPointerException(); - return new YAMLValue((map.get(handle) != null)?map.get(handle):def.asObject(), this, handle, yaml); - } - - /** - * Get a List by Handle - * - * @param handle Handle - * @return Object - */ - public List getList(String handle) { - if (Util.isNull(handle)) throw new NullPointerException(); - if (map.get(handle) != null) { - List values = new ArrayList(); - for (Object value : (List) map.get(handle)) { - values.add(new YAMLValue(value, null, null, yaml)); - } - return values; - } else { - return null; - } - } - - /** - * Get a List by Handle - * - * @param handle Handle - * @param def Default - * @return Object List - */ - public List getList(String handle, Collection def) { - if (Util.isNull(handle)) throw new NullPointerException(); - if (map.get(handle) != null) { - return getList(handle); - } else if (def != null) { - List values = new ArrayList(); - for (Object value : def) { - values.add(new YAMLValue(value, null, null, yaml)); - } - return values; - } else return null; - } - - /** - * Get a List by Handle - * - * @param handle Handle - * @param def Default - * @return Object List - */ - public List getList(String handle, List def) { - if (Util.isNull(handle)) throw new NullPointerException(); - if (map.get(handle) != null) { - return getList(handle); - } else if (def != null) { - List values = new ArrayList(); - for (YAMLValue value : def) { - values.add(new YAMLValue(value.asObject(), null, null, yaml)); - } - return values; - } else return null; - } - - /** - * Get a Object by Handle - * - * @param handle Handle - * @return Object - */ - public Object getObject(String handle) { - return get(handle).asObject(); - } - - /** - * Get a Object by Handle - * - * @param handle Handle - * @param def Default - * @return Object - */ - public Object getObject(String handle, Object def) { - return get(handle, def).asObject(); - } - - /** - * Get a Object List by Handle - * - * @param handle Handle - * @return Object List - */ - public List getObjectList(String handle) { - return get(handle).asObjectList(); - } - - /** - * Get a Object List by Handle - * - * @param handle Handle - * @param def Default - * @return Object List - */ - public List getObjectList(String handle, List def) { - return get(handle, def).asObjectList(); - } - - /** - * Get a Boolean by Handle - * - * @param handle Handle - * @return Boolean - */ - public Boolean getBoolean(String handle) { - return get(handle).asBoolean(); - } - - /** - * Get a Boolean by Handle - * - * @param handle Handle - * @param def Default - * @return Boolean - */ - public Boolean getBoolean(String handle, Boolean def) { - return get(handle, def).asBoolean(); - } - - /** - * Get a Boolean List by Handle - * - * @param handle Handle - * @return Boolean List - */ - public List getBooleanList(String handle) { - return get(handle).asBooleanList(); - } - - /** - * Get a Boolean List by Handle - * - * @param handle Handle - * @param def Default - * @return Boolean List - */ - public List getBooleanList(String handle, List def) { - return get(handle, def).asBooleanList(); - } - - /** - * Get a YAML Section by Handle - * - * @param handle Handle - * @return YAML Section - */ - public YAMLSection getSection(String handle) { - return get(handle).asSection(); - } - - /** - * Get a YAML Section by Handle - * - * @param handle Handle - * @param def Default - * @return YAML Section - */ - public YAMLSection getSection(String handle, Map def) { - return get(handle, def).asSection(); - } - - /** - * Get a YAML Section by Handle - * - * @param handle Handle - * @param def Default - * @return YAML Section - */ - public YAMLSection getSection(String handle, YAMLSection def) { - if (Util.isNull(handle)) throw new NullPointerException(); - return (map.get(handle) != null)?get(handle).asSection():((def != null)?new YAMLSection(def.get(), this, handle, yaml):null); - } - - /** - * Get a YAML Section List by Handle - * - * @param handle Handle - * @return YAML Section List - */ - public List getSectionList(String handle) { - return get(handle).asSectionList(); - } - - /** - * Get a YAML Section List by Handle - * - * @param handle Handle - * @param def Default - * @return YAML Section List - */ - public List getSectionList(String handle, Collection> def) { - return get(handle, def).asSectionList(); - } - - /** - * Get a YAML Section List by Handle - * - * @param handle Handle - * @param def Default - * @return YAML Section List - */ - public List getSectionList(String handle, List def) { - if (Util.isNull(handle)) throw new NullPointerException(); - if (map.get(handle) != null) { - return get(handle).asSectionList(); - } else if (def != null) { - List values = new ArrayList(); - for (YAMLSection value : def) { - values.add(new YAMLSection(value.get(), null, null, yaml)); - } - return values; - } else return null; - } - - /** - * Get a Double by Handle - * - * @param handle Handle - * @return Double - */ - public Double getDouble(String handle) { - return get(handle).asDouble(); - } - - /** - * Get a Double by Handle - * - * @param handle Handle - * @param def Default - * @return Double - */ - public Double getDouble(String handle, Double def) { - return get(handle, def).asDouble(); - } - - /** - * Get a Double List by Handle - * - * @param handle Handle - * @return Double List - */ - public List getDoubleList(String handle) { - return get(handle).asDoubleList(); - } - - /** - * Get a Double List by Handle - * - * @param handle Handle - * @param def Default - * @return Double List - */ - public List getDoubleList(String handle, List def) { - return get(handle, def).asDoubleList(); - } - - /** - * Get a Float by Handle - * - * @param handle Handle - * @return Float - */ - public Float getFloat(String handle) { - return get(handle).asFloat(); - } - - /** - * Get a Float by Handle - * - * @param handle Handle - * @param def Default - * @return Float - */ - public Float getFloat(String handle, Float def) { - return get(handle, def).asFloat(); - } - - /** - * Get a Float List by Handle - * - * @param handle Handle - * @return Float List - */ - public List getFloatList(String handle) { - return get(handle).asFloatList(); - } - - /** - * Get a Float List by Handle - * - * @param handle Handle - * @param def Default - * @return Float List - */ - public List getFloatList(String handle, List def) { - return get(handle, def).asFloatList(); - } - - /** - * Get an Integer by Handle - * - * @param handle Handle - * @return Integer - */ - public Integer getInt(String handle) { - return get(handle).asInt(); - } - - /** - * Get an Integer by Handle - * - * @param handle Handle - * @param def Default - * @return Integer - */ - public Integer getInt(String handle, Integer def) { - return get(handle, def).asInt(); - } - - /** - * Get an Integer List by Handle - * - * @param handle Handle - * @return Integer List - */ - public List getIntList(String handle) { - return get(handle).asIntList(); - } - - /** - * Get an Integer List by Handle - * - * @param handle Handle - * @param def Default - * @return Integer List - */ - public List getIntList(String handle, List def) { - return get(handle, def).asIntList(); - } - - /** - * Get a Long by Handle - * - * @param handle Handle - * @return Long - */ - public Long getLong(String handle) { - return get(handle).asLong(); - } - - /** - * Get a Long by Handle - * - * @param handle Handle - * @param def Default - * @return Long - */ - public Long getLong(String handle, Long def) { - return get(handle, def).asLong(); - } - - /** - * Get a Long List by Handle - * - * @param handle Handle - * @return Long List - */ - public List getLongList(String handle) { - return get(handle).asLongList(); - } - - /** - * Get a Long List by Handle - * - * @param handle Handle - * @param def Default - * @return Long List - */ - public List getLongList(String handle, List def) { - return get(handle).asLongList(); - } - - /** - * Get a Short by Handle - * - * @param handle Handle - * @return Short - */ - public Short getShort(String handle) { - return get(handle).asShort(); - } - - /** - * Get a Short by Handle - * - * @param handle Handle - * @param def Default - * @return Short - */ - public Short getShort(String handle, Short def) { - return get(handle, def).asShort(); - } - - /** - * Get a Short List by Handle - * - * @param handle Handle - * @return Short List - */ - public List getShortList(String handle) { - return get(handle).asShortList(); - } - - /** - * Get a Short List by Handle - * - * @param handle Handle - * @param def Default - * @return Short List - */ - public List getShortList(String handle, List def) { - return get(handle).asShortList(); - } - - /** - * Get an Unparsed String by Handle - * - * @param handle Handle - * @return Unparsed String - */ - public String getRawString(String handle) { - return get(handle).asRawString(); - } - - /** - * Get an Unparsed String by Handle - * - * @param handle Handle - * @param def Default - * @return Unparsed String - */ - public String getRawString(String handle, String def) { - return get(handle, def).asRawString(); - } - - /** - * Get an Unparsed String List by Handle - * - * @param handle Handle - * @return Unparsed String List - */ - public List getRawStringList(String handle) { - return get(handle).asRawStringList(); - } - - /** - * Get an Unparsed String List by Handle - * - * @param handle Handle - * @param def Default - * @return Unparsed String List - */ - public List getRawStringList(String handle, List def) { - return get(handle, def).asRawStringList(); - } - - /** - * Get a String by Handle - * - * @param handle Handle - * @return String - */ - public String getString(String handle) { - return get(handle).asString(); - } - - /** - * Get a String by Handle - * - * @param handle Handle - * @param def Default - * @return String - */ - public String getString(String handle, String def) { - return get(handle, def).asString(); - } - - /** - * Get a String List by Handle - * - * @param handle Handle - * @return String List - */ - public List getStringList(String handle) { - return get(handle).asStringList(); - } - - /** - * Get a String List by Handle - * - * @param handle Handle - * @param def Default - * @return String List - */ - public List getStringList(String handle, List def) { - return get(handle, def).asStringList(); - } - - /** - * Get a Colored String by Handle - * - * @param handle Handle - * @param color Color Char to parse - * @return Colored String - */ - public String getColoredString(String handle, char color) { - return get(handle).asColoredString(color); - } - - /** - * Get a Colored String by Handle - * - * @param handle Handle - * @param def Default - * @param color Color Char to parse - * @return Colored String - */ - public String getColoredString(String handle, String def, char color) { - return get(handle, def).asColoredString(color); - } - /** - * Get a Colored String List by Handle - * - * @param handle Handle - * @param color Color Char to parse - * @return Colored String List - */ - public List getColoredStringList(String handle, char color) { - return get(handle).asColoredStringList(color); - } - - /** - * Get a Colored String List by Handle - * - * @param handle Handle - * @param def Default - * @param color Color Char to parse - * @return Colored String List - */ - public List getColoredStringList(String handle, List def, char color) { - return get(handle, def).asColoredStringList(color); - } - - /** - * Get a UUID by Handle - * - * @param handle Handle - * @return UUID - */ - public UUID getUUID(String handle) { - return get(handle).asUUID(); - } - - /** - * Get a UUID by Handle - * - * @param handle Handle - * @param def Default - * @return UUID - */ - public UUID getUUID(String handle, UUID def) { - return get(handle, def).asUUID(); - } - - /** - * Get a UUID List by Handle - * - * @param handle Handle - * @return UUID List - */ - public List getUUIDList(String handle) { - return get(handle).asUUIDList(); - } - - /** - * Get a UUID List by Handle - * - * @param handle Handle - * @param def Default - * @return UUID List - */ - public List getUUIDList(String handle, List def) { - return get(handle, def).asUUIDList(); - } - - /** - * Get a Version by Handle - * - * @param handle Handle - * @return Version - */ - public Version getVersion(String handle) { - return get(handle).asVersion(); - } - - /** - * Get a Version by Handle - * - * @param handle Handle - * @param def Default - * @return Version - */ - public Version getVersion(String handle, Version def) { - return get(handle, def).asVersion(); - } - - /** - * Get a Version List by Handle - * - * @param handle Handle - * @return Version List - */ - public List getVersionList(String handle) { - return get(handle).asVersionList(); - } - - /** - * Get a Version List by Handle - * - * @param handle Handle - * @param def Default - * @return Version List - */ - public List getVersionList(String handle, List def) { - return get(handle, def).asVersionList(); - } - - /** - * Check if object is Null by Handle - * - * @param handle Handle - * @return Object Null Status - */ - public boolean isNull(String handle) { - return get(handle).isNull(); - } - - /** - * Check if object is a Boolean by Handle - * - * @param handle Handle - * @return Object Boolean Status - */ - public boolean isBoolean(String handle) { - return get(handle).isBoolean(); - } - - /** - * Check if object is a YAML Section by Handle - * - * @param handle Handle - * @return Object YAML Section Status - */ - public boolean isSection(String handle) { - return get(handle).isSection(); - } - - /** - * Check if object is a List by Handle - * - * @param handle Handle - * @return Object List Status - */ - public boolean isList(String handle) { - return get(handle).isList(); - } - - /** - * Check if object is a Number by Handle - * - * @param handle Handle - * @return Number Status - */ - public boolean isNumber(String handle) { - return get(handle).isNumber(); - } - - /** - * Check if object is a String by Handle - * - * @param handle Handle - * @return Object String Status - */ - public boolean isString(String handle) { - return get(handle).isString(); - } - - /** - * Check if object is a UUID by Handle - * - * @param handle Handle - * @return Object UUID Status - */ - public boolean isUUID(String handle) { - return get(handle).isUUID(); - } - - @Override - public boolean equals(Object object) { - if (object instanceof YAMLSection) { - return map.equals(((YAMLSection) object).map); - } else { - return super.equals(object); - } - } - - @Override - public String toString() { - return yaml.dump(map); - } - - /** - * Convert to JSON - * - * @return JSON - */ - public String toJSON() { - return new Gson().toJson(get(), Map.class); - } - - private Value msgPack(Object value) { - if (value == null) { - return ValueFactory.newNil(); - } else if (value instanceof Value) { - return (Value) value; - } else if (value instanceof Map) { - ValueFactory.MapBuilder map = ValueFactory.newMapBuilder(); - for (String key : ((Map) value).keySet()) { - Value v = msgPack(((Map) value).get(key)); - if (v != null) map.put(ValueFactory.newString(key), v); - } - return map.build(); - } else if (value instanceof Collection) { - LinkedList values = new LinkedList(); - for (Object object : (Collection) value) { - Value v = msgPack(object); - if (v != null) values.add(v); - } - return ValueFactory.newArray(values); - } else if (value instanceof Boolean) { - return ValueFactory.newBoolean((boolean) value); - } else if (value instanceof Number) { - if (((Number) value).doubleValue() == (double)(int) ((Number) value).doubleValue()) { - return ValueFactory.newInteger(((Number) value).longValue()); - } else { - return ValueFactory.newFloat(((Number) value).doubleValue()); - } - } else if (value instanceof String) { - return ValueFactory.newString((String) value); - } else { - return null; - } - } - - /** - * Convert to a MessagePack Map - * - * @return MessagePack Map - */ - public MapValue msgPack() { - return (MapValue) msgPack(get()); - } -} diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Config/YAMLValue.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Config/YAMLValue.java deleted file mode 100644 index 14596ced..00000000 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Config/YAMLValue.java +++ /dev/null @@ -1,397 +0,0 @@ -package net.ME1312.SubServers.Bungee.Library.Config; - -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.md_5.bungee.api.ChatColor; -import org.yaml.snakeyaml.Yaml; - -import java.util.*; - -/** - * YAML Value Class - */ -@SuppressWarnings({"unchecked", "unused"}) -public class YAMLValue { - protected Object obj; - protected String label; - protected YAMLSection up; - private Yaml yaml; - - protected YAMLValue(Object obj, YAMLSection up, String label, Yaml yaml) { - this.obj = obj; - this.label = label; - this.yaml = yaml; - this.up = up; - } - - /** - * Get the YAML Section this Object was defined in - * - * @return YAML Section - */ - public YAMLSection getDefiningSection() { - return up; - } - - /** - * Get Object - * - * @return Object - */ - public Object asObject() { - return obj; - } - - /** - * Get Object as List - * - * @return List - */ - public List asObjectList() { - return (List) obj; - } - - /** - * Get Object as Boolean - * - * @return Boolean - */ - public Boolean asBoolean() { - return (Boolean) obj; - } - - /** - * Get Object as List - * - * @return List - */ - public List asBooleanList() { - return (List) obj; - } - - /** - * Get Object as YAML Section - * - * @return YAML Section - */ - public YAMLSection asSection() { - if (obj != null) return new YAMLSection((Map) obj, up, label, yaml); - else return null; - } - - /** - * Get Object as YAML Section List - * - * @return YAML Section List - */ - public List asSectionList() { - if (obj != null) { - List values = new ArrayList(); - for (Map value : (List>) obj) { - values.add(new YAMLSection(value, null, null, yaml)); - } - return values; - } else return null; - } - - /** - * Get Object as Double - * - * @return Double - */ - public Double asDouble() { - return ((Number) obj).doubleValue(); - } - - /** - * Get Object as Double List - * - * @return Double List - */ - public List asDoubleList() { - return (List) obj; - } - - /** - * Get Object as Float - * - * @return Float - */ - public Float asFloat() { - return ((Number) obj).floatValue(); - } - - /** - * Get Object as Float List - * - * @return Float List - */ - public List asFloatList() { - return (List) obj; - } - - /** - * Get Object as Integer - * - * @return Integer - */ - public Integer asInt() { - return ((Number) obj).intValue(); - } - - /** - * Get Object as Integer List - * - * @return Integer List - */ - public List asIntList() { - return (List) obj; - } - - /** - * Get Object as Long - * - * @return Long - */ - public Long asLong() { - return ((Number) obj).longValue(); - } - - /** - * Get Object as Long List - * - * @return Long List - */ - public List asLongList() { - return (List) obj; - } - - /** - * Get a Short by Handle - * - * @return Short - */ - public Short asShort() { - return ((Number) obj).shortValue(); - } - - /** - * Get a Short List by Handle - * - * @return Short List - */ - public List asShortList() { - return (List) obj; - } - - /** - * Get Object as Unparsed String - * - * @return Unparsed String - */ - public String asRawString() { - if (obj != null) return obj.toString(); - else return null; - } - - /** - * Get Object as Unparsed String List - * - * @return Unparsed String List - */ - public List asRawStringList() { - if (obj != null) { - List values = new ArrayList(); - for (Object value : (List) obj) { - values.add(value.toString()); - } - return values; - } else return null; - } - - /** - * Get Object as String - * - * @return String - */ - public String asString() { - if (obj != null) return Util.unescapeJavaString(asRawString()); - else return null; - } - - /** - * Get Object as String List - * - * @return String List - */ - public List asStringList() { - if (obj != null) { - List values = new ArrayList(); - for (String value : asRawStringList()) { - values.add(Util.unescapeJavaString(value)); - } - return values; - } else return null; - } - - /** - * Get Object as Colored String - * - * @param color Color Char to parse - * @return Colored String - */ - public String asColoredString(char color) { - if (Util.isNull(color)) throw new NullPointerException(); - if (obj != null) return ChatColor.translateAlternateColorCodes(color, asString()); - else return null; - } - - /** - * Get Object as Colored String List - * - * @param color Color Char to parse - * @return Colored String List - */ - public List asColoredStringList(char color) { - if (obj != null) { - if (Util.isNull(color)) throw new NullPointerException(); - List values = new ArrayList(); - for (String value : asStringList()) { - values.add(ChatColor.translateAlternateColorCodes(color, value)); - } - return values; - } else return null; - } - - /** - * Get Object as UUID - * - * @return UUID - */ - public UUID asUUID() { - if (obj != null) return UUID.fromString(asRawString()); - else return null; - } - - /** - * Get Object as UUID List - * - * @return UUID List - */ - public List asUUIDList() { - if (obj != null) { - List values = new ArrayList(); - for (String value : (List) obj) { - values.add(UUID.fromString(value)); - } - return values; - } else return null; - } - - /** - * Get Object as Version - * - * @return Version - */ - public Version asVersion() { - if (obj != null) return Version.fromString(asRawString()); - else return null; - } - - /** - * Get Object as Version List - * - * @return Version List - */ - public List asVersionList() { - if (obj != null) { - List values = new ArrayList(); - for (String value : (List) obj) { - values.add(Version.fromString(value)); - } - return values; - } else return null; - } - - /** - * Check if object is Null - * - * @return Null Status - */ - public boolean isNull() { - return obj == null; - } - - /** - * Check if object is a Boolean - * - * @return Boolean Status - */ - public boolean isBoolean() { - return (obj instanceof Boolean); - } - - /** - * Check if object is a YAML Section - * - * @return YAML Section Status - */ - public boolean isSection() { - return (obj instanceof Map); - } - - /** - * Check if object is a List - * - * @return List Status - */ - public boolean isList() { - return (obj instanceof List); - } - - /** - * Check if object is a Number - * - * @return Number Status - */ - public boolean isNumber() { - return (obj instanceof Number); - } - - /** - * Check if object is a String - * - * @return String Status - */ - public boolean isString() { - return (obj instanceof String); - } - - /** - * Check if object is a UUID - * - * @return UUID Status - */ - public boolean isUUID() { - return (obj instanceof String && !Util.isException(() -> UUID.fromString(asRawString()))); - } - - @Override - public boolean equals(Object object) { - if (obj == null) { - return object == null; - } else { - if (object instanceof YAMLValue) { - return obj.equals(((YAMLValue) object).obj); - } else { - return obj.equals(object); - } - } - } - - @Override - public String toString() { - if (obj != null) return obj.toString(); - else return "null"; - } -} diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Container.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Container.java deleted file mode 100644 index 652ede63..00000000 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Container.java +++ /dev/null @@ -1,50 +0,0 @@ -package net.ME1312.SubServers.Bungee.Library; - -/** - * Container Class - * - * @param Item - */ -public class Container { - private V obj; - - /** - * Creates a Container - * - * @param item Object to Store - */ - public Container(V item) { - obj = item; - } - - /** - * Grabs the Object - * - * @return The Object - */ - public V get() { - return obj; - } - - /** - * Overwrite the Object - * - * @param value Object to Store - */ - public void set(V value) { - obj = value; - } - - @Override - public boolean equals(Object object) { - if (object instanceof Container) { - if (obj == null || ((Container) object).get() == null) { - return obj == ((Container) object).get(); - } else { - return obj.equals(((Container) object).get()); - } - } else { - return super.equals(object); - } - } -} diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/ExtraDataHandler.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/ExtraDataHandler.java deleted file mode 100644 index 574d0d50..00000000 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/ExtraDataHandler.java +++ /dev/null @@ -1,47 +0,0 @@ -package net.ME1312.SubServers.Bungee.Library; - -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLValue; - -/** - * Extra Data Handler Layout Class - */ -public interface ExtraDataHandler { - /** - * Add an extra value to this Object - * - * @param handle Handle - * @param value Value - */ - void addExtra(String handle, Object value); - - /** - * Determine if an extra value exists - * - * @param handle Handle - * @return Value Status - */ - boolean hasExtra(String handle); - - /** - * Get an extra value - * - * @param handle Handle - * @return Value - */ - YAMLValue getExtra(String handle); - - /** - * Get the extra value section - * - * @return Extra Value Section - */ - YAMLSection getExtra(); - - /** - * Remove an extra value from this Object - * - * @param handle Handle - */ - void removeExtra(String handle); -} diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Files/config.yml b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Files/config.yml index 5fdb7ece..51404fb3 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Files/config.yml +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Files/config.yml @@ -7,9 +7,9 @@ Settings: Forward-SubData: false Forward-Servers: false SubData: - Address: '127.0.0.1:4391' - Password: 'default' - Encryption: 'AES' + Address: '0.0.0.0:4391' + Password: '' + Encryption: 'RSA/AES' Allowed-Connections: [] Hosts: diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/NamedContainer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/NamedContainer.java deleted file mode 100644 index c02ce13c..00000000 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/NamedContainer.java +++ /dev/null @@ -1,52 +0,0 @@ -package net.ME1312.SubServers.Bungee.Library; - -/** - * Named Container Class - * @param Name - * @param Item - */ -public class NamedContainer extends Container { - private T name; - - /** - * Creates a TaggedContainer - * - * @param name Tag to Bind - * @param item Object to Store - */ - public NamedContainer(T name, V item) { - super(item); - this.name = name; - } - - /** - * Gets the name of the Container - * - * @return Container name - */ - public T name() { - return name; - } - - /** - * Renames the Container - * - * @param name New Container Name - */ - public void rename(T name) { - this.name = name; - } - - @Override - public boolean equals(Object object) { - if (object instanceof NamedContainer) { - if (name == null || ((NamedContainer) object).name() == null) { - return name == ((NamedContainer) object).name() && super.equals(object); - } else { - return name.equals(((NamedContainer) object).name()) && super.equals(object); - } - } else { - return super.equals(object); - } - } -} diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/UniversalFile.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/UniversalFile.java deleted file mode 100644 index 9da90268..00000000 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/UniversalFile.java +++ /dev/null @@ -1,70 +0,0 @@ -package net.ME1312.SubServers.Bungee.Library; - -import java.io.File; - -/** - * Universal File Class - */ -public class UniversalFile extends File { - - /** - * Creates a File Link. Path names are separated by ':' - * - * @param pathname Path name - */ - public UniversalFile(String pathname) { - super(pathname.replace(".:", System.getProperty("user.dir") + ":").replace(':', File.separatorChar)); - } - - /** - * Creates a File Link. Path names are separated by the divider - * - * @param pathname Path name - * @param divider Divider to use - */ - public UniversalFile(String pathname, char divider) { - super(pathname.replace("." + divider, System.getProperty("user.dir") + divider).replace(divider, File.separatorChar)); - } - - /** - * Creates a File Link. - * - * @see File - * @param file File - */ - public UniversalFile(File file) { - super(file.getPath()); - } - - /** - * Creates a File. Path names are separated by the ':' - * - * @see File - * @param parent Parent File - * @param child Path name - */ - public UniversalFile(File parent, String child) { - super(parent, child.replace(':', File.separatorChar)); - } - - /** - * Creates a File. Path names are separated by the divider - * - * @see File - * @param parent Parent File - * @param child Path name - * @param divider Divider to use - */ - public UniversalFile(File parent, String child, char divider) { - super(parent, child.replace(divider, File.separatorChar)); - } - - /** - * Gets the Universal File Path (separated by ':') - * - * @return - */ - public String getUniversalPath() { - return getPath().replace(File.separatorChar, ':'); - } -} diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Util.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Util.java deleted file mode 100644 index e5d73d7e..00000000 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Util.java +++ /dev/null @@ -1,476 +0,0 @@ -package net.ME1312.SubServers.Bungee.Library; - -import java.io.*; -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.nio.file.Files; -import java.nio.file.LinkOption; -import java.util.*; -import java.util.zip.ZipEntry; -import java.util.zip.ZipInputStream; -import java.util.zip.ZipOutputStream; - -/** - * SubServers Utility Class - */ -public final class Util { - private Util(){} - public interface ExceptionReturnRunnable { - R run() throws Throwable; - } - public interface ExceptionRunnable { - void run() throws Throwable; - } - public interface ReturnRunnable { - R run(); - } - - /** - * Checks values to make sure they're not null - * - * @param values Values to check - * @return If any are null - */ - public static boolean isNull(Object... values) { - boolean ret = false; - for (Object value : values) { - if (value == null) ret = true; - } - return ret; - } - - /** - * Get keys by value from map - * - * @param map Map to search - * @param value Value to search for - * @param Key - * @param Value - * @return Search results - */ - public static List getBackwards(Map map, V value) { - List values = new ArrayList(); - - for (K key : map.keySet()) { - if (map.get(key).equals(value)) { - values.add(key); - } - } - - return values; - } - - /** - * Get an item from a map ignoring case - * - * @param map Map to search - * @param key Key to search with - * @param Value - * @return Search Result - */ - public static V getCaseInsensitively(Map map, String key) { - HashMap insensitivity = new HashMap(); - for (String item : map.keySet()) if (!insensitivity.keySet().contains(item.toLowerCase())) insensitivity.put(item.toLowerCase(), item); - if (insensitivity.keySet().contains(key.toLowerCase())) { - return map.get(insensitivity.get(key.toLowerCase())); - } else { - return null; - } - } - - /** - * Gets a new Variable that doesn't match the existing Variables - * - * @param existing Existing Variables - * @param generator Variable Generator - * @param Variable Type - * @return Variable - */ - public static V getNew(Collection existing, ReturnRunnable generator) { - V result = null; - while (result == null) { - V tmp = generator.run(); - if (!existing.contains(tmp)) result = tmp; - } - return result; - } - - /** - * Read Everything from Reader - * - * @param rd Reader - * @return Reader Contents - * @throws IOException - */ - public static String readAll(Reader rd) throws IOException { - StringBuilder sb = new StringBuilder(); - int cp; - while ((cp = rd.read()) != -1) { - sb.append((char) cp); - } - return sb.toString(); - } - - /** - * Copy from the Class Loader - * - * @param loader ClassLoader - * @param resource Location From - * @param destination Location To - */ - public static void copyFromJar(ClassLoader loader, String resource, String destination) { - InputStream resStreamIn = loader.getResourceAsStream(resource); - File resDestFile = new File(destination); - try { - OutputStream resStreamOut = new FileOutputStream(resDestFile); - int readBytes; - byte[] buffer = new byte[4096]; - while ((readBytes = resStreamIn.read(buffer)) > 0) { - resStreamOut.write(buffer, 0, readBytes); - } - resStreamOut.close(); - resStreamIn.close(); - } catch (Exception ex) { - ex.printStackTrace(); - } - } - - /** - * Get a Field's value using Reflection - * - * @param field Field to grab - * @param instance Object Instance (Null for static fields) - * @param Return Type - * @return Field Value - * @throws IllegalAccessException - */ - @SuppressWarnings("unchecked") - public static R reflect(Field field, Object instance) throws IllegalAccessException { - R value; - field.setAccessible(true); - value = (R) field.get(instance); - field.setAccessible(false); - return value; - } - - /** - * Set a Field's value using Reflection - * - * @param field Field to write to - * @param instance Object Instance (Null for static fields) - * @param value Value to write - * @throws IllegalAccessException - */ - public static void reflect(Field field, Object instance, Object value) throws IllegalAccessException { - field.setAccessible(true); - field.set(instance, value); - field.setAccessible(false); - } - - /** - * Call a method using Reflection - * - * @param method Method to call - * @param instance Object Instance (Null for static methods) - * @param arguments Method Arguments - * @param Return Type - * @return Returned Value - * @throws InvocationTargetException - * @throws IllegalAccessException - */ - @SuppressWarnings("unchecked") - public static R reflect(Method method, Object instance, Object... arguments) throws InvocationTargetException, IllegalAccessException { - R value; - method.setAccessible(true); - value = (R) method.invoke(instance, arguments); - method.setAccessible(false); - return value; - } - - /** - * Construct an object using Reflection - * - * @param constructor Constructor to use - * @param arguments Constructor Arguments - * @param Return Type - * @return New Instance - * @throws InvocationTargetException - * @throws IllegalAccessException - * @throws InstantiationException - */ - @SuppressWarnings("unchecked") - public static R reflect(Constructor constructor, Object... arguments) throws InvocationTargetException, IllegalAccessException, InstantiationException { - R value; - constructor.setAccessible(true); - value = (R) constructor.newInstance(arguments); - constructor.setAccessible(false); - return value; - } - - /** - * Get a variable from a method which may throw an exception - * - * @param runnable Runnable - * @param def Default value when an exception is thrown - * @param Variable Type - * @return Returns value or default depending on if an exception is thrown - */ - public static R getDespiteException(ExceptionReturnRunnable runnable, R def) { - try { - return runnable.run(); - } catch (Throwable e) { - return def; - } - } - - /** - * Determines if an Exception will occur - * - * @param runnable Runnable - * @return If an Exception occured - */ - public static boolean isException(ExceptionRunnable runnable) { - try { - runnable.run(); - return false; - } catch (Throwable e) { - return true; - } - } - - /** - * Delete Directory - * - * @param folder Location - */ - public static void deleteDirectory(File folder) { - File[] files = folder.listFiles(); - if(files!=null) { - for(File f : files) { - if(f.isDirectory() && !Files.isSymbolicLink(f.toPath())) { - deleteDirectory(f); - } else try { - Files.delete(f.toPath()); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - folder.delete(); - } - - /** - * Copy a Directory - * - * @param from Source - * @param to Destination - */ - public static void copyDirectory(File from, File to) { - if (from.isDirectory() && !Files.isSymbolicLink(from.toPath())) { - if (!to.exists()) { - to.mkdirs(); - } - - String files[] = from.list(); - - for (String file : files) { - File srcFile = new File(from, file); - File destFile = new File(to, file); - - copyDirectory(srcFile, destFile); - } - } else { - try { - Files.copy(from.toPath(), to.toPath(), LinkOption.NOFOLLOW_LINKS); - } catch (Exception e) { - e.printStackTrace(); - } - } - } - - private static List zipsearch(File origin, File file) { - List list = new LinkedList(); - if (file.isFile()) { - list.add(file.getAbsoluteFile().toString().substring(origin.getAbsoluteFile().toString().length()+1, file.getAbsoluteFile().toString().length())); - } - if (file.isDirectory()) for (File next : file.listFiles()) { - list.addAll(zipsearch(origin, next)); - } - return list; - } - - public static void zip(File file, OutputStream zip) { - byte[] buffer = new byte[1024]; - - try{ - ZipOutputStream zos = new ZipOutputStream(zip); - - for(String next : zipsearch(file, file)){ - ZipEntry ze= new ZipEntry(next); - zos.putNextEntry(ze); - - FileInputStream in = new FileInputStream(file.getAbsolutePath() + File.separator + next); - - int len; - while ((len = in.read(buffer)) > 0) { - zos.write(buffer, 0, len); - } - - in.close(); - } - - zos.closeEntry(); - zos.close(); - } catch(IOException ex){ - ex.printStackTrace(); - } - } - - public static void unzip(InputStream zip, File dir) { - byte[] buffer = new byte[1024]; - try{ - ZipInputStream zis = new ZipInputStream(zip); - ZipEntry ze; - while ((ze = zis.getNextEntry()) != null) { - File newFile = new File(dir + File.separator + ze.getName()); - if (newFile.exists()) { - if (newFile.isDirectory()) { - Util.deleteDirectory(newFile); - } else { - newFile.delete(); - } - } - if (ze.isDirectory()) { - newFile.mkdirs(); - continue; - } else if (!newFile.getParentFile().exists()) { - newFile.getParentFile().mkdirs(); - } - FileOutputStream fos = new FileOutputStream(newFile); - int len; - while ((len = zis.read(buffer)) > 0) { - fos.write(buffer, 0, len); - } - - fos.close(); - } - zis.closeEntry(); - zis.close(); - } catch(IOException ex) { - ex.printStackTrace(); - } - } - - /** - * Get a Random Integer - * - * @param min Minimum Value - * @param max Maximum Value - * @return Random Integer - */ - public static int random(int min, int max) { - return new Random().nextInt((max - min) + 1) + min; - } - - /** - * Parse escapes in a Java String - * - * @param str String - * @return Unescaped String - */ - public static String unescapeJavaString(String str) { - StringBuilder sb = new StringBuilder(str.length()); - - for (int i = 0; i < str.length(); i++) { - int ch = str.codePointAt(i); - if (ch == '\\') { - int nextChar = (i == str.length() - 1) ? '\\' : str - .codePointAt(i + 1); - // Octal escape? - if (nextChar >= '0' && nextChar <= '7') { - StringBuilder code = new StringBuilder(); - code.appendCodePoint(nextChar); - i++; - if ((i < str.length() - 1) && str.codePointAt(i + 1) >= '0' - && str.codePointAt(i + 1) <= '7') { - code.appendCodePoint(str.codePointAt(i + 1)); - i++; - if ((i < str.length() - 1) && str.codePointAt(i + 1) >= '0' - && str.codePointAt(i + 1) <= '7') { - code.appendCodePoint(str.codePointAt(i + 1)); - i++; - } - } - sb.append((char) Integer.parseInt(code.toString(), 8)); - continue; - } - switch (nextChar) { - case '\\': - ch = '\\'; - break; - case 'b': - ch = '\b'; - break; - case 'f': - ch = '\f'; - break; - case 'n': - ch = '\n'; - break; - case 'r': - ch = '\r'; - break; - case 't': - ch = '\t'; - break; - case '\"': - ch = '\"'; - break; - case '\'': - ch = '\''; - break; - // Hex Unicode Char: u???? - // Hex Unicode Codepoint: u{??????} - case 'u': - try { - if (i >= str.length() - 4) throw new IllegalStateException(); - StringBuilder escape = new StringBuilder(); - int offset = 2; - - if (str.codePointAt(i + 2) != '{') { - if (i >= str.length() - 5) throw new IllegalStateException(); - while (offset <= 5) { - Integer.toString(str.codePointAt(i + offset), 16); - escape.appendCodePoint(str.codePointAt(i + offset)); - offset++; - } - offset--; - } else { - offset++; - while (str.codePointAt(i + offset) != '}') { - Integer.toString(str.codePointAt(i + offset), 16); - escape.appendCodePoint(str.codePointAt(i + offset)); - offset++; - } - } - sb.append(new String(new int[]{ - Integer.parseInt(escape.toString(), 16) - }, 0, 1)); - - i += offset; - continue; - } catch (Throwable e){ - sb.append('\\'); - ch = 'u'; - break; - } - } - i++; - } - sb.appendCodePoint(ch); - } - return sb.toString(); - } -} diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Version/Version.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Version/Version.java deleted file mode 100644 index e1454d19..00000000 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Version/Version.java +++ /dev/null @@ -1,411 +0,0 @@ -package net.ME1312.SubServers.Bungee.Library.Version; - -import net.ME1312.SubServers.Bungee.Library.Util; - -import java.io.Serializable; -import java.util.Collections; -import java.util.LinkedList; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * Version Class - */ -@SuppressWarnings("serial") -public class Version implements Serializable, Comparable { - private final Version parent; - private final VersionType type; - private final String string; - - /** - * Creates a Version - * - * @param string Version String - */ - public Version(String string) { - this(VersionType.VERSION, string); - } - - /** - * Creates a Version - * - * @param type Version Type - * @param string Version String - */ - public Version(VersionType type, String string) { - this(null, type, string); - } - - /** - * Creates a Version (Appending the parent) - * - * @param parent Parent Version - * @param string Version String - */ - public Version(Version parent, String string) { - this(parent, VersionType.VERSION, string); - } - - /** - * Creates a Version (Appending the parent) - * - * @param parent Parent Version - * @param type Version Type - * @param string Version String - */ - public Version(Version parent, VersionType type, String string) { - if (Util.isNull(string, type)) throw new NullPointerException(); - this.parent = parent; - this.type = type; - this.string = string; - } - - /** - * Creates a Version - * - * @param ints Version Numbers (Will be separated with dots) - */ - public Version(int... ints) { - this(VersionType.VERSION, ints); - } - - /** - * Creates a Version - * - * @param type Version Type - * @param ints Version Numbers (Will be separated with dots) - */ - public Version(VersionType type, int... ints) { - this(null, type, ints); - } - - /** - * Creates a Version (Appending the parent) - * - * @param parent Parent Version - * @param ints Version Numbers (Will be separated with dots) - */ - public Version(Version parent, int... ints) { - this(parent, VersionType.VERSION, ints); - } - - /** - * Creates a Version (Appending the parent) - * - * @param parent Parent Version - * @param type Version Type - * @param ints Version Numbers (Will be separated with dots) - */ - public Version(Version parent, VersionType type, int... ints) { - if (Util.isNull(type)) throw new NullPointerException(); - this.parent = parent; - this.type = type; - String string = Integer.toString(ints[0]); - int i = 0; - if (ints.length != 1) { - do { - i++; - string = string + "." + ints[i]; - } while ((i + 1) != ints.length); - } - this.string = string; - } - - /** - * Parse a Version from a string - * - * @param string String to parse - * @see #toFullString() #toFullString() returns a valid string - * @see #toFullString() #toString() returns a valid string - */ - public static Version fromString(String string) { - Matcher regex = Pattern.compile("(rv|p?[abrv]|[su])?([^/]+)", Pattern.CASE_INSENSITIVE).matcher(string); - Version current = null; - while (regex.find()) { - try { - VersionType type = VersionType.VERSION; - if (regex.group(1) != null) switch (regex.group(1).toLowerCase()) { - case "pa": - type = VersionType.PRE_ALPHA; - break; - case "a": - type = VersionType.ALPHA; - break; - case "pv": - type = VersionType.PREVIEW; - break; - case "pb": - type = VersionType.PRE_BETA; - break; - case "b": - type = VersionType.BETA; - break; - case "s": - type = VersionType.SNAPSHOT; - break; - case "pr": - type = VersionType.PRE_RELEASE; - break; - case "r": - type = VersionType.RELEASE; - break; - case "rv": - type = VersionType.REVISION; - break; - case "u": - type = VersionType.UPDATE; - break; - } - current = new Version(current, type, regex.group(2)); - } catch (Throwable e) {} - } - if (current == null) throw new IllegalArgumentException("Could not find version in string: " + string); - return current; - } - - /** - * The default toString() method
- *
- * new Version(new Version("1.0.0"), VersionType.PRE_ALPHA, "7") would return:
- * 1.0.0/pa7 - * - * @return Version as a String - */ - @Override - public String toString() { - return ((parent == null)?"":parent.toString()+'/'+type.shortname) + string; - } - - /** - * The full toString() method
- *
- * new Version(new Version("1.0.0"), VersionType.PRE_ALPHA, "7") would return:
- * r1.0.0/pa7 - * - * @return Version as a String - */ - public String toFullString() { - return ((parent == null)?"":parent.toFullString()+'/') + type.shortname + string; - } - - /** - * The extended toString() method
- *
- * new Version(new Version("1.0.0"), VersionType.PRE_ALPHA, "7") would return:
- * 1.0.0 pre-alpha 7 - * - * @return Version as a String - */ - public String toExtendedString() { - return ((parent == null)?"":parent.toExtendedString()+' '+type.longname+' ') + string; - } - - /** - * The full extended toString() method
- *
- * new Version(new Version("1.0.0"), VersionType.PRE_ALPHA, "7") would return:
- * release 1.0.0 pre-alpha 7 - * - * @return Version as a String - */ - public String toFullExtendedString() { - return ((parent == null)?"":parent.toFullExtendedString()+' ') + type.longname + ' ' + string; - } - - @Override - public boolean equals(Object object) { - if (object instanceof Version) { - return equals((Version) object); - } else { - return super.equals(object); - } - } - - /** - * See if Versions are Equal - * - * @param version Version to Compare to - * @return - */ - public boolean equals(Version version) { - return compareTo(version) == 0; - } - - /* - * Returns 1 if Greater than - * Returns 0 if Equal - * Returns -1 if Less than - *//** - * - * Compare Versions - * - * @param version Version to Compare to - */ - public int compareTo(Version version) { - return compare(this, version); - } - - /** - * See if Versions are Equal - * - * @param ver1 Version to Compare - * @param ver2 Version to Compare - * @return - */ - public static boolean equals(Version ver1, Version ver2) { - return compare(ver1, ver2) == 0; - } - - /* - * Returns 1 if Greater than - * Returns 0 if Equal - * Returns -1 if Less than - *//** - * Compare Versions - * - * @param ver1 Version to Compare - * @param ver2 Version to Compare - */ - public static int compare(Version ver1, Version ver2) { - if (ver1 == null && ver2 == null) { - // Both versions are null - return 0; - } - - if (ver1 == null) { - // Version one is null - return -1; - } - - if (ver2 == null) { - // Version two is null - return 1; - } - - LinkedList stack1 = new LinkedList(); - stack1.add(ver1); - while (ver1.parent != null) { - ver1 = ver1.parent; - stack1.add(ver1); - } - Collections.reverse(stack1); - - LinkedList stack2 = new LinkedList(); - stack2.add(ver2); - while (ver2.parent != null) { - ver2 = ver2.parent; - stack2.add(ver2); - } - Collections.reverse(stack2); - - int id; - for (id = 0; id < stack1.size(); id++) { - if (id >= stack2.size()) { - // Version one still has children when version two does not... - if (stack1.get(id).type.stageid < 0) { - // ...making version two the official version - return -1; - } else { - // ...however the direct child of version one has a stageid higher than or equal to a release - return 1; - } - } - - int result = stack1.get(id).compare(stack2.get(id)); - if (result != 0) { - // Versions are not the same, return the result - return result; - } - } - if (id < stack2.size()) { - // Version one does not children when version two still does... - if (stack2.get(id).type.stageid < 0) { - // ...making version one the official version - return 1; - } else { - // ...however the direct child of version two has a stageid higher than or equal to a release - return -1; - } - } - return 0; - } - - /* - * Compares versions ignoring parent/child relationships - */ - private int compare(Version version) { - if (this.type.stageid > version.type.stageid) { - // Version one has a type of a later stage than version two - return 1; - } - - if (this.type.stageid < version.type.stageid) { - // Version one has a type of an earlier stage than version two - return -1; - } - - VersionTokenizer tokenizer1 = new VersionTokenizer(string); - VersionTokenizer tokenizer2 = new VersionTokenizer(version.string); - - int number1, number2; - String suffix1, suffix2; - - while (tokenizer1.MoveNext()) { - if (!tokenizer2.MoveNext()) { - do { - number1 = tokenizer1.getNumber(); - suffix1 = tokenizer1.getSuffix(); - if (number1 != 0 || suffix1.length() != 0) { - // Version one is longer than number two, and non-zero - return 1; - } - } - while (tokenizer1.MoveNext()); - - // Version one is longer than version two, but zero - return 0; - } - - number1 = tokenizer1.getNumber(); - suffix1 = tokenizer1.getSuffix(); - number2 = tokenizer2.getNumber(); - suffix2 = tokenizer2.getSuffix(); - - if (number1 < number2) { - // Number one is less than number two - return -1; - } - if (number1 > number2) { - // Number one is greater than number two - return 1; - } - - boolean empty1 = suffix1.length() == 0; - boolean empty2 = suffix2.length() == 0; - - if (empty1 && empty2) continue; // No suffixes - if (empty1) return 1; // First suffix is empty (1.2 > 1.2b) - if (empty2) return -1; // Second suffix is empty (1.2a < 1.2) - - // Lexical comparison of suffixes - int result = suffix1.compareTo(suffix2); - if (result != 0) return result; - - } - if (tokenizer2.MoveNext()) { - do { - number2 = tokenizer2.getNumber(); - suffix2 = tokenizer2.getSuffix(); - if (number2 != 0 || suffix2.length() != 0) { - // Version one is longer than version two, and non-zero - return -1; - } - } - while (tokenizer2.MoveNext()); - - // Version two is longer than version one, but zero - return 0; - } - return 0; - } -} \ No newline at end of file diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Version/VersionTokenizer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Version/VersionTokenizer.java deleted file mode 100644 index fb31d782..00000000 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Version/VersionTokenizer.java +++ /dev/null @@ -1,64 +0,0 @@ -package net.ME1312.SubServers.Bungee.Library.Version; - -final class VersionTokenizer { - private final String _versionString; - private final int _length; - - private int _position; - private int _number; - private String _suffix; - private boolean _hasValue; - - protected int getNumber() { - return _number; - } - - protected String getSuffix() { - return _suffix; - } - - protected boolean hasValue() { - return _hasValue; - } - - protected VersionTokenizer(String versionString) { - if (versionString == null) - throw new IllegalArgumentException("versionString is null"); - - _versionString = versionString; - _length = versionString.length(); - } - - protected boolean MoveNext() { - _number = 0; - _suffix = ""; - _hasValue = false; - - // No more characters - if (_position >= _length) - return false; - - _hasValue = true; - - while (_position < _length) { - char c = _versionString.charAt(_position); - if (c < '0' || c > '9') break; - _number = _number * 10 + (c - '0'); - _position++; - } - - int suffixStart = _position; - - while (_position < _length) { - char c = _versionString.charAt(_position); - if (c == '.') break; - _position++; - } - - _suffix = _versionString.substring(suffixStart, _position); - - if (_position < _length) _position++; - - return true; - } -} \ No newline at end of file diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Version/VersionType.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Version/VersionType.java deleted file mode 100644 index d9768429..00000000 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Version/VersionType.java +++ /dev/null @@ -1,23 +0,0 @@ -package net.ME1312.SubServers.Bungee.Library.Version; - -public enum VersionType { - PRE_ALPHA(-6, "pa", "pre-alpha"), - ALPHA(-5, "a", "alpha"), - PREVIEW(-4, "pv", "preview"), - PRE_BETA(-4, "pb", "pre-beta"), - BETA(-3, "b", "beta"), - SNAPSHOT(-2, "s", "snapshot"), - PRE_RELEASE(-1, "pr", "pre-release"), - RELEASE(0, "r", "release"), - REVISION(0, "rv", "revision"), - VERSION(0, "v", "version"), - UPDATE(0, "u", "update"), - ; - final short stageid; - final String shortname, longname; - VersionType(int stageid, String shortname, String longname) { - this.stageid = (short) stageid; - this.shortname = shortname; - this.longname = longname; - } -} \ No newline at end of file diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Cipher.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Cipher.java deleted file mode 100644 index 5fae74c6..00000000 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Cipher.java +++ /dev/null @@ -1,34 +0,0 @@ -package net.ME1312.SubServers.Bungee.Network; - -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import org.msgpack.value.Value; - -/** - * SubData Cipher Layout Class - */ -public interface Cipher { - /** - * Get the name of this Cipher - * - * @return Cipher Name - */ - String getName(); - - /** - * Encrypt JSON Data - * - * @param key Key to Encrypt Data with - * @param data Data to Encrypt - * @return Encrypted Data Array - */ - Value encrypt(String key, YAMLSection data) throws Exception; - - /** - * Decrypt Encrypted JSON Data - * - * @param key Key to Decrypt Data with - * @param data Encrypted Data Array - * @return JSON Data - */ - YAMLSection decrypt(String key, Value data) throws Exception; -} diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Client.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Client.java deleted file mode 100644 index acfd1e43..00000000 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Client.java +++ /dev/null @@ -1,225 +0,0 @@ -package net.ME1312.SubServers.Bungee.Network; - -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Exception.IllegalPacketException; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Network.Packet.PacketAuthorization; -import org.msgpack.core.MessageInsufficientBufferException; -import org.msgpack.core.MessagePack; -import org.msgpack.core.MessagePacker; -import org.msgpack.core.MessageUnpacker; -import org.msgpack.value.Value; -import org.yaml.snakeyaml.error.YAMLException; - -import java.io.*; -import java.lang.reflect.InvocationTargetException; -import java.net.InetSocketAddress; -import java.net.Socket; -import java.net.SocketException; -import java.util.*; - -/** - * Network Client Class - */ -public class Client { - private Socket socket; - private InetSocketAddress address; - private ClientHandler handler; - private MessagePacker out; - private Timer authorized; - private SubDataServer subdata; - boolean closed; - - /** - * Network Client - * - * @param subdata SubData Direct Server - * @param client Socket to Bind - */ - public Client(SubDataServer subdata, Socket client) throws IOException { - if (Util.isNull(subdata, client)) throw new NullPointerException(); - this.subdata = subdata; - closed = false; - socket = client; - out = MessagePack.newDefaultPacker(client.getOutputStream()); - address = new InetSocketAddress(client.getInetAddress(), client.getPort()); - authorized = new Timer("SubServers.Bungee::SubData_Authorization_Timeout(" + address.toString() + ')'); - authorized.schedule(new TimerTask() { - @Override - public void run() { - if (!socket.isClosed()) try { - subdata.removeClient(Client.this); - } catch (IOException e) { - e.printStackTrace(); - } - } - }, 15000); - loop(); - } - - /** - * Network Loop - */ - private void loop() { - new Thread(() -> { - try { - MessageUnpacker in = MessagePack.newDefaultUnpacker(socket.getInputStream()); - Value input; - while ((input = in.unpackValue()) != null) { - recievePacket(input); - } - try { - subdata.removeClient(Client.this); - } catch (IOException e1) { - e1.printStackTrace(); - } - } catch (Exception e) { - if (!(e instanceof SocketException || e instanceof MessageInsufficientBufferException)) e.printStackTrace(); - try { - subdata.removeClient(Client.this); - } catch (IOException e1) { - e1.printStackTrace(); - } - } - }, "SubServers.Bungee::SubData_Packet_Listener(" + address.toString() + ')').start(); - } - - private void recievePacket(Value input) { - try { - YAMLSection data = subdata.getCipher().decrypt(subdata.plugin.config.get().getSection("Settings").getSection("SubData").getRawString("Password"), input); - for (PacketIn packet : SubDataServer.decodePacket(this, data)) { - boolean auth = authorized == null; - if (auth || packet instanceof PacketAuthorization) { - try { - if (data.contains("f")) { - if (data.getString("f").length() <= 0) { - List clients = new ArrayList(); - clients.addAll(subdata.getClients()); - for (Client client : clients) { - client.out.packValue(input); - } - } else { - Client client = subdata.getClient(data.getString("f")); - if (client != null) { - client.out.packValue(input); - } else { - throw new IllegalPacketException(getAddress().toString() + ": Unknown Forward Address: " + data.getString("f")); - } - } - } else { - packet.execute(Client.this, (data.contains("c")) ? data.getSection("c") : null); - } - } catch (Throwable e) { - new InvocationTargetException(e, getAddress().toString() + ": Exception while executing PacketIn").printStackTrace(); - } - } else { - sendPacket(new PacketAuthorization(-1, "Unauthorized")); - throw new IllegalPacketException(getAddress().toString() + ": Unauthorized call to packet type: " + data.getSection("h")); - } - } - } catch (YAMLException e) { // TODO - new IllegalPacketException(getAddress().toString() + ": Unknown Packet Format: " + input).printStackTrace(); - } catch (IllegalPacketException e) { - e.printStackTrace(); - } catch (Exception e) { - new InvocationTargetException(e, getAddress().toString() + ": Exception while decoding packet").printStackTrace(); - } - } - - /** - * Send Packet to Client - * - * @param packet Packet to send - */ - public void sendPacket(PacketOut packet) { - if (Util.isNull(packet)) throw new NullPointerException(); - if (!isClosed()) try { - out.packValue(subdata.getCipher().encrypt(subdata.plugin.config.get().getSection("Settings").getSection("SubData").getRawString("Password"), SubDataServer.encodePacket(this, packet))); - out.flush(); - } catch (Throwable e) { - e.printStackTrace(); - } - } - - /** - * Authorize Connection - */ - public void authorize() { - if (authorized != null) { - authorized.cancel(); - System.out.println("SubData > " + socket.getRemoteSocketAddress().toString() + " logged in"); - } - authorized = null; - } - - /** - * Get Raw Connection - * - * @return Socket - */ - public Socket getConnection() { - return socket; - } - - /** - * Get if the connection has been closed - * - * @return Closed Stauts - */ - public boolean isClosed() { - return closed && socket.isClosed(); - } - - /** - * Get Remote Address - * - * @return Address - */ - public InetSocketAddress getAddress() { - return address; - } - - /** - * If the connection is authorized - * - * @return Authorization Status - */ - public boolean isAuthorized() { - return authorized == null; - } - - /** - * Gets the Linked Handler - * - * @return Handler - */ - public ClientHandler getHandler() { - return handler; - } - - /** - * Sets the Handler - * - * @param obj Handler - */ - public void setHandler(ClientHandler obj) { - if (handler != null && handler.getSubData() != null && equals(handler.getSubData())) handler.setSubData(null); - handler = obj; - if (handler != null && (handler.getSubData() == null || !equals(handler.getSubData()))) handler.setSubData(this); - } - - /** - * Disconnects the Client - * - * @throws IOException - */ - public void disconnect() throws IOException { - if (!socket.isClosed()) getConnection().close(); - if (handler != null) { - setHandler(null); - handler = null; - } - closed = true; - if (subdata.getClients().contains(this)) subdata.removeClient(this); - } -} diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/ClientHandler.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/ClientHandler.java deleted file mode 100644 index f0e06b11..00000000 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/ClientHandler.java +++ /dev/null @@ -1,21 +0,0 @@ -package net.ME1312.SubServers.Bungee.Network; - -/** - * Client Handler Layout Class - */ -public interface ClientHandler { - /** - * Gets the SubData Client - * - * @return SubData Client (or null if not linked) - */ - Client getSubData(); - - /** - * Link a SubData Client to this Object - * - * @see Client#setHandler(ClientHandler) - * @param client Client to Link - */ - void setSubData(Client client); -} diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Encryption/AES.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Encryption/AES.java deleted file mode 100644 index 16a1baf7..00000000 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Encryption/AES.java +++ /dev/null @@ -1,333 +0,0 @@ -package net.ME1312.SubServers.Bungee.Network.Encryption; - -import com.google.gson.Gson; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import org.msgpack.core.MessageBufferPacker; -import org.msgpack.core.MessagePack; -import org.msgpack.core.MessagePacker; -import org.msgpack.value.Value; -import org.msgpack.value.ValueFactory; - -import javax.crypto.*; -import javax.crypto.spec.IvParameterSpec; -import javax.crypto.spec.PBEKeySpec; -import javax.crypto.spec.SecretKeySpec; -import java.io.*; -import java.nio.charset.StandardCharsets; -import java.security.InvalidAlgorithmParameterException; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; -import java.security.SecureRandom; -import java.security.spec.InvalidKeySpecException; -import java.security.spec.InvalidParameterSpecException; -import java.security.spec.KeySpec; -import java.util.Arrays; -import java.util.Map; -import java.util.Random; - -/** - * A class to perform password-based AES encryption and decryption in CBC mode. - * 128, 192, and 256-bit encryption are supported, provided that the latter two - * are permitted by the Java runtime's jurisdiction policy files. - *
- * The public interface for this class consists of the static methods - * {@link #encrypt} and {@link #decrypt}, which encrypt and decrypt arbitrary - * streams of data, respectively. - * - * @author dweymouth@gmail.com - */ -public final class AES implements net.ME1312.SubServers.Bungee.Network.Cipher { - - // AES specification - private static final String CIPHER_SPEC = "AES/CBC/PKCS5Padding"; - - // Key derivation specification - private static final String KEYGEN_SPEC = "PBKDF2WithHmacSHA1"; - private static final int SALT_LENGTH = 16; // in bytes - private static final int AUTH_KEY_LENGTH = 8; // in bytes - private static final int ITERATIONS = 32768; - - // Process input/output streams in chunks - private static final int BUFFER_SIZE = 1024; - - // Hold Data for use by SubData Cipher methods - private final int keyLength; - - /** - * Constructor for use as a SubData Cipher - */ - public AES(int keyLength) { - this.keyLength = keyLength; - } - - /** - * @return a new pseudorandom salt of the specified length - */ - private static byte[] generateSalt(int length) { - Random r = new SecureRandom(); - byte[] salt = new byte[length]; - r.nextBytes(salt); - return salt; - } - - /** - * Derive an AES encryption key and authentication key from given password and salt, - * using PBKDF2 key stretching. The authentication key is 64 bits long. - * @param keyLength - * length of the AES key in bits (128, 192, or 256) - * @param password - * the password from which to derive the keys - * @param salt - * the salt from which to derive the keys - * @return a Keys object containing the two generated keys - */ - private static Keys keygen(int keyLength, char[] password, byte[] salt) { - SecretKeyFactory factory; - try { - factory = SecretKeyFactory.getInstance(KEYGEN_SPEC); - } catch (NoSuchAlgorithmException impossible) { return null; } - // derive a longer key, then split into AES key and authentication key - KeySpec spec = new PBEKeySpec(password, salt, ITERATIONS, keyLength + AUTH_KEY_LENGTH * 8); - SecretKey tmp = null; - try { - tmp = factory.generateSecret(spec); - } catch (InvalidKeySpecException impossible) { } - byte[] fullKey = tmp.getEncoded(); - SecretKey authKey = new SecretKeySpec( // key for password authentication - Arrays.copyOfRange(fullKey, 0, AUTH_KEY_LENGTH), "AES"); - SecretKey encKey = new SecretKeySpec( // key for AES encryption - Arrays.copyOfRange(fullKey, AUTH_KEY_LENGTH, fullKey.length), "AES"); - return new Keys(encKey, authKey); - } - - /** - * Encrypts a stream of data. The encrypted stream consists of a header - * followed by the raw AES data. The header is broken down as follows:
- *
    - *
  • keyLength: AES key length in bytes (valid for 16, 24, 32) (1 byte)
  • - *
  • salt: pseudorandom salt used to derive keys from password (16 bytes)
  • - *
  • authentication key (derived from password and salt, used to - * check validity of password upon decryption) (8 bytes)
  • - *
  • IV: pseudorandom AES initialization vector (16 bytes)
  • - *
- * - * @param keyLength - * key length to use for AES encryption (must be 128, 192, or 256) - * @param password - * password to use for encryption - * @param input - * an arbitrary byte stream to encrypt - * @param output - * stream to which encrypted data will be written - * @throws AES.InvalidKeyLengthException - * if keyLength is not 128, 192, or 256 - * @throws AES.StrongEncryptionNotAvailableException - * if keyLength is 192 or 256, but the Java runtime's jurisdiction - * policy files do not allow 192- or 256-bit encryption - * @throws IOException - */ - public static void encrypt(int keyLength, String password, InputStream input, OutputStream output) - throws InvalidKeyLengthException, StrongEncryptionNotAvailableException, IOException { - // Check validity of key length - if (keyLength != 128 && keyLength != 192 && keyLength != 256) { - throw new InvalidKeyLengthException(keyLength); - } - - // generate salt and derive keys for authentication and encryption - byte[] salt = generateSalt(SALT_LENGTH); - Keys keys = keygen(keyLength, password.toCharArray(), salt); - - // initialize AES encryption - Cipher encrypt = null; - try { - encrypt = Cipher.getInstance(CIPHER_SPEC); - encrypt.init(Cipher.ENCRYPT_MODE, keys.encryption); - } catch (NoSuchAlgorithmException | NoSuchPaddingException impossible) { } - catch (InvalidKeyException e) { // 192 or 256-bit AES not available - throw new StrongEncryptionNotAvailableException(keyLength); - } - - // get initialization vector - byte[] iv = null; - try { - iv = encrypt.getParameters().getParameterSpec(IvParameterSpec.class).getIV(); - } catch (InvalidParameterSpecException impossible) { } - - // write authentication and AES initialization data - output.write(keyLength / 8); - output.write(salt); - output.write(keys.authentication.getEncoded()); - output.write(iv); - - // read data from input into buffer, encrypt and write to output - byte[] buffer = new byte[BUFFER_SIZE]; - int numRead; - byte[] encrypted = null; - while ((numRead = input.read(buffer)) > 0) { - encrypted = encrypt.update(buffer, 0, numRead); - if (encrypted != null) { - output.write(encrypted); - } - } - try { // finish encryption - do final block - encrypted = encrypt.doFinal(); - } catch (IllegalBlockSizeException | BadPaddingException impossible) { } - if (encrypted != null) { - output.write(encrypted); - } - output.flush(); - } - - /** - * This method calls to {@link #encrypt(int, String, InputStream, OutputStream)}, simplified for the {@link net.ME1312.SubServers.Bungee.Network.Cipher} interface. - * - * @param key Key to Encrypt Data with - * @param data Data to Encrypt - * @return Encrypted Data Array - */ - public Value encrypt(String key, YAMLSection data) throws Exception { - ByteArrayOutputStream unencrypted = new ByteArrayOutputStream(); - MessagePacker packer = MessagePack.newDefaultPacker(unencrypted); - packer.packValue(data.msgPack()); - packer.close(); - - ByteArrayOutputStream encrypted = new ByteArrayOutputStream(); - encrypt(keyLength, key, new ByteArrayInputStream(unencrypted.toByteArray()), encrypted); - return ValueFactory.newBinary(encrypted.toByteArray(), true); - } - - public String getName() { - return "AES_" + keyLength; - } - - /** - * Decrypts a stream of data that was encrypted by {@link #encrypt}. - * @param password - * the password used to encrypt/decrypt the stream - * @param input - * stream of encrypted data to be decrypted - * @param output - * stream to which decrypted data will be written - * @return the key length for the decrypted stream (128, 192, or 256) - * @throws AES.InvalidPasswordException - * if the given password was not used to encrypt the data - * @throws AES.InvalidAESStreamException - * if the given input stream is not a valid AES-encrypted stream - * @throws AES.StrongEncryptionNotAvailableException - * if the stream is 192 or 256-bit encrypted, and the Java runtime's - * jurisdiction policy files do not allow for AES-192 or 256 - * @throws IOException - */ - public static int decrypt(String password, InputStream input, OutputStream output) - throws InvalidPasswordException, InvalidAESStreamException, IOException, - StrongEncryptionNotAvailableException { - int keyLength = input.read() * 8; - // Check validity of key length - if (keyLength != 128 && keyLength != 192 && keyLength != 256) { - throw new InvalidAESStreamException(); - } - - // read salt, generate keys, and authenticate password - byte[] salt = new byte[SALT_LENGTH]; - input.read(salt); - Keys keys = keygen(keyLength, password.toCharArray(), salt); - byte[] authRead = new byte[AUTH_KEY_LENGTH]; - input.read(authRead); - if (!Arrays.equals(keys.authentication.getEncoded(), authRead)) { - throw new InvalidPasswordException(); - } - - // initialize AES decryption - byte[] iv = new byte[16]; // 16-byte I.V. regardless of key size - input.read(iv); - Cipher decrypt = null; - try { - decrypt = Cipher.getInstance(CIPHER_SPEC); - decrypt.init(Cipher.DECRYPT_MODE, keys.encryption, new IvParameterSpec(iv)); - } catch (NoSuchAlgorithmException | NoSuchPaddingException - | InvalidAlgorithmParameterException impossible) { } - catch (InvalidKeyException e) { // 192 or 256-bit AES not available - throw new StrongEncryptionNotAvailableException(keyLength); - } - - // read data from input into buffer, decrypt and write to output - byte[] buffer = new byte[BUFFER_SIZE]; - int numRead; - byte[] decrypted; - while ((numRead = input.read(buffer)) > 0) { - decrypted = decrypt.update(buffer, 0, numRead); - if (decrypted != null) { - output.write(decrypted); - } - } - try { // finish decryption - do final block - decrypted = decrypt.doFinal(); - } catch (IllegalBlockSizeException | BadPaddingException e) { - throw new InvalidAESStreamException(e); - } - if (decrypted != null) { - output.write(decrypted); - } - - output.flush(); - return keyLength; - } - - /** - * This method calls to {@link #decrypt(String, InputStream, OutputStream)}), simplified for the {@link net.ME1312.SubServers.Bungee.Network.Cipher} interface. - * - * @param key Key to Decrypt Data with - * @param data Encrypted Data Array - * @return JSON Data - */ - @SuppressWarnings("unchecked") - public YAMLSection decrypt(String key, Value data) throws Exception { - ByteArrayOutputStream bytes = new ByteArrayOutputStream(); - decrypt(key, new ByteArrayInputStream(data.asBinaryValue().asByteArray()), bytes); - return new YAMLSection(MessagePack.newDefaultUnpacker(bytes.toByteArray()).unpackValue().asMapValue()); - } - - /** - * A tuple of encryption and authentication keys returned by {@link #keygen} - */ - private static class Keys { - public final SecretKey encryption, authentication; - public Keys(SecretKey encryption, SecretKey authentication) { - this.encryption = encryption; - this.authentication = authentication; - } - } - - /** - * Thrown if an attempt is made to decrypt a stream with an incorrect password. - */ - public static class InvalidPasswordException extends Exception { } - - /** - * Thrown if an attempt is made to encrypt a stream with an invalid AES key length. - */ - public static class InvalidKeyLengthException extends Exception { - InvalidKeyLengthException(int length) { - super("Invalid AES key length: " + length); - } - } - - /** - * Thrown if 192- or 256-bit AES encryption or decryption is attempted, - * but not available on the particular Java platform. - */ - public static class StrongEncryptionNotAvailableException extends Exception { - public StrongEncryptionNotAvailableException(int keySize) { - super(keySize + "-bit AES encryption is not available on this Java platform."); - } - } - - /** - * Thrown if an attempt is made to decrypt an invalid AES stream. - */ - public static class InvalidAESStreamException extends Exception { - public InvalidAESStreamException() { super(); }; - public InvalidAESStreamException(Exception e) { super(e); } - } - -} \ No newline at end of file diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketAuthorization.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketAuthorization.java deleted file mode 100644 index f83d0349..00000000 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketAuthorization.java +++ /dev/null @@ -1,68 +0,0 @@ -package net.ME1312.SubServers.Bungee.Network.Packet; - -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.Client; -import net.ME1312.SubServers.Bungee.Network.PacketIn; -import net.ME1312.SubServers.Bungee.Network.PacketOut; -import net.ME1312.SubServers.Bungee.SubPlugin; - -/** - * Authorization Packet - */ -public final class PacketAuthorization implements PacketIn, PacketOut { - private SubPlugin plugin; - private int response; - private String message; - - /** - * New PacketAuthorization (In) - * - * @param plugin SubPlugin - */ - public PacketAuthorization(SubPlugin plugin) { - if (Util.isNull(plugin)) throw new NullPointerException(); - this.plugin = plugin; - } - - /** - * New PacketAuthorization (Out) - * - * @param response Response ID - * @param message Message - */ - public PacketAuthorization(int response, String message) { - if (Util.isNull(response, message)) throw new NullPointerException(); - this.response = response; - this.message = message; - } - - @Override - public YAMLSection generate() { - YAMLSection data = new YAMLSection(); - data.set("r", response); - data.set("m", message); - return data; - } - - @Override - public void execute(Client client, YAMLSection data) { - try { - if (data.getRawString("password").equals(plugin.config.get().getSection("Settings").getSection("SubData").getRawString("Password"))) { - client.authorize(); - client.sendPacket(new PacketAuthorization(0, "Successfully Logged in")); - } else { - client.sendPacket(new PacketAuthorization(2, "Invalid Password")); - } - } catch (Exception e) { - client.sendPacket(new PacketAuthorization(1, e.getClass().getCanonicalName() + ": " + e.getMessage())); - e.printStackTrace(); - } - } - - @Override - public Version getVersion() { - return new Version("2.11.0a"); - } -} diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketCommandServer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketCommandServer.java index 62467e53..08675c97 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketCommandServer.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketCommandServer.java @@ -1,13 +1,12 @@ package net.ME1312.SubServers.Bungee.Network.Packet; +import net.ME1312.SubData.Server.SubDataClient; import net.ME1312.SubServers.Bungee.Host.Server; import net.ME1312.SubServers.Bungee.Host.SubServer; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.Client; -import net.ME1312.SubServers.Bungee.Network.PacketIn; -import net.ME1312.SubServers.Bungee.Network.PacketOut; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Server.Protocol.PacketObjectIn; +import net.ME1312.SubData.Server.Protocol.PacketObjectOut; import net.ME1312.SubServers.Bungee.SubPlugin; import java.util.Map; @@ -16,11 +15,10 @@ import java.util.UUID; /** * Server Command Packet */ -public class PacketCommandServer implements PacketIn, PacketOut { +public class PacketCommandServer implements PacketObjectIn, PacketObjectOut { private SubPlugin plugin; private int response; - private String message; - private String id; + private UUID tracker; /** * New PacketCommandServer (In) @@ -36,66 +34,67 @@ public class PacketCommandServer implements PacketIn, PacketOut { * New PacketCommandServer (Out) * * @param response Response ID - * @param message Message - * @param id Receiver ID + * @param tracker Tracker ID */ - public PacketCommandServer(int response, String message, String id) { - if (Util.isNull(response, message)) throw new NullPointerException(); + public PacketCommandServer(int response, UUID tracker) { this.response = response; - this.message = message; - this.id = id; + this.tracker = tracker; } @Override - public YAMLSection generate() { - YAMLSection data = new YAMLSection(); - if (id != null) data.set("id", id); - data.set("r", response); - data.set("m", message); + public ObjectMap send(SubDataClient client) { + ObjectMap data = new ObjectMap(); + if (tracker != null) data.set(0x0000, tracker); + data.set(0x0001, response); return data; } @Override - public void execute(Client client, YAMLSection data) { + public void receive(SubDataClient client, ObjectMap data) { try { + UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null); + String server = data.getRawString(0x0001); + String command = data.getRawString(0x0002); + UUID player = (data.contains(0x0003)?data.getUUID(0x0003):null); + Map servers = plugin.api.getServers(); - if (!data.getRawString("server").equals("*") && !servers.keySet().contains(data.getRawString("server").toLowerCase())) { - client.sendPacket(new PacketCommandServer(3, "There is no server with that name", (data.contains("id")) ? data.getRawString("id") : null)); - } else if (!data.getRawString("server").equals("*") && !(servers.get(data.getRawString("server").toLowerCase()) instanceof SubServer)) { - client.sendPacket(new PacketCommandServer(4, "That Server is not a SubServer", (data.contains("id")) ? data.getRawString("id") : null)); - } else if (!data.getRawString("server").equals("*") && !((SubServer) servers.get(data.getRawString("server").toLowerCase())).isRunning()) { - client.sendPacket(new PacketCommandServer(5, "That SubServer is not running", (data.contains("id")) ? data.getRawString("id") : null)); + if (!server.equals("*") && !servers.keySet().contains(server.toLowerCase())) { + client.sendPacket(new PacketCommandServer(3, tracker)); + } else if (!server.equals("*") && !(servers.get(server.toLowerCase()) instanceof SubServer)) { + client.sendPacket(new PacketCommandServer(4, tracker)); + } else if (!server.equals("*") && !((SubServer) servers.get(server.toLowerCase())).isRunning()) { + client.sendPacket(new PacketCommandServer(5, tracker)); } else { - if (data.getRawString("server").equals("*")) { + if (server.equals("*")) { boolean sent = false; - for (Server server : servers.values()) { - if (server instanceof SubServer && ((SubServer) server).isRunning()) { - if (((SubServer) server).command((data.contains("player"))?data.getUUID("player"):null, data.getRawString("command"))) { + for (Server next : servers.values()) { + if (next instanceof SubServer && ((SubServer) next).isRunning()) { + if (((SubServer) next).command(player, command)) { sent = true; } } } if (sent) { - client.sendPacket(new PacketCommandServer(0, "Sending Command", (data.contains("id")) ? data.getRawString("id") : null)); + client.sendPacket(new PacketCommandServer(0, tracker)); } else { - client.sendPacket(new PacketCommandServer(1, "Couldn't send command", (data.contains("id")) ? data.getRawString("id") : null)); + client.sendPacket(new PacketCommandServer(1, tracker)); } } else { - if (((SubServer) servers.get(data.getRawString("server").toLowerCase())).command((data.contains("player"))?data.getUUID("player"):null, data.getRawString("command"))) { - client.sendPacket(new PacketCommandServer(0, "Sending Command", (data.contains("id")) ? data.getRawString("id") : null)); + if (((SubServer) servers.get(server.toLowerCase())).command(player, command)) { + client.sendPacket(new PacketCommandServer(0, tracker)); } else { - client.sendPacket(new PacketCommandServer(1, "Couldn't send command", (data.contains("id")) ? data.getRawString("id") : null)); + client.sendPacket(new PacketCommandServer(1, tracker)); } } } } catch (Throwable e) { - client.sendPacket(new PacketCommandServer(2, e.getClass().getCanonicalName() + ": " + e.getMessage(), (data.contains("id")) ? data.getRawString("id") : null)); + client.sendPacket(new PacketCommandServer(2, tracker)); e.printStackTrace(); } } @Override - public Version getVersion() { - return new Version("2.11.0a"); + public int version() { + return 0x0001; } } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketCreateServer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketCreateServer.java index 6554f107..aaf54a8d 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketCreateServer.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketCreateServer.java @@ -1,12 +1,11 @@ package net.ME1312.SubServers.Bungee.Network.Packet; +import net.ME1312.SubData.Server.SubDataClient; import net.ME1312.SubServers.Bungee.Host.SubCreator; -import net.ME1312.SubServers.Bungee.Host.SubServer; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.Client; -import net.ME1312.SubServers.Bungee.Network.PacketIn; -import net.ME1312.SubServers.Bungee.Network.PacketOut; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Version.Version; +import net.ME1312.SubData.Server.Protocol.PacketObjectIn; +import net.ME1312.SubData.Server.Protocol.PacketObjectOut; import net.ME1312.SubServers.Bungee.SubPlugin; import java.util.UUID; @@ -14,11 +13,10 @@ import java.util.UUID; /** * Create Server Packet */ -public class PacketCreateServer implements PacketIn, PacketOut { +public class PacketCreateServer implements PacketObjectIn, PacketObjectOut { private SubPlugin plugin; private int response; - private String message; - private String id; + private UUID tracker; /** * New PacketCreateServer (In) @@ -33,72 +31,76 @@ public class PacketCreateServer implements PacketIn, PacketOut { * New PacketCreateServer (Out) * * @param response Response ID - * @param message Message * @param id Receiver ID */ - public PacketCreateServer(int response, String message, String id) { + public PacketCreateServer(int response, UUID id) { this.response = response; - this.message = message; - this.id = id; + this.tracker = id; } @Override - public YAMLSection generate() { - YAMLSection data = new YAMLSection(); - if (id != null) data.set("id", id); - data.set("r", response); - data.set("m", message); + public ObjectMap send(SubDataClient client) { + ObjectMap data = new ObjectMap(); + if (tracker != null) data.set(0x0000, tracker); + data.set(0x0001, response); return data; } @Override - public void execute(Client client, YAMLSection data) { + public void receive(SubDataClient client, ObjectMap data) { try { - if (data.getSection("creator").getString("name").contains(" ")) { - client.sendPacket(new PacketCreateServer(3, "Server names cannot have spaces", (data.contains("id")) ? data.getRawString("id") : null)); - } else if (plugin.api.getSubServers().keySet().contains(data.getSection("creator").getString("name").toLowerCase()) || SubCreator.isReserved(data.getSection("creator").getString("name"))) { - client.sendPacket(new PacketCreateServer(4, "There is already a subserver with that name", (data.contains("id")) ? data.getRawString("id") : null)); - } else if (!plugin.hosts.keySet().contains(data.getSection("creator").getString("host").toLowerCase())) { - client.sendPacket(new PacketCreateServer(5, "There is no Host with that name", (data.contains("id")) ? data.getRawString("id") : null)); - } else if (!plugin.hosts.get(data.getSection("creator").getString("host").toLowerCase()).isAvailable()) { - client.sendPacket(new PacketStartServer(6, "That SubServer's Host is not available", (data.contains("id"))?data.getRawString("id"):null)); - } else if (!plugin.hosts.get(data.getSection("creator").getString("host").toLowerCase()).isEnabled()) { - client.sendPacket(new PacketStartServer(7, "That SubServer's Host is not enabled", (data.contains("id"))?data.getRawString("id"):null)); - } else if (!plugin.hosts.get(data.getSection("creator").getString("host").toLowerCase()).getCreator().getTemplates().keySet().contains(data.getSection("creator").getString("template").toLowerCase())) { - client.sendPacket(new PacketCreateServer(8, "There is no template with that name", (data.contains("id")) ? data.getRawString("id") : null)); - } else if (!plugin.hosts.get(data.getSection("creator").getString("host").toLowerCase()).getCreator().getTemplate(data.getSection("creator").getString("template")).isEnabled()) { - client.sendPacket(new PacketCreateServer(8, "That Template is not enabled", (data.contains("id")) ? data.getRawString("id") : null)); - } else if (new Version("1.8").compareTo(data.getSection("creator").getVersion("version")) > 0) { - client.sendPacket(new PacketCreateServer(10, "SubCreator cannot create servers before Minecraft 1.8", (data.contains("id")) ? data.getRawString("id") : null)); - } else if (data.getSection("creator").contains("port") && (data.getSection("creator").getInt("port") <= 0 || data.getSection("creator").getInt("port") > 65535)) { - client.sendPacket(new PacketCreateServer(11, "Invalid Port Number", (data.contains("id")) ? data.getRawString("id") : null)); + UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null); + String name = data.getRawString(0x0001); + String host = data.getRawString(0x0002); + String template = data.getRawString(0x0003); + Version version = (data.contains(0x0004)?data.getVersion(0x0004):null); + Integer port = (data.contains(0x0005)?data.getInt(0x0005):null); + UUID player = (data.contains(0x0006)?data.getUUID(0x0006):null); + boolean waitfor = (data.contains(0x0007)?data.getBoolean(0x0007):false); + + if (name.contains(" ")) { + client.sendPacket(new PacketCreateServer(3, tracker)); + } else if (plugin.api.getSubServers().keySet().contains(name.toLowerCase()) || SubCreator.isReserved(name)) { + client.sendPacket(new PacketCreateServer(4, tracker)); + } else if (!plugin.hosts.keySet().contains(host.toLowerCase())) { + client.sendPacket(new PacketCreateServer(5, tracker)); + } else if (!plugin.hosts.get(host.toLowerCase()).isAvailable()) { + client.sendPacket(new PacketCreateServer(6, tracker)); + } else if (!plugin.hosts.get(host.toLowerCase()).isEnabled()) { + client.sendPacket(new PacketCreateServer(7, tracker)); + } else if (!plugin.hosts.get(host.toLowerCase()).getCreator().getTemplates().keySet().contains(template.toLowerCase())) { + client.sendPacket(new PacketCreateServer(8, tracker)); + } else if (!plugin.hosts.get(host.toLowerCase()).getCreator().getTemplate(template).isEnabled()) { + client.sendPacket(new PacketCreateServer(9, tracker)); + } else if (port != null && (port <= 0 || port > 65535)) { + client.sendPacket(new PacketCreateServer(10, tracker)); } else { - if (plugin.hosts.get(data.getSection("creator").getString("host").toLowerCase()).getCreator().create((data.contains("player"))?data.getUUID("player"):null, data.getSection("creator").getString("name"), plugin.hosts.get(data.getSection("creator").getString("host").toLowerCase()).getCreator().getTemplate(data.getSection("creator").getString("template")), data.getSection("creator").getVersion("version"), (data.getSection("creator").contains("port"))?data.getSection("creator").getInt("port"):null)) { - if (data.contains("wait") && data.getBoolean("wait")) { + if (plugin.hosts.get(host.toLowerCase()).getCreator().create(player, name, plugin.hosts.get(host.toLowerCase()).getCreator().getTemplate(template), version, port)) { + if (waitfor) { new Thread(() -> { try { - plugin.hosts.get(data.getSection("creator").getString("host").toLowerCase()).getCreator().waitFor(); - client.sendPacket(new PacketCreateServer(0, "Created SubServer", (data.contains("id")) ? data.getRawString("id") : null)); + plugin.hosts.get(host.toLowerCase()).getCreator().waitFor(); + client.sendPacket(new PacketCreateServer(0, tracker)); } catch (InterruptedException e) { e.printStackTrace(); } }, "SubServers.Bungee::SubData_SubCreator_Handler(" + client.getAddress().toString() + ')').start(); } else { - client.sendPacket(new PacketCreateServer(0, "Creating SubServer", (data.contains("id")) ? data.getRawString("id") : null)); + client.sendPacket(new PacketCreateServer(0, tracker)); } } else { - client.sendPacket(new PacketCreateServer(1, "Couldn't create SubServer", (data.contains("id")) ? data.getRawString("id") : null)); + client.sendPacket(new PacketCreateServer(1, tracker)); } } } catch (Throwable e) { - client.sendPacket(new PacketCreateServer(2, e.getClass().getCanonicalName() + ": " + e.getMessage(), (data.contains("id")) ? data.getRawString("id") : null)); + client.sendPacket(new PacketCreateServer(2, tracker)); e.printStackTrace(); } } @Override - public Version getVersion() { - return new Version("2.13b"); + public int version() { + return 0x0001; } } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadGroupInfo.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadGroupInfo.java index 69a44601..8ce23369 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadGroupInfo.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadGroupInfo.java @@ -1,27 +1,22 @@ package net.ME1312.SubServers.Bungee.Network.Packet; -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; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.Client; -import net.ME1312.SubServers.Bungee.Network.PacketIn; -import net.ME1312.SubServers.Bungee.Network.PacketOut; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Server.SubDataClient; +import net.ME1312.SubData.Server.Protocol.PacketObjectIn; +import net.ME1312.SubData.Server.Protocol.PacketObjectOut; import net.ME1312.SubServers.Bungee.SubPlugin; -import java.util.Map; +import java.util.UUID; /** * Download Group Info Packet */ -public class PacketDownloadGroupInfo implements PacketIn, PacketOut { +public class PacketDownloadGroupInfo implements PacketObjectIn, PacketObjectOut { private SubPlugin plugin; - private String host; private String group; - private String id; + private UUID tracker; /** * New PacketDownloadGroupInfo (In) @@ -38,43 +33,42 @@ public class PacketDownloadGroupInfo implements PacketIn, PacketOut { * * @param plugin SubPlugin * @param group Group (or null for all) - * @param id Receiver ID + * @param tracker Receiver ID */ - public PacketDownloadGroupInfo(SubPlugin plugin, String group, String id) { + public PacketDownloadGroupInfo(SubPlugin plugin, String group, UUID tracker) { if (Util.isNull(plugin)) throw new NullPointerException(); this.plugin = plugin; - this.host = host; this.group = group; - this.id = id; + this.tracker = tracker; } @SuppressWarnings("unchecked") @Override - public YAMLSection generate() { - YAMLSection data = new YAMLSection(); - if (id != null) data.set("id", id); + public ObjectMap send(SubDataClient client) { + ObjectMap data = new ObjectMap(); + if (tracker != null) data.set(0x0000, tracker); - YAMLSection groups = new YAMLSection(); + ObjectMap groups = new ObjectMap(); for (String group : plugin.api.getGroups().keySet()) { if (this.group == null || this.group.length() <= 0 || this.group.equalsIgnoreCase(group)) { - YAMLSection servers = new YAMLSection(); + ObjectMap servers = new ObjectMap(); for (Server server : plugin.api.getGroup(group)) { - servers.set(server.getName(), new YAMLSection(new Gson().fromJson(server.toString(), Map.class))); + servers.set(server.getName(), server.forSubData()); } groups.set(group, servers); } } - data.set("groups", groups); + data.set(0x0001, groups); return data; } @Override - public void execute(Client client, YAMLSection data) { - client.sendPacket(new PacketDownloadGroupInfo(plugin, (data.contains("group"))?data.getRawString("group"):null, (data.contains("id"))?data.getRawString("id"):null)); + public void receive(SubDataClient client, ObjectMap data) { + client.sendPacket(new PacketDownloadGroupInfo(plugin, (data.contains(0x0001))?data.getRawString(0x0001):null, (data.contains(0x0000))?data.getUUID(0x0000):null)); } @Override - public Version getVersion() { - return new Version("2.13b"); + public int version() { + return 0x0001; } } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadHostInfo.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadHostInfo.java index 870a232c..16d74e81 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadHostInfo.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadHostInfo.java @@ -1,24 +1,22 @@ package net.ME1312.SubServers.Bungee.Network.Packet; -import com.google.gson.Gson; +import net.ME1312.SubData.Server.SubDataClient; import net.ME1312.SubServers.Bungee.Host.Host; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.Client; -import net.ME1312.SubServers.Bungee.Network.PacketIn; -import net.ME1312.SubServers.Bungee.Network.PacketOut; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Server.Protocol.PacketObjectIn; +import net.ME1312.SubData.Server.Protocol.PacketObjectOut; import net.ME1312.SubServers.Bungee.SubPlugin; -import java.util.Map; +import java.util.UUID; /** * Download Host Info Packet */ -public class PacketDownloadHostInfo implements PacketIn, PacketOut { +public class PacketDownloadHostInfo implements PacketObjectIn, PacketObjectOut { private SubPlugin plugin; private String host; - private String id; + private UUID tracker; /** * New PacketDownloadHostInfo (In) @@ -35,38 +33,38 @@ public class PacketDownloadHostInfo implements PacketIn, PacketOut { * * @param plugin SubPlugin * @param host Host (or null for all) - * @param id Receiver ID + * @param tracker Receiver ID */ - public PacketDownloadHostInfo(SubPlugin plugin, String host, String id) { + public PacketDownloadHostInfo(SubPlugin plugin, String host, UUID tracker) { if (Util.isNull(plugin)) throw new NullPointerException(); this.plugin = plugin; this.host = host; - this.id = id; + this.tracker = tracker; } @SuppressWarnings("unchecked") @Override - public YAMLSection generate() { - YAMLSection data = new YAMLSection(); - if (id != null) data.set("id", id); + public ObjectMap send(SubDataClient client) { + ObjectMap data = new ObjectMap(); + if (tracker != null) data.set(0x0000, tracker); - YAMLSection hosts = new YAMLSection(); + ObjectMap hosts = new ObjectMap(); for (Host host : plugin.api.getHosts().values()) { if (this.host == null || this.host.length() <= 0 || this.host.equalsIgnoreCase(host.getName())) { - hosts.set(host.getName(), new YAMLSection(new Gson().fromJson(host.toString(), Map.class))); + hosts.set(host.getName(), host.forSubData()); } } - data.set("hosts", hosts); + data.set(0x0001, hosts); return data; } @Override - public void execute(Client client, YAMLSection data) { - client.sendPacket(new PacketDownloadHostInfo(plugin, (data.contains("host"))?data.getRawString("host"):null, (data.contains("id"))?data.getRawString("id"):null)); + public void receive(SubDataClient client, ObjectMap data) { + client.sendPacket(new PacketDownloadHostInfo(plugin, (data.contains(0x0001))?data.getRawString(0x0001):null, (data.contains(0x0000))?data.getUUID(0x0000):null)); } @Override - public Version getVersion() { - return new Version("2.13b"); + public int version() { + return 0x0001; } } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadLang.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadLang.java index 16a4c268..410f4dc8 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadLang.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadLang.java @@ -1,21 +1,21 @@ package net.ME1312.SubServers.Bungee.Network.Packet; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.Client; -import net.ME1312.SubServers.Bungee.Network.PacketIn; -import net.ME1312.SubServers.Bungee.Network.PacketOut; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.SubData.Server.SubDataClient; +import net.ME1312.SubData.Server.Protocol.PacketObjectOut; +import net.ME1312.SubData.Server.Protocol.PacketObjectIn; import net.ME1312.SubServers.Bungee.SubPlugin; import java.util.LinkedHashMap; import java.util.Map; +import java.util.UUID; /** * Download Lang Packet */ -public class PacketDownloadLang implements PacketIn, PacketOut { +public class PacketDownloadLang implements PacketObjectIn, PacketObjectOut { private SubPlugin plugin; - private String id; + private UUID tracker; /** * New PacketDownloadLang (In) @@ -30,31 +30,31 @@ public class PacketDownloadLang implements PacketIn, PacketOut { * New PacketDownloadLang (Out) * * @param plugin SubPlugin - * @param id Receiver ID + * @param tracker Receiver ID */ - public PacketDownloadLang(SubPlugin plugin, String id) { + public PacketDownloadLang(SubPlugin plugin, UUID tracker) { this.plugin = plugin; - this.id = id; + this.tracker = tracker; } @Override - public YAMLSection generate() { - YAMLSection data = new YAMLSection(); - if (id != null) data.set("id", id); + public ObjectMap send(SubDataClient client) { + ObjectMap data = new ObjectMap(); + if (tracker != null) data.set(0x0000, tracker); LinkedHashMap> full = new LinkedHashMap<>(); for (String channel : plugin.api.getLangChannels()) full.put(channel, plugin.api.getLang(channel)); - data.set("Lang", full); + data.set(0x0001, full); return data; } @Override - public void execute(Client client, YAMLSection data) { - client.sendPacket(new PacketDownloadLang(plugin, (data != null && data.contains("id"))?data.getRawString("id"):null)); + public void receive(SubDataClient client, ObjectMap data) { + client.sendPacket(new PacketDownloadLang(plugin, (data != null && data.contains(0x0000))?data.getUUID(0x0000):null)); } @Override - public Version getVersion() { - return new Version("2.11.0a"); + public int version() { + return 0x0001; } } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadNetworkList.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadNetworkList.java deleted file mode 100644 index 0eeb67ee..00000000 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadNetworkList.java +++ /dev/null @@ -1,70 +0,0 @@ -package net.ME1312.SubServers.Bungee.Network.Packet; - -import com.google.gson.Gson; -import com.google.gson.JsonParseException; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.Client; -import net.ME1312.SubServers.Bungee.Network.PacketIn; -import net.ME1312.SubServers.Bungee.Network.PacketOut; -import net.ME1312.SubServers.Bungee.SubPlugin; - -import java.util.Map; - -/** - * Download Network List Packet - */ -public class PacketDownloadNetworkList implements PacketIn, PacketOut { - private SubPlugin plugin; - private String id; - - /** - * New PacketDownloadNetworkList (In) - * - * @param plugin SubPlugin - */ - public PacketDownloadNetworkList(SubPlugin plugin) { - if (Util.isNull(plugin)) throw new NullPointerException(); - this.plugin = plugin; - } - - /** - * New PacketDownloadNetworkList (Out) - * - * @param plugin SubPlugin - * @param id Receiver ID - */ - public PacketDownloadNetworkList(SubPlugin plugin, String id) { - if (Util.isNull(plugin)) throw new NullPointerException(); - this.plugin = plugin; - this.id = id; - } - - @SuppressWarnings("unchecked") - @Override - public YAMLSection generate() { - YAMLSection json = new YAMLSection(); - if (id != null) json.set("id", id); - YAMLSection clients = new YAMLSection(); - for (Client client : plugin.subdata.getClients()) { - try { - clients.set(client.getAddress().toString(), new YAMLSection(new Gson().fromJson(client.getHandler().toString(), Map.class))); - } catch (JsonParseException | NullPointerException e) { - clients.set(client.getAddress().toString(), new YAMLSection()); - } - } - json.set("clients", clients); - return json; - } - - @Override - public void execute(Client client, YAMLSection data) { - client.sendPacket(new PacketDownloadNetworkList(plugin, (data.contains("id"))?data.getRawString("id"):null)); - } - - @Override - public Version getVersion() { - return new Version("2.11.0a"); - } -} diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadPlatformInfo.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadPlatformInfo.java index 539c72be..064395e6 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadPlatformInfo.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadPlatformInfo.java @@ -1,21 +1,22 @@ package net.ME1312.SubServers.Bungee.Network.Packet; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.Client; -import net.ME1312.SubServers.Bungee.Network.PacketIn; -import net.ME1312.SubServers.Bungee.Network.PacketOut; +import net.ME1312.SubData.Server.SubDataClient; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Version.Version; +import net.ME1312.SubData.Server.Protocol.PacketObjectOut; +import net.ME1312.SubData.Server.Protocol.PacketObjectIn; import net.ME1312.SubServers.Bungee.SubPlugin; import net.md_5.bungee.api.config.ListenerInfo; import java.util.LinkedList; +import java.util.UUID; /** * Download Proxy Info Packet */ -public class PacketDownloadPlatformInfo implements PacketIn, PacketOut { +public class PacketDownloadPlatformInfo implements PacketObjectIn, PacketObjectOut { private SubPlugin plugin; - private String id; + private UUID tracker; /** * New PacketDownloadPlatformInfo (In) @@ -30,65 +31,67 @@ public class PacketDownloadPlatformInfo implements PacketIn, PacketOut { * New PacketDownloadPlatformInfo (Out) * * @param plugin SubPlugin - * @param id Receiver ID + * @param tracker Receiver ID */ - public PacketDownloadPlatformInfo(SubPlugin plugin, String id) { + public PacketDownloadPlatformInfo(SubPlugin plugin, UUID tracker) { this.plugin = plugin; - this.id = id; + this.tracker = tracker; } @Override - public YAMLSection generate() { - YAMLSection data = new YAMLSection(); - if (id != null) data.set("id", id); - YAMLSection subservers = new YAMLSection(); + public ObjectMap send(SubDataClient client) { + ObjectMap data = new ObjectMap(); + if (tracker != null) data.set(0x0000, tracker); + ObjectMap info = new ObjectMap(); + ObjectMap subservers = new ObjectMap(); 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(); + info.set("subservers", subservers); + ObjectMap bungee = new ObjectMap(); 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()); - LinkedList listeners = new LinkedList(); - for (ListenerInfo info : plugin.getConfig().getListeners()) { - YAMLSection listener = new YAMLSection(); - listener.set("forced-hosts", info.getForcedHosts()); - listener.set("motd", info.getMotd()); - listener.set("priorities", info.getServerPriority()); - listener.set("player-limit", info.getMaxPlayers()); + LinkedList> listeners = new LinkedList>(); + for (ListenerInfo next : plugin.getConfig().getListeners()) { + ObjectMap listener = new ObjectMap(); + listener.set("forced-hosts", next.getForcedHosts()); + listener.set("motd", next.getMotd()); + listener.set("priorities", next.getServerPriority()); + listener.set("player-limit", next.getMaxPlayers()); listeners.add(listener); } bungee.set("listeners", listeners); - data.set("bungee", bungee); - YAMLSection minecraft = new YAMLSection(); + info.set("bungee", bungee); + ObjectMap minecraft = new ObjectMap(); 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(); - YAMLSection os = new YAMLSection(); + info.set("minecraft", minecraft); + ObjectMap system = new ObjectMap(); + ObjectMap os = new ObjectMap(); os.set("name", System.getProperty("os.name")); os.set("version", System.getProperty("os.version")); system.set("os", os); - YAMLSection java = new YAMLSection(); + ObjectMap java = new ObjectMap(); java.set("version", System.getProperty("java.version")); system.set("java", java); - data.set("system", system); + info.set("system", system); + data.set(0x0001, info); return data; } @Override - public void execute(Client client, YAMLSection data) { - client.sendPacket(new PacketDownloadPlatformInfo(plugin, (data != null && data.contains("id"))?data.getRawString("id"):null)); + public void receive(SubDataClient client, ObjectMap data) { + client.sendPacket(new PacketDownloadPlatformInfo(plugin, (data != null && data.contains(0x0000))?data.getUUID(0x0000):null)); } @Override - public Version getVersion() { - return new Version("2.11.0a"); + public int version() { + return 0x0001; } } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadPlayerList.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadPlayerList.java index 28730c60..22ab9949 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadPlayerList.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadPlayerList.java @@ -1,12 +1,11 @@ package net.ME1312.SubServers.Bungee.Network.Packet; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.NamedContainer; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.Client; -import net.ME1312.SubServers.Bungee.Network.PacketIn; -import net.ME1312.SubServers.Bungee.Network.PacketOut; +import net.ME1312.SubData.Server.SubDataClient; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.NamedContainer; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Server.Protocol.PacketObjectIn; +import net.ME1312.SubData.Server.Protocol.PacketObjectOut; import net.ME1312.SubServers.Bungee.SubPlugin; import net.md_5.bungee.api.config.ServerInfo; @@ -15,9 +14,9 @@ import java.util.UUID; /** * Download Player List Packet */ -public class PacketDownloadPlayerList implements PacketIn, PacketOut { +public class PacketDownloadPlayerList implements PacketObjectIn, PacketObjectOut { private SubPlugin plugin; - private String id; + private UUID tracker; /** * New PacketDownloadPlayerList (In) @@ -33,22 +32,22 @@ public class PacketDownloadPlayerList implements PacketIn, PacketOut { * New PacketDownloadPlayerList (Out) * * @param plugin SubPlugin - * @param id Receiver ID + * @param tracker Receiver ID */ - public PacketDownloadPlayerList(SubPlugin plugin, String id) { + public PacketDownloadPlayerList(SubPlugin plugin, UUID tracker) { if (Util.isNull(plugin)) throw new NullPointerException(); this.plugin = plugin; - this.id = id; + this.tracker = tracker; } - @Override @SuppressWarnings("unchecked") - public YAMLSection generate() { - YAMLSection data = new YAMLSection(); - if (id != null) data.set("id", id); - YAMLSection players = new YAMLSection(); + @Override + public ObjectMap send(SubDataClient client) { + ObjectMap data = new ObjectMap(); + if (tracker != null) data.set(0x0000, tracker); + ObjectMap players = new ObjectMap(); for (NamedContainer player : plugin.api.getGlobalPlayers()) { - YAMLSection pinfo = new YAMLSection(); + ObjectMap pinfo = new ObjectMap(); pinfo.set("name", player.get()); if (plugin.redis != null) { try { @@ -61,17 +60,17 @@ public class PacketDownloadPlayerList implements PacketIn, PacketOut { } players.set(player.get().toString(), pinfo); } - data.set("players", players); + data.set(0x0001, players); return data; } @Override - public void execute(Client client, YAMLSection data) { - client.sendPacket(new PacketDownloadPlayerList(plugin, (data != null && data.contains("id"))?data.getRawString("id"):null)); + public void receive(SubDataClient client, ObjectMap data) { + client.sendPacket(new PacketDownloadPlayerList(plugin, (data.contains(0x0000))?data.getUUID(0x0000):null)); } @Override - public Version getVersion() { - return new Version("2.11.0a"); + public int version() { + return 0x0001; } } 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 228f6b17..d36e41b3 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 @@ -1,26 +1,22 @@ package net.ME1312.SubServers.Bungee.Network.Packet; -import com.google.gson.Gson; -import net.ME1312.SubServers.Bungee.Host.Host; +import net.ME1312.SubData.Server.SubDataClient; 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; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.Client; -import net.ME1312.SubServers.Bungee.Network.PacketIn; -import net.ME1312.SubServers.Bungee.Network.PacketOut; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Server.Protocol.PacketObjectOut; +import net.ME1312.SubData.Server.Protocol.PacketObjectIn; import net.ME1312.SubServers.Bungee.SubPlugin; -import java.util.Map; +import java.util.UUID; /** * Download Proxy Info Packet */ -public class PacketDownloadProxyInfo implements PacketIn, PacketOut { +public class PacketDownloadProxyInfo implements PacketObjectIn, PacketObjectOut { private SubPlugin plugin; private String proxy; - private String id; + private UUID tracker; /** * New PacketDownloadProxyInfo (In) @@ -37,39 +33,39 @@ public class PacketDownloadProxyInfo implements PacketIn, PacketOut { * * @param plugin SubPlugin * @param proxy Proxy (or null for all) - * @param id Receiver ID + * @param tracker Receiver ID */ - public PacketDownloadProxyInfo(SubPlugin plugin, String proxy, String id) { + public PacketDownloadProxyInfo(SubPlugin plugin, String proxy, UUID tracker) { if (Util.isNull(plugin)) throw new NullPointerException(); this.plugin = plugin; this.proxy = proxy; - this.id = id; + this.tracker = tracker; } @SuppressWarnings("unchecked") @Override - public YAMLSection generate() { - YAMLSection data = new YAMLSection(); - if (id != null) data.set("id", id); + public ObjectMap send(SubDataClient client) { + ObjectMap data = new ObjectMap(); + if (tracker != null) data.set(0x0000, tracker); - YAMLSection proxies = new YAMLSection(); + ObjectMap proxies = new ObjectMap(); for (Proxy proxy : plugin.api.getProxies().values()) { if (this.proxy == null || this.proxy.equalsIgnoreCase(proxy.getName())) { - proxies.set(proxy.getName(), new YAMLSection(new Gson().fromJson(proxy.toString(), Map.class))); + proxies.set(proxy.getName(), proxy.forSubData()); } } - data.set("proxies", proxies); - if ((this.proxy == null || this.proxy.length() <= 0) && plugin.api.getMasterProxy() != null) data.set("master", new YAMLSection(new Gson().fromJson(plugin.api.getMasterProxy().toString(), Map.class))); + data.set(0x0001, proxies); + if ((this.proxy == null || this.proxy.length() <= 0) && plugin.api.getMasterProxy() != null) data.set(0x0002, plugin.api.getMasterProxy().forSubData()); return data; } @Override - public void execute(Client client, YAMLSection data) { - client.sendPacket(new PacketDownloadProxyInfo(plugin, (data.contains("proxy"))?data.getRawString("proxy"):null, (data.contains("id"))?data.getRawString("id"):null)); + public void receive(SubDataClient client, ObjectMap data) { + client.sendPacket(new PacketDownloadProxyInfo(plugin, (data.contains(0x0001))?data.getRawString(0x0001):null, (data.contains(0x0000))?data.getUUID(0x0000):null)); } @Override - public Version getVersion() { - return new Version("2.13b"); + public int version() { + return 0x0001; } } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadServerInfo.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadServerInfo.java index fbaf9c8b..be1f64fe 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadServerInfo.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDownloadServerInfo.java @@ -1,26 +1,22 @@ package net.ME1312.SubServers.Bungee.Network.Packet; -import com.google.gson.Gson; -import net.ME1312.SubServers.Bungee.Host.Host; -import net.ME1312.SubServers.Bungee.Host.Proxy; +import net.ME1312.SubData.Server.SubDataClient; import net.ME1312.SubServers.Bungee.Host.Server; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.Client; -import net.ME1312.SubServers.Bungee.Network.PacketIn; -import net.ME1312.SubServers.Bungee.Network.PacketOut; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Server.Protocol.PacketObjectIn; +import net.ME1312.SubData.Server.Protocol.PacketObjectOut; import net.ME1312.SubServers.Bungee.SubPlugin; -import java.util.Map; +import java.util.UUID; /** * Download Server Info Packet */ -public class PacketDownloadServerInfo implements PacketIn, PacketOut { +public class PacketDownloadServerInfo implements PacketObjectIn, PacketObjectOut { private SubPlugin plugin; private String server; - private String id; + private UUID tracker; /** * New PacketDownloadServerInfo (In) @@ -37,38 +33,38 @@ public class PacketDownloadServerInfo implements PacketIn, PacketOut { * * @param plugin SubPlugin * @param server Server (or null for all) - * @param id Receiver ID + * @param tracker Receiver ID */ - public PacketDownloadServerInfo(SubPlugin plugin, String server, String id) { + public PacketDownloadServerInfo(SubPlugin plugin, String server, UUID tracker) { if (Util.isNull(plugin)) throw new NullPointerException(); this.plugin = plugin; this.server = server; - this.id = id; + this.tracker = tracker; } @SuppressWarnings("unchecked") @Override - public YAMLSection generate() { - YAMLSection data = new YAMLSection(); - if (id != null) data.set("id", id); + public ObjectMap send(SubDataClient client) { + ObjectMap data = new ObjectMap(); + if (tracker != null) data.set(0x0000, tracker); - YAMLSection servers = new YAMLSection(); + ObjectMap servers = new ObjectMap(); for (Server server : plugin.api.getServers().values()) { if (this.server == null || this.server.length() <= 0 || this.server.equalsIgnoreCase(server.getName())) { - servers.set(server.getName(), new YAMLSection(new Gson().fromJson(server.toString(), Map.class))); + servers.set(server.getName(), server.forSubData()); } } - data.set("servers", servers); + data.set(0x0001, servers); return data; } @Override - public void execute(Client client, YAMLSection data) { - client.sendPacket(new PacketDownloadServerInfo(plugin, (data.contains("server"))?data.getRawString("server"):null, (data.contains("id"))?data.getRawString("id"):null)); + public void receive(SubDataClient client, ObjectMap data) { + client.sendPacket(new PacketDownloadServerInfo(plugin, (data.contains(0x0001))?data.getRawString(0x0001):null, (data.contains(0x0000))?data.getUUID(0x0000):null)); } @Override - public Version getVersion() { - return new Version("2.13b"); + public int version() { + return 0x0001; } } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExAddServer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExAddServer.java index bce62d4c..80520f43 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExAddServer.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExAddServer.java @@ -1,12 +1,11 @@ package net.ME1312.SubServers.Bungee.Network.Packet; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Callback; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.Client; -import net.ME1312.SubServers.Bungee.Network.PacketIn; -import net.ME1312.SubServers.Bungee.Network.PacketOut; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Callback.Callback; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Server.SubDataClient; +import net.ME1312.SubData.Server.Protocol.PacketObjectIn; +import net.ME1312.SubData.Server.Protocol.PacketObjectOut; import java.util.HashMap; import java.util.UUID; @@ -14,8 +13,8 @@ import java.util.UUID; /** * Add Server External Host Packet */ -public class PacketExAddServer implements PacketIn, PacketOut { - private static HashMap[]> callbacks = new HashMap[]>(); +public class PacketExAddServer implements PacketObjectIn, PacketObjectOut { + private static HashMap>[]> callbacks = new HashMap>[]>(); private String name; private boolean enabled; private int port; @@ -24,7 +23,7 @@ public class PacketExAddServer implements PacketIn, PacketOut { private String executable; private String stopcmd; private UUID running; - private String id; + private UUID tracker; /** * New PacketExAddServer (In) @@ -41,7 +40,7 @@ public class PacketExAddServer implements PacketIn, PacketOut { * @param executable Executable */ @SafeVarargs - public PacketExAddServer(String name, boolean enabled, int port, boolean log, String directory, String executable, String stopcmd, UUID running, Callback... callback) { + public PacketExAddServer(String name, boolean enabled, int port, boolean log, String directory, String executable, String stopcmd, UUID running, Callback>... callback) { if (Util.isNull(name, enabled, log, directory, executable, callback)) throw new NullPointerException(); this.name = name; this.enabled = enabled; @@ -51,35 +50,33 @@ public class PacketExAddServer implements PacketIn, PacketOut { this.executable = executable; this.stopcmd = stopcmd; this.running = running; - this.id = Util.getNew(callbacks.keySet(), UUID::randomUUID).toString(); - callbacks.put(id, callback); + this.tracker = Util.getNew(callbacks.keySet(), UUID::randomUUID); + callbacks.put(tracker, callback); } @Override - public YAMLSection generate() { - YAMLSection data = new YAMLSection(); - if (id != null) data.set("id", id); - YAMLSection server = new YAMLSection(); - server.set("name", name); - server.set("enabled", enabled); - server.set("port", port); - server.set("log", log); - server.set("dir", directory); - server.set("exec", executable); - server.set("stopcmd", stopcmd); - if (running != null) server.set("running", running.toString()); - data.set("server", server); + public ObjectMap send(SubDataClient client) { + ObjectMap data = new ObjectMap(); + if (tracker != null) data.set(0x0000, tracker); + data.set(0x0001, name); + data.set(0x0002, enabled); + data.set(0x0003, port); + data.set(0x0004, log); + data.set(0x0005, directory); + data.set(0x0006, executable); + data.set(0x0007, stopcmd); + if (running != null) data.set(0x0008, running.toString()); return data; } @Override - public void execute(Client client, YAMLSection data) { - for (Callback callback : callbacks.get(data.getRawString("id"))) callback.run(data); - callbacks.remove(data.getRawString("id")); + public void receive(SubDataClient client, ObjectMap data) { + for (Callback> callback : callbacks.get(data.getUUID(0x0000))) callback.run(data); + callbacks.remove(data.getUUID(0x0000)); } @Override - public Version getVersion() { - return new Version("2.13.1b"); + public int version() { + return 0x0001; } } \ No newline at end of file diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExConfigureHost.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExConfigureHost.java index db44d545..acad43ea 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExConfigureHost.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExConfigureHost.java @@ -2,12 +2,11 @@ package net.ME1312.SubServers.Bungee.Network.Packet; import net.ME1312.SubServers.Bungee.Host.External.ExternalHost; import net.ME1312.SubServers.Bungee.Host.SubCreator; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.Client; -import net.ME1312.SubServers.Bungee.Network.PacketIn; -import net.ME1312.SubServers.Bungee.Network.PacketOut; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Server.SubDataClient; +import net.ME1312.SubData.Server.Protocol.PacketIn; +import net.ME1312.SubData.Server.Protocol.PacketObjectOut; import net.ME1312.SubServers.Bungee.SubPlugin; import org.msgpack.value.ValueFactory; @@ -16,7 +15,7 @@ import java.io.*; /** * External Host Configuration Packet */ -public class PacketExConfigureHost implements PacketIn, PacketOut { +public class PacketExConfigureHost implements PacketIn, PacketObjectOut { private SubPlugin plugin; private ExternalHost host; @@ -36,41 +35,33 @@ public class PacketExConfigureHost implements PacketIn, PacketOut { } @Override - public YAMLSection generate() { - YAMLSection data = new YAMLSection(); - data.set("host", plugin.config.get().getSection("Hosts").getSection(host.getName()).clone()); - YAMLSection templates = new YAMLSection(); + public ObjectMap send(SubDataClient client) { + ObjectMap data = new ObjectMap(); + data.set(0x0000, plugin.config.get().getMap("Hosts").getMap(host.getName()).clone()); + ObjectMap templates = new ObjectMap(); for (SubCreator.ServerTemplate template : host.getCreator().getTemplates().values()) { - try { - YAMLSection tinfo = new YAMLSection(); - tinfo.set("enabled", template.isEnabled()); - tinfo.set("display", template.getDisplayName()); - tinfo.set("icon", template.getIcon()); - ByteArrayOutputStream bytes = new ByteArrayOutputStream(); - Util.zip(template.getDirectory(), bytes); - tinfo.set("files", ValueFactory.newBinary(bytes.toByteArray(), true)); - tinfo.set("build", template.getBuildOptions().clone()); - tinfo.set("settings", template.getConfigOptions().clone()); - templates.set(template.getName(), tinfo); - } catch (Exception e) { - System.out.println("SubServers > Problem encoding template files: " + template.getName()); - e.printStackTrace(); - } + ObjectMap tinfo = new ObjectMap(); + tinfo.set("enabled", template.isEnabled()); + tinfo.set("display", template.getDisplayName()); + tinfo.set("icon", template.getIcon()); + tinfo.set("build", template.getBuildOptions().clone()); + tinfo.set("settings", template.getConfigOptions().clone()); + templates.set(template.getName(), tinfo); } - data.set("templates", templates); + data.set(0x0001, templates); return data; } - @Override @SuppressWarnings("unchecked") - public void execute(Client client, YAMLSection data) { - if (client.getHandler() != null && client.getHandler() instanceof ExternalHost && plugin.config.get().getSection("Hosts").getKeys().contains(((ExternalHost) client.getHandler()).getName())) { + @Override + public void receive(SubDataClient client) { + if (client.getHandler() != null && client.getHandler() instanceof ExternalHost && plugin.config.get().getMap("Hosts").getKeys().contains(((ExternalHost) client.getHandler()).getName())) { client.sendPacket(new PacketExConfigureHost(plugin, (ExternalHost) client.getHandler())); } } @Override - public Version getVersion() { - return new Version("2.11.0a"); + public int version() { + return 0x0001; } } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExCreateServer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExCreateServer.java index 1d9f056d..d1dad1d5 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExCreateServer.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExCreateServer.java @@ -1,13 +1,13 @@ package net.ME1312.SubServers.Bungee.Network.Packet; import net.ME1312.SubServers.Bungee.Host.SubCreator; -import net.ME1312.SubServers.Bungee.Library.Callback; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.Client; -import net.ME1312.SubServers.Bungee.Network.PacketIn; -import net.ME1312.SubServers.Bungee.Network.PacketOut; +import net.ME1312.Galaxi.Library.Callback.Callback; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.Galaxi.Library.Version.Version; +import net.ME1312.SubData.Server.SubDataClient; +import net.ME1312.SubData.Server.Protocol.PacketObjectOut; +import net.ME1312.SubData.Server.Protocol.PacketObjectIn; import java.util.HashMap; import java.util.UUID; @@ -15,14 +15,14 @@ import java.util.UUID; /** * Create Server External Host Packet */ -public class PacketExCreateServer implements PacketIn, PacketOut { - private static HashMap[]> callbacks = new HashMap[]>(); +public class PacketExCreateServer implements PacketObjectIn, PacketObjectOut { + private static HashMap>[]> callbacks = new HashMap>[]>(); private String name; private SubCreator.ServerTemplate template; private Version version; private int port; private UUID log; - private String id = null; + private UUID tracker = null; /** * New PacketExCreateServer @@ -42,45 +42,41 @@ public class PacketExCreateServer implements PacketIn, PacketOut { * @param callback Callbacks */ @SafeVarargs - public PacketExCreateServer(String name, SubCreator.ServerTemplate template, Version version, int port, UUID log, Callback... callback) { + public PacketExCreateServer(String name, SubCreator.ServerTemplate template, Version version, int port, UUID log, Callback>... callback) { if (Util.isNull(name, template, version, port, log, callback)) throw new NullPointerException(); this.name = name; this.template = template; this.version = version; this.port = port; this.log = log; - this.id = Util.getNew(callbacks.keySet(), UUID::randomUUID).toString(); - callbacks.put(id, callback); + this.tracker = Util.getNew(callbacks.keySet(), UUID::randomUUID); + callbacks.put(tracker, callback); } @Override - public YAMLSection generate() { - if (id == null) { - YAMLSection data = new YAMLSection(); - data.set("thread", name); - return data; + public ObjectMap send(SubDataClient client) { + ObjectMap data = new ObjectMap(); + if (tracker == null) { + data.set(0x0001, name); } else { - YAMLSection data = new YAMLSection(); - data.set("id", id); - YAMLSection creator = new YAMLSection(); - creator.set("name", name); - creator.set("template", template.getName()); - creator.set("version", version); - creator.set("port", port); - creator.set("log", log.toString()); - data.set("creator", creator); - return data; + data.set(0x0000, tracker); + data.set(0x0002, name); + data.set(0x0003, template.getName()); + data.set(0x0004, version); + data.set(0x0005, port); + data.set(0x0006, log.toString()); } + return data; } @Override - public void execute(Client client, YAMLSection data) { - for (Callback callback : callbacks.get(data.getRawString("id"))) callback.run(data); - callbacks.remove(data.getRawString("id")); + public void receive(SubDataClient client, ObjectMap data) { + for (Callback> callback : callbacks.get(data.getUUID(0x0000))) callback.run(data); + callbacks.remove(data.getUUID(0x0000)); } @Override - public Version getVersion() { - return new Version("2.11.0a"); + public int version() { + return 0x0001; } } \ No newline at end of file diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExDeleteServer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExDeleteServer.java index 9b138005..3cb68fdd 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExDeleteServer.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExDeleteServer.java @@ -1,12 +1,11 @@ package net.ME1312.SubServers.Bungee.Network.Packet; -import net.ME1312.SubServers.Bungee.Library.Callback; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.Client; -import net.ME1312.SubServers.Bungee.Network.PacketIn; -import net.ME1312.SubServers.Bungee.Network.PacketOut; +import net.ME1312.Galaxi.Library.Callback.Callback; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Server.SubDataClient; +import net.ME1312.SubData.Server.Protocol.PacketObjectIn; +import net.ME1312.SubData.Server.Protocol.PacketObjectOut; import java.util.HashMap; import java.util.UUID; @@ -14,11 +13,12 @@ import java.util.UUID; /** * Delete Server External Host Packet */ -public class PacketExDeleteServer implements PacketIn, PacketOut { - private static HashMap[]> callbacks = new HashMap[]>(); +public class PacketExDeleteServer implements PacketObjectIn, PacketObjectOut { + private static HashMap>[]> callbacks = new HashMap>[]>(); private String name; - private YAMLSection info; - private String id = null; + private ObjectMap info; + private boolean recycle; + private UUID tracker = null; /** * New PacketExDeleteServer @@ -33,35 +33,37 @@ public class PacketExDeleteServer implements PacketIn, PacketOut { * @param callback Callbacks */ @SafeVarargs - public PacketExDeleteServer(String name, YAMLSection info, Callback... callback) { + public PacketExDeleteServer(String name, ObjectMap info, boolean recycle, Callback>... callback) { if (Util.isNull(name, info, callback)) throw new NullPointerException(); this.name = name; this.info = info; - this.id = Util.getNew(callbacks.keySet(), UUID::randomUUID).toString(); - callbacks.put(id, callback); + this.recycle = recycle; + this.tracker = Util.getNew(callbacks.keySet(), UUID::randomUUID); + callbacks.put(tracker, callback); } @Override - public YAMLSection generate() { - if (id == null) { + public ObjectMap send(SubDataClient client) { + if (tracker == null) { return null; } else { - YAMLSection data = new YAMLSection(); - data.set("id", id); - data.set("server", name); - data.set("info", info); + ObjectMap data = new ObjectMap(); + data.set(0x0000, tracker); + data.set(0x0001, name); + data.set(0x0002, info); + if (recycle) data.set(0x0003, true); return data; } } @Override - public void execute(Client client, YAMLSection data) { - for (Callback callback : callbacks.get(data.getRawString("id"))) callback.run(data); - callbacks.remove(data.getRawString("id")); + public void receive(SubDataClient client, ObjectMap data) { + for (Callback> callback : callbacks.get(data.getUUID(0x0000))) callback.run(data); + callbacks.remove(data.getUUID(0x0000)); } @Override - public Version getVersion() { - return new Version("2.11.0a"); + public int version() { + return 0x0001; } } \ No newline at end of file diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExDownloadTemplates.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExDownloadTemplates.java new file mode 100644 index 00000000..89abfc6a --- /dev/null +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExDownloadTemplates.java @@ -0,0 +1,56 @@ +package net.ME1312.SubServers.Bungee.Network.Packet; + +import net.ME1312.Galaxi.Library.UniversalFile; +import net.ME1312.SubServers.Bungee.Host.External.ExternalHost; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Server.SubDataClient; +import net.ME1312.SubData.Server.Protocol.PacketIn; +import net.ME1312.SubData.Server.Protocol.PacketStreamOut; +import net.ME1312.SubServers.Bungee.SubPlugin; + +import java.io.*; + +/** + * External Host Template Download Packet + */ +public class PacketExDownloadTemplates implements PacketIn, PacketStreamOut { + private SubPlugin plugin; + private ExternalHost host; + + /** + * New PacketExDownloadTemplates (In) + */ + public PacketExDownloadTemplates(SubPlugin plugin) { + this.plugin = plugin; + } + + /** + * New PacketExDownloadTemplates (Out) + */ + public PacketExDownloadTemplates(SubPlugin plugin, ExternalHost host) { + this.plugin = plugin; + this.host = host; + } + + @Override + public void send(SubDataClient client, OutputStream stream) throws Throwable { + try { + Util.zip(new UniversalFile(plugin.dir, "SubServers:Templates"), stream); + } catch (Exception e) { + System.out.println("SubData > Problem encoding template files for Host: " + host.getName()); + e.printStackTrace(); + } + } + + @Override + public void receive(SubDataClient client) { + if (client.getHandler() != null && client.getHandler() instanceof ExternalHost && plugin.config.get().getMap("Hosts").getKeys().contains(((ExternalHost) client.getHandler()).getName())) { + client.sendPacket(new PacketExDownloadTemplates(plugin, (ExternalHost) client.getHandler())); + } + } + + @Override + public int version() { + return 0x0001; + } +} diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExRemoveServer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExRemoveServer.java index 857b8d05..f9a0049c 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExRemoveServer.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExRemoveServer.java @@ -1,12 +1,11 @@ package net.ME1312.SubServers.Bungee.Network.Packet; -import net.ME1312.SubServers.Bungee.Library.Callback; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.Client; -import net.ME1312.SubServers.Bungee.Network.PacketIn; -import net.ME1312.SubServers.Bungee.Network.PacketOut; +import net.ME1312.SubData.Server.SubDataClient; +import net.ME1312.Galaxi.Library.Callback.Callback; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Server.Protocol.PacketObjectIn; +import net.ME1312.SubData.Server.Protocol.PacketObjectOut; import java.util.HashMap; import java.util.UUID; @@ -14,10 +13,10 @@ import java.util.UUID; /** * Create Server External Host Packet */ -public class PacketExRemoveServer implements PacketIn, PacketOut { - private static HashMap[]> callbacks = new HashMap[]>(); +public class PacketExRemoveServer implements PacketObjectIn, PacketObjectOut { + private static HashMap>[]> callbacks = new HashMap>[]>(); private String name; - private String id; + private UUID tracker; /** * New PacketExRemoveServer (In) @@ -31,29 +30,29 @@ public class PacketExRemoveServer implements PacketIn, PacketOut { * @param callback Callbacks */ @SafeVarargs - public PacketExRemoveServer(String name, Callback... callback) { + public PacketExRemoveServer(String name, Callback>... callback) { if (Util.isNull(name, callback)) throw new NullPointerException(); this.name = name; - this.id = Util.getNew(callbacks.keySet(), UUID::randomUUID).toString(); - callbacks.put(id, callback); + this.tracker = Util.getNew(callbacks.keySet(), UUID::randomUUID); + callbacks.put(tracker, callback); } @Override - public YAMLSection generate() { - YAMLSection data = new YAMLSection(); - if (id != null) data.set("id", id); - data.set("server", name); + public ObjectMap send(SubDataClient client) { + ObjectMap data = new ObjectMap(); + if (tracker != null) data.set(0x0000, tracker); + data.set(0x0001, name); return data; } @Override - public void execute(Client client, YAMLSection data) { - for (Callback callback : callbacks.get(data.getString("id"))) callback.run(data); - callbacks.remove(data.getString("id")); + public void receive(SubDataClient client, ObjectMap data) { + for (Callback> callback : callbacks.get(data.getUUID(0x0000))) callback.run(data); + callbacks.remove(data.getUUID(0x0000)); } @Override - public Version getVersion() { - return new Version("2.11.0a"); + public int version() { + return 0x0001; } } \ No newline at end of file diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExUpdateServer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExUpdateServer.java index 33a972ba..036c30b1 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExUpdateServer.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExUpdateServer.java @@ -1,22 +1,21 @@ package net.ME1312.SubServers.Bungee.Network.Packet; +import net.ME1312.SubData.Server.SubDataClient; import net.ME1312.SubServers.Bungee.Host.External.ExternalSubServer; import net.ME1312.SubServers.Bungee.Host.SubServer; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.Client; -import net.ME1312.SubServers.Bungee.Network.PacketIn; -import net.ME1312.SubServers.Bungee.Network.PacketOut; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.Galaxi.Library.Version.Version; +import net.ME1312.SubData.Server.Protocol.PacketObjectOut; +import net.ME1312.SubData.Server.Protocol.PacketObjectIn; import net.ME1312.SubServers.Bungee.SubPlugin; -import java.lang.reflect.Method; import java.util.Arrays; /** * Update External Server Packet */ -public class PacketExUpdateServer implements PacketIn, PacketOut { +public class PacketExUpdateServer implements PacketObjectIn, PacketObjectOut { private SubPlugin plugin; private SubServer server; private UpdateType type; @@ -78,24 +77,24 @@ public class PacketExUpdateServer implements PacketIn, PacketOut { } @Override - public YAMLSection generate() { - YAMLSection data = new YAMLSection(); - data.set("server", server.getName()); - data.set("type", type.getValue()); - data.set("args", Arrays.asList(args)); + public ObjectMap send(SubDataClient client) { + ObjectMap data = new ObjectMap(); + data.set(0x0000, server.getName()); + data.set(0x0001, type.getValue()); + data.set(0x0002, Arrays.asList(args)); return data; } @Override - public void execute(Client client, YAMLSection data) { + public void receive(SubDataClient client, ObjectMap data) { try { - ExternalSubServer server = (ExternalSubServer) plugin.api.getSubServer(data.getRawString("server")); - switch (data.getInt("type")) { + ExternalSubServer server = (ExternalSubServer) plugin.api.getSubServer(data.getRawString(0x0000)); + switch (data.getInt(0x0001)) { case 1: Util.reflect(ExternalSubServer.class.getDeclaredMethod("falsestart"), server); break; case 2: - Util.reflect(ExternalSubServer.class.getDeclaredMethod("stopped", Boolean.class), server, data.getList("args").get(1).asBoolean()); + Util.reflect(ExternalSubServer.class.getDeclaredMethod("stopped", Boolean.class), server, data.getList(0x0002).get(1).asBoolean()); break; } } catch (Exception e) { @@ -104,7 +103,7 @@ public class PacketExUpdateServer implements PacketIn, PacketOut { } @Override - public Version getVersion() { - return new Version("2.11.0a"); + public int version() { + return 0x0001; } } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketInExLogMessage.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketInExLogMessage.java index 5f064348..da91ec66 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketInExLogMessage.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketInExLogMessage.java @@ -1,20 +1,19 @@ package net.ME1312.SubServers.Bungee.Network.Packet; +import net.ME1312.SubData.Server.SubDataClient; import net.ME1312.SubServers.Bungee.Host.External.ExternalSubLogger; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.Client; -import net.ME1312.SubServers.Bungee.Network.PacketIn; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.Galaxi.Library.Version.Version; +import net.ME1312.SubData.Server.Protocol.PacketObjectIn; -import java.lang.reflect.Method; import java.util.HashMap; import java.util.UUID; /** * Message Log External Host Packet */ -public class PacketInExLogMessage implements PacketIn { +public class PacketInExLogMessage implements PacketObjectIn { private static HashMap loggers = new HashMap(); /** @@ -23,10 +22,10 @@ public class PacketInExLogMessage implements PacketIn { public PacketInExLogMessage() {} @Override - public void execute(Client client, YAMLSection data) { + public void receive(SubDataClient client, ObjectMap data) { try { - if (data.contains("h") && data.contains("m") && data.getRawString("m").length() != 0 && loggers.keySet().contains(data.getUUID("h"))) { - Util.reflect(ExternalSubLogger.class.getDeclaredMethod("log", String.class), loggers.get(data.getUUID("h")), data.getRawString("m")); + if (data.contains(0x0000) && data.contains(0x0001) && loggers.keySet().contains(data.getUUID(0x0000))) { + Util.reflect(ExternalSubLogger.class.getDeclaredMethod("log", String.class), loggers.get(data.getUUID(0x0000)), data.getRawString(0x0001)); } } catch (Exception e) { e.printStackTrace(); @@ -34,8 +33,8 @@ public class PacketInExLogMessage implements PacketIn { } @Override - public Version getVersion() { - return new Version("2.11.0a"); + public int version() { + return 0x0001; } /** diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketInExRequestQueue.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketInExRequestQueue.java index 3f658360..79e83d46 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketInExRequestQueue.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketInExRequestQueue.java @@ -1,15 +1,12 @@ package net.ME1312.SubServers.Bungee.Network.Packet; +import net.ME1312.SubData.Server.SubDataClient; import net.ME1312.SubServers.Bungee.Host.External.ExternalHost; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.Client; -import net.ME1312.SubServers.Bungee.Network.PacketIn; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Server.Protocol.PacketIn; import net.ME1312.SubServers.Bungee.SubPlugin; import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; /** * External Host Queue Request Packet @@ -25,8 +22,8 @@ public class PacketInExRequestQueue implements PacketIn { } @Override - public void execute(Client client, YAMLSection data) { - if (client.getHandler() != null && client.getHandler() instanceof ExternalHost && plugin.config.get().getSection("Hosts").getKeys().contains(((ExternalHost) client.getHandler()).getName())) { + public void receive(SubDataClient client) { + if (client.getHandler() != null && client.getHandler() instanceof ExternalHost && plugin.config.get().getMap("Hosts").getKeys().contains(((ExternalHost) client.getHandler()).getName())) { try { Util.reflect(ExternalHost.class.getDeclaredMethod("requeue"), client.getHandler()); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { @@ -36,7 +33,7 @@ public class PacketInExRequestQueue implements PacketIn { } @Override - public Version getVersion() { - return new Version("2.11.0a"); + public int version() { + return 0x0001; } } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketInReload.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketInReload.java new file mode 100644 index 00000000..be9f545a --- /dev/null +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketInReload.java @@ -0,0 +1,39 @@ +package net.ME1312.SubServers.Bungee.Network.Packet; + +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.SubData.Server.Protocol.PacketObjectIn; +import net.ME1312.SubData.Server.SubDataClient; +import net.ME1312.SubServers.Bungee.SubPlugin; + +/** + * Reload Packet + */ +public class PacketInReload implements PacketObjectIn { + private SubPlugin plugin; + + /** + * New PacketInReload + * + * @param plugin Plugin + */ + public PacketInReload(SubPlugin plugin) { + this.plugin = plugin; + } + + @SuppressWarnings("deprecation") + @Override + public void receive(SubDataClient client, ObjectMap data) throws Throwable { + if (data != null && data.contains(0x0000)) plugin.getLogger().warning("SubData > Received request for a proxy reload: " + data.getString(0x0000)); + else plugin.getLogger().warning("SubData > Received request for a proxy reload"); + try { + plugin.reload(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public int version() { + return 0x0001; + } +} diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketLinkExHost.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketLinkExHost.java index 5d3e3486..fb1edae7 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketLinkExHost.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketLinkExHost.java @@ -1,13 +1,12 @@ package net.ME1312.SubServers.Bungee.Network.Packet; +import net.ME1312.SubData.Server.SubDataClient; import net.ME1312.SubServers.Bungee.Host.Host; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.Client; -import net.ME1312.SubServers.Bungee.Network.ClientHandler; -import net.ME1312.SubServers.Bungee.Network.PacketIn; -import net.ME1312.SubServers.Bungee.Network.PacketOut; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Server.ClientHandler; +import net.ME1312.SubData.Server.Protocol.PacketObjectIn; +import net.ME1312.SubData.Server.Protocol.PacketObjectOut; import net.ME1312.SubServers.Bungee.SubPlugin; import java.util.Map; @@ -15,10 +14,9 @@ import java.util.Map; /** * Link External Host Packet */ -public class PacketLinkExHost implements PacketIn, PacketOut { +public class PacketLinkExHost implements PacketObjectIn, PacketObjectOut { private SubPlugin plugin; private int response; - private String message; /** * New PacketLinkExHost (In) @@ -34,50 +32,46 @@ public class PacketLinkExHost implements PacketIn, PacketOut { * New PacketLinkExHost (Out) * * @param response Response ID - * @param message Message */ - public PacketLinkExHost(int response, String message) { - if (Util.isNull(response, message)) throw new NullPointerException(); + public PacketLinkExHost(int response) { this.response = response; - this.message = message; } @Override - public YAMLSection generate() { - YAMLSection data = new YAMLSection(); - data.set("r", response); - data.set("m", message); + public ObjectMap send(SubDataClient client) { + ObjectMap data = new ObjectMap(); + data.set(0x0001, response); return data; } @Override - public void execute(Client client, YAMLSection data) { + public void receive(SubDataClient client, ObjectMap data) { try { Map hosts = plugin.api.getHosts(); - if (hosts.keySet().contains(data.getRawString("name").toLowerCase())) { - Host host = hosts.get(data.getRawString("name").toLowerCase()); + if (hosts.keySet().contains(data.getRawString(0x0000).toLowerCase())) { + Host host = hosts.get(data.getRawString(0x0000).toLowerCase()); if (host instanceof ClientHandler) { if (((ClientHandler) host).getSubData() == null) { client.setHandler((ClientHandler) host); System.out.println("SubData > " + client.getAddress().toString() + " has been defined as Host: " + host.getName()); - client.sendPacket(new PacketLinkExHost(0, "Definition Successful")); + client.sendPacket(new PacketLinkExHost(0)); } else { - client.sendPacket(new PacketLinkExHost(3, "Host already linked")); + client.sendPacket(new PacketLinkExHost(3)); } } else { - client.sendPacket(new PacketLinkExHost(4, "That host does not support a network interface")); + client.sendPacket(new PacketLinkExHost(4)); } } else { - client.sendPacket(new PacketLinkExHost(2, "There is no host with name: " + data.getRawString("name"))); + client.sendPacket(new PacketLinkExHost(2)); } } catch (Exception e) { - client.sendPacket(new PacketLinkExHost(1, e.getClass().getCanonicalName() + ": " + e.getMessage())); + client.sendPacket(new PacketLinkExHost(1)); e.printStackTrace(); } } @Override - public Version getVersion() { - return new Version("2.11.0a"); + public int version() { + return 0x0001; } } 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 a3967600..1ae7b1ad 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 @@ -2,24 +2,22 @@ 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; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.Client; -import net.ME1312.SubServers.Bungee.Network.PacketIn; -import net.ME1312.SubServers.Bungee.Network.PacketOut; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.Galaxi.Library.Version.Version; +import net.ME1312.SubData.Server.SubDataClient; +import net.ME1312.SubData.Server.Protocol.PacketObjectOut; +import net.ME1312.SubData.Server.Protocol.PacketObjectIn; import net.ME1312.SubServers.Bungee.SubPlugin; import java.util.Map; -import java.util.UUID; /** * Link Proxy Packet */ -public class PacketLinkProxy implements PacketIn, PacketOut { +public class PacketLinkProxy implements PacketObjectIn, PacketObjectOut { private SubPlugin plugin; private int response; - private String message; private String name; /** @@ -37,48 +35,45 @@ public class PacketLinkProxy implements PacketIn, PacketOut { * * @param name The name that was generated * @param response Response ID - * @param message Message */ - public PacketLinkProxy(String name, int response, String message) { - if (Util.isNull(response, message)) throw new NullPointerException(); + public PacketLinkProxy(String name, int response) { this.name = name; this.response = response; - this.message = message; } @Override - public YAMLSection generate() { - YAMLSection json = new YAMLSection(); - json.set("n", name); - json.set("r", response); - json.set("m", message); + public ObjectMap send(SubDataClient client) { + ObjectMap json = new ObjectMap(); + json.set(0x0000, name); + json.set(0x0001, response); return json; } @Override - public void execute(Client client, YAMLSection data) { + public void receive(SubDataClient client, ObjectMap data) { try { Map proxies = plugin.api.getProxies(); + String name = ((data.contains(0x0000))?data.getRawString(0x0000):null); 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()); + if (name != null && proxies.keySet().contains(name.toLowerCase()) && proxies.get(name.toLowerCase()).getSubData() == null) { + proxy = proxies.get(name.toLowerCase()); } else { - proxy = new Proxy((data.contains("name") && !proxies.keySet().contains(data.getRawString("name").toLowerCase()))?data.getRawString("name"):null); + proxy = new Proxy((name != null && !proxies.keySet().contains(name.toLowerCase()))?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")); + client.sendPacket(new PacketLinkProxy(proxy.getName(), 0)); } catch (Exception e) { - client.sendPacket(new PacketLinkProxy(null, 1, e.getClass().getCanonicalName() + ": " + e.getMessage())); + client.sendPacket(new PacketLinkProxy(null, 1)); e.printStackTrace(); } } @Override - public Version getVersion() { - return new Version("2.11.0a"); + public int version() { + return 0x0001; } } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketLinkServer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketLinkServer.java index ef59f4ee..542951f1 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketLinkServer.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketLinkServer.java @@ -1,13 +1,12 @@ package net.ME1312.SubServers.Bungee.Network.Packet; +import net.ME1312.SubData.Server.SubDataClient; import net.ME1312.SubServers.Bungee.Host.Server; import net.ME1312.SubServers.Bungee.Host.SubServer; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.Client; -import net.ME1312.SubServers.Bungee.Network.PacketIn; -import net.ME1312.SubServers.Bungee.Network.PacketOut; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Server.Protocol.PacketObjectIn; +import net.ME1312.SubData.Server.Protocol.PacketObjectOut; import net.ME1312.SubServers.Bungee.SubPlugin; import java.net.InetSocketAddress; @@ -16,7 +15,7 @@ import java.util.Map; /** * Link Server Packet */ -public class PacketLinkServer implements PacketIn, PacketOut { +public class PacketLinkServer implements PacketObjectIn, PacketObjectOut { private SubPlugin plugin; private int response; private String message; @@ -46,61 +45,64 @@ public class PacketLinkServer implements PacketIn, PacketOut { * @param message Message */ public PacketLinkServer(String name, int response, String message) { - if (Util.isNull(response, message)) throw new NullPointerException(); + if (Util.isNull(response)) throw new NullPointerException(); this.name = name; this.response = response; this.message = message; } @Override - public YAMLSection generate() { - YAMLSection data = new YAMLSection(); - data.set("n", name); - data.set("r", response); - data.set("m", message); + public ObjectMap send(SubDataClient client) { + ObjectMap data = new ObjectMap(); + data.set(0x0000, name); + data.set(0x0001, response); + if (message != null) data.set(0x0002, message); return data; } @Override - public void execute(Client client, YAMLSection data) { + public void receive(SubDataClient client, ObjectMap data) { + String name = (data.contains(0x0000))?data.getRawString(0x0000):null; + Integer port = (data.contains(0x0001))?data.getInt(0x0001):null; + try { Map servers = plugin.api.getServers(); Server server; - if (data.contains("name") && servers.keySet().contains(data.getRawString("name").toLowerCase())) { - link(client, servers.get(data.getRawString("name").toLowerCase())); - } else if (data.contains("port")) { - if ((server = search(new InetSocketAddress(client.getAddress().getAddress(), data.getInt("port")))) != null) { + if (name != null && servers.keySet().contains(name.toLowerCase())) { + link(client, servers.get(name.toLowerCase())); + } else if (port != null) { + if ((server = search(new InetSocketAddress(client.getAddress().getAddress(), port))) != null) { link(client, server); } else { - throw new ServerLinkException("There is no server with address: " + client.getAddress().getAddress().getHostAddress() + ':' + data.getInt("port")); + throw new ServerLinkException("There is no server with address: " + client.getAddress().getAddress().getHostAddress() + ':' + port); } } else { throw new ServerLinkException("Not enough arguments"); } } catch (ServerLinkException e) { - if (data.contains("name")) { - client.sendPacket(new PacketLinkServer(null, 2, "There is no server with name: " + data.getRawString("name"))); + if (name != null) { + client.sendPacket(new PacketLinkServer(null, 3, "There is no server with name: " + name)); } else { client.sendPacket(new PacketLinkServer(null, 2, e.getMessage())); } } catch (Exception e) { - client.sendPacket(new PacketLinkServer(null, 1, e.getClass().getCanonicalName() + ": " + e.getMessage())); + client.sendPacket(new PacketLinkServer(null, 1, null)); e.printStackTrace(); } } - private void link(Client client, Server server) { + private void link(SubDataClient client, Server server) { if (server.getSubData() == null) { client.setHandler(server); System.out.println("SubData > " + client.getAddress().toString() + " has been defined as " + ((server instanceof SubServer) ? "SubServer" : "Server") + ": " + server.getName()); if (server instanceof SubServer && !((SubServer) server).isRunning()) { System.out.println("SubServers > Sending shutdown signal to rogue SubServer: " + server.getName()); - client.sendPacket(new PacketOutReset("Rogue SubServer Detected")); + client.sendPacket(new PacketOutExReset("Rogue SubServer Detected")); } else { - client.sendPacket(new PacketLinkServer(server.getName(), 0, "Definition Successful")); + client.sendPacket(new PacketLinkServer(server.getName(), 0, null)); } } else { - client.sendPacket(new PacketLinkServer(null, 3, "Server already linked")); + client.sendPacket(new PacketLinkServer(null, 4, "Server already linked")); } } @@ -116,7 +118,7 @@ public class PacketLinkServer implements PacketIn, PacketOut { } @Override - public Version getVersion() { - return new Version("2.11.0a"); + public int version() { + return 0x0001; } } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutExReload.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutExReload.java new file mode 100644 index 00000000..60d44279 --- /dev/null +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutExReload.java @@ -0,0 +1,38 @@ +package net.ME1312.SubServers.Bungee.Network.Packet; + +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Version.Version; +import net.ME1312.SubData.Server.Protocol.PacketObjectOut; +import net.ME1312.SubData.Server.SubDataClient; + +/** + * Reload Packet + */ +public class PacketOutExReload implements PacketObjectOut { + private String message; + + /** + * New PacketOutExReload + * + * @param message Message + */ + public PacketOutExReload(String message) { + this.message = message; + } + + @Override + public ObjectMap send(SubDataClient client) { + if (message == null) { + return null; + } else { + ObjectMap data = new ObjectMap(); + data.set(0x0000, message); + return data; + } + } + + @Override + public int version() { + return 0x0001; + } +} diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutExReset.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutExReset.java new file mode 100644 index 00000000..195930de --- /dev/null +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutExReset.java @@ -0,0 +1,38 @@ +package net.ME1312.SubServers.Bungee.Network.Packet; + +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Version.Version; +import net.ME1312.SubData.Server.Protocol.PacketObjectOut; +import net.ME1312.SubData.Server.SubDataClient; + +/** + * Reset Packet + */ +public class PacketOutExReset implements PacketObjectOut { + private String message; + + /** + * New PacketOutExReset + * + * @param message Message + */ + public PacketOutExReset(String message) { + this.message = message; + } + + @Override + public ObjectMap send(SubDataClient client) { + if (message == null) { + return null; + } else { + ObjectMap json = new ObjectMap(); + json.set(0x0000, message); + return json; + } + } + + @Override + public int version() { + return 0x0001; + } +} diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutRunEvent.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutExRunEvent.java similarity index 60% rename from SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutRunEvent.java rename to SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutExRunEvent.java index 89dd05d9..2312137d 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutRunEvent.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutExRunEvent.java @@ -1,175 +1,186 @@ package net.ME1312.SubServers.Bungee.Network.Packet; +import net.ME1312.SubData.Server.SubDataClient; import net.ME1312.SubServers.Bungee.Event.*; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; +import net.ME1312.Galaxi.Library.Map.ObjectMap; import net.ME1312.SubServers.Bungee.Library.SubEvent; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.PacketOut; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Server.Protocol.PacketObjectOut; import net.ME1312.SubServers.Bungee.SubPlugin; import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.event.EventHandler; +import java.util.LinkedList; +import java.util.List; + /** * Event Send Packet */ -public class PacketOutRunEvent implements Listener, PacketOut { +public class PacketOutExRunEvent implements Listener, PacketObjectOut { private SubPlugin plugin; - private YAMLSection args; + private ObjectMap args; private String type; /** - * New PacketOutRunEvent (Registerer) + * New PacketOutExRunEvent (Registerer) * * @param plugin */ - public PacketOutRunEvent(SubPlugin plugin) { + public PacketOutExRunEvent(SubPlugin plugin) { if (Util.isNull(plugin)) throw new NullPointerException(); this.plugin = plugin; } /** - * New PacketOutRunEvent (Out) + * New PacketOutExRunEvent (Out) * * @param event Event to be run * @param args Arguments */ - public PacketOutRunEvent(Class event, YAMLSection args) { + public PacketOutExRunEvent(Class event, ObjectMap args) { if (Util.isNull(event, args)) throw new NullPointerException(); this.type = event.getSimpleName(); this.args = args; } @Override - public YAMLSection generate() { - YAMLSection json = new YAMLSection(); - json.set("type", type); - json.set("args", args); + public ObjectMap send(SubDataClient client) { + ObjectMap json = new ObjectMap(); + json.set(0x0000, type); + json.set(0x0001, args); return json; } @Override - public Version getVersion() { - return new Version("2.11.0a"); + public int version() { + return 0x0001; + } + + private void broadcast(PacketOutExRunEvent packet) { + List clients = new LinkedList(); + clients.addAll(plugin.subdata.getClients().values()); + for (SubDataClient client : clients) { + client.sendPacket(packet); + } } @EventHandler(priority = Byte.MAX_VALUE) public void event(SubAddProxyEvent event) { - YAMLSection args = new YAMLSection(); + ObjectMap args = new ObjectMap(); args.set("proxy", event.getProxy().getName()); - plugin.subdata.broadcastPacket(new PacketOutRunEvent(event.getClass(), args)); + broadcast(new PacketOutExRunEvent(event.getClass(), args)); } @EventHandler(priority = Byte.MAX_VALUE) public void event(SubAddHostEvent event) { if (!event.isCancelled()) { - YAMLSection args = new YAMLSection(); - if (event.getPlayer() != null) args.set("player",event.getPlayer().toString()); + ObjectMap args = new ObjectMap(); + if (event.getPlayer() != null) args.set("player", event.getPlayer().toString()); args.set("host", event.getHost().getName()); - plugin.subdata.broadcastPacket(new PacketOutRunEvent(event.getClass(), args)); + broadcast(new PacketOutExRunEvent(event.getClass(), args)); } } @EventHandler(priority = Byte.MAX_VALUE) public void event(SubAddServerEvent event) { if (!event.isCancelled()) { - YAMLSection args = new YAMLSection(); + ObjectMap args = new ObjectMap(); 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()); - plugin.subdata.broadcastPacket(new PacketOutRunEvent(event.getClass(), args)); + broadcast(new PacketOutExRunEvent(event.getClass(), args)); } } @EventHandler(priority = Byte.MAX_VALUE) public void event(SubCreateEvent event) { if (!event.isCancelled()) { - YAMLSection args = new YAMLSection(); + ObjectMap args = new ObjectMap(); if (event.getPlayer() != null) args.set("player", event.getPlayer().toString()); args.set("host", event.getHost().getName()); args.set("name", event.getName()); args.set("template", event.getTemplate().getName()); - args.set("version", event.getVersion()); + if (event.getVersion() != null) args.set("version", event.getVersion()); args.set("port", event.getPort()); - plugin.subdata.broadcastPacket(new PacketOutRunEvent(event.getClass(), args)); + broadcast(new PacketOutExRunEvent(event.getClass(), args)); } } @EventHandler(priority = Byte.MAX_VALUE) public void event(SubSendCommandEvent event) { if (!event.isCancelled()) { - YAMLSection args = new YAMLSection(); + ObjectMap args = new ObjectMap(); if (event.getPlayer() != null) args.set("player", event.getPlayer().toString()); args.set("server", event.getServer().getName()); args.set("command", event.getCommand()); - plugin.subdata.broadcastPacket(new PacketOutRunEvent(event.getClass(), args)); + broadcast(new PacketOutExRunEvent(event.getClass(), args)); } } @EventHandler(priority = Byte.MAX_VALUE) public void event(SubEditServerEvent event) { if (!event.isCancelled()) { - YAMLSection args = new YAMLSection(); + ObjectMap args = new ObjectMap(); if (event.getPlayer() != null) args.set("player", event.getPlayer().toString()); args.set("server", event.getServer().getName()); args.set("edit", event.getEdit().name()); args.set("value", event.getEdit().get().asObject()); args.set("perm", event.isPermanent()); - plugin.subdata.broadcastPacket(new PacketOutRunEvent(event.getClass(), args)); + broadcast(new PacketOutExRunEvent(event.getClass(), args)); } } @EventHandler(priority = Byte.MAX_VALUE) public void event(SubStartEvent event) { if (!event.isCancelled()) { - YAMLSection args = new YAMLSection(); + ObjectMap args = new ObjectMap(); if (event.getPlayer() != null) args.set("player", event.getPlayer().toString()); args.set("server", event.getServer().getName()); - plugin.subdata.broadcastPacket(new PacketOutRunEvent(event.getClass(), args)); + broadcast(new PacketOutExRunEvent(event.getClass(), args)); } } @EventHandler(priority = Byte.MAX_VALUE) public void event(SubStopEvent event) { if (!event.isCancelled()) { - YAMLSection args = new YAMLSection(); + ObjectMap args = new ObjectMap(); if (event.getPlayer() != null) args.set("player", event.getPlayer().toString()); args.set("server", event.getServer().getName()); args.set("force", event.isForced()); - plugin.subdata.broadcastPacket(new PacketOutRunEvent(event.getClass(), args)); + broadcast(new PacketOutExRunEvent(event.getClass(), args)); } } @EventHandler(priority = Byte.MAX_VALUE) public void event(SubStoppedEvent event) { - YAMLSection args = new YAMLSection(); + ObjectMap args = new ObjectMap(); args.set("server", event.getServer().getName()); - plugin.subdata.broadcastPacket(new PacketOutRunEvent(event.getClass(), args)); + broadcast(new PacketOutExRunEvent(event.getClass(), args)); } @EventHandler(priority = Byte.MAX_VALUE) public void event(SubRemoveServerEvent event) { if (!event.isCancelled()) { - YAMLSection args = new YAMLSection(); + ObjectMap args = new ObjectMap(); 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()); - plugin.subdata.broadcastPacket(new PacketOutRunEvent(event.getClass(), args)); + broadcast(new PacketOutExRunEvent(event.getClass(), args)); } } @EventHandler(priority = Byte.MAX_VALUE) public void event(SubRemoveHostEvent event) { if (!event.isCancelled()) { - YAMLSection args = new YAMLSection(); + ObjectMap args = new ObjectMap(); if (event.getPlayer() != null) args.set("player", event.getPlayer().toString()); args.set("host", event.getHost().getName()); - plugin.subdata.broadcastPacket(new PacketOutRunEvent(event.getClass(), args)); + broadcast(new PacketOutExRunEvent(event.getClass(), args)); } } @EventHandler(priority = Byte.MAX_VALUE) public void event(SubRemoveProxyEvent event) { - YAMLSection args = new YAMLSection(); + ObjectMap args = new ObjectMap(); args.set("proxy", event.getProxy().getName()); - plugin.subdata.broadcastPacket(new PacketOutRunEvent(event.getClass(), args)); + broadcast(new PacketOutExRunEvent(event.getClass(), args)); } } \ No newline at end of file diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutExUpdateWhitelist.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutExUpdateWhitelist.java index 5f709079..e1a10a7f 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutExUpdateWhitelist.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutExUpdateWhitelist.java @@ -1,16 +1,17 @@ package net.ME1312.SubServers.Bungee.Network.Packet; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.PacketOut; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.Galaxi.Library.Version.Version; +import net.ME1312.SubData.Server.Protocol.PacketObjectOut; +import net.ME1312.SubData.Server.SubDataClient; import java.util.UUID; /** * Update External Whitelist Packet */ -public class PacketOutExUpdateWhitelist implements PacketOut { +public class PacketOutExUpdateWhitelist implements PacketObjectOut { private String name; private boolean mode; private UUID value; @@ -30,15 +31,16 @@ public class PacketOutExUpdateWhitelist implements PacketOut { } @Override - public YAMLSection generate() { - YAMLSection data = new YAMLSection(); - data.set("server", name); - data.set("mode", mode); - data.set("value", value); + public ObjectMap send(SubDataClient client) { + ObjectMap data = new ObjectMap(); + data.set(0x0000, name); + data.set(0x0001, mode); + data.set(0x0002, value); return data; } + @Override - public Version getVersion() { - return new Version("2.13.2c"); + public int version() { + return 0x0001; } } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutReload.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutReload.java deleted file mode 100644 index 6d82ca46..00000000 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutReload.java +++ /dev/null @@ -1,37 +0,0 @@ -package net.ME1312.SubServers.Bungee.Network.Packet; - -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.PacketOut; - -/** - * Reload Packet - */ -public class PacketOutReload implements PacketOut { - private String message; - - /** - * New PacketOutReload - * - * @param message Message - */ - public PacketOutReload(String message) { - this.message = message; - } - - @Override - public YAMLSection generate() { - if (message == null) { - return null; - } else { - YAMLSection data = new YAMLSection(); - data.set("m", message); - return data; - } - } - - @Override - public Version getVersion() { - return new Version("2.11.0a"); - } -} diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutReset.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutReset.java deleted file mode 100644 index ceb01517..00000000 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketOutReset.java +++ /dev/null @@ -1,37 +0,0 @@ -package net.ME1312.SubServers.Bungee.Network.Packet; - -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.PacketOut; - -/** - * Reset Packet - */ -public class PacketOutReset implements PacketOut { - private String message; - - /** - * New PacketOutReset - * - * @param message Message - */ - public PacketOutReset(String message) { - this.message = message; - } - - @Override - public YAMLSection generate() { - if (message == null) { - return null; - } else { - YAMLSection json = new YAMLSection(); - json.set("m", message); - return json; - } - } - - @Override - public Version getVersion() { - return new Version("2.11.0a"); - } -} diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketRestartServer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketRestartServer.java index 2acd62c6..f90bdf68 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketRestartServer.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketRestartServer.java @@ -1,26 +1,24 @@ package net.ME1312.SubServers.Bungee.Network.Packet; +import net.ME1312.SubData.Server.SubDataClient; import net.ME1312.SubServers.Bungee.Host.Server; import net.ME1312.SubServers.Bungee.Host.SubServer; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.Client; -import net.ME1312.SubServers.Bungee.Network.PacketIn; -import net.ME1312.SubServers.Bungee.Network.PacketOut; -import net.ME1312.SubServers.Bungee.SubAPI; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Server.Protocol.PacketObjectIn; +import net.ME1312.SubData.Server.Protocol.PacketObjectOut; import net.ME1312.SubServers.Bungee.SubPlugin; import java.util.Map; +import java.util.UUID; /** * Restart Server Packet */ -public class PacketRestartServer implements PacketIn, PacketOut { +public class PacketRestartServer implements PacketObjectIn, PacketObjectOut { private SubPlugin plugin; private int response; - private String message; - private String id; + private UUID tracker; /** * New PacketRestartServer (In) @@ -36,72 +34,72 @@ public class PacketRestartServer implements PacketIn, PacketOut { * New PacketRestartServer (Out) * * @param response Response ID - * @param message Message - * @param id Receiver ID + * @param tracker Receiver ID */ - public PacketRestartServer(int response, String message, String id) { - if (Util.isNull(response, message)) throw new NullPointerException(); + public PacketRestartServer(int response, UUID tracker) { this.response = response; - this.message = message; - this.id = id; + this.tracker = tracker; } @Override - public YAMLSection generate() { - YAMLSection json = new YAMLSection(); - if (id != null) json.set("id", id); - json.set("r", response); - json.set("m", message); + public ObjectMap send(SubDataClient client) { + ObjectMap json = new ObjectMap(); + if (tracker != null) json.set(0x0000, tracker); + json.set(0x0001, response); return json; } @Override - public void execute(Client client, YAMLSection data) { + public void receive(SubDataClient client, ObjectMap data) { + UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null); try { + String name = data.getRawString(0x0001); + UUID player = (data.contains(0x0002)?data.getUUID(0x0002):null); + Runnable starter = () -> { Map servers = plugin.api.getServers(); - if (!servers.keySet().contains(data.getRawString("server").toLowerCase())) { - } else if (!(servers.get(data.getRawString("server").toLowerCase()) instanceof SubServer)) { - } else if (!((SubServer) servers.get(data.getRawString("server").toLowerCase())).getHost().isAvailable()) { - } else if (!((SubServer) servers.get(data.getRawString("server").toLowerCase())).getHost().isEnabled()) { - } else if (!((SubServer) servers.get(data.getRawString("server").toLowerCase())).isEnabled()) { - } else if (((SubServer) servers.get(data.getRawString("server").toLowerCase())).isRunning()) { - } else if (((SubServer) servers.get(data.getRawString("server").toLowerCase())).getCurrentIncompatibilities().size() != 0) { + if (!servers.keySet().contains(name.toLowerCase())) { + } else if (!(servers.get(name.toLowerCase()) instanceof SubServer)) { + } else if (!((SubServer) servers.get(name.toLowerCase())).getHost().isAvailable()) { + } else if (!((SubServer) servers.get(name.toLowerCase())).getHost().isEnabled()) { + } else if (!((SubServer) servers.get(name.toLowerCase())).isEnabled()) { + } else if (((SubServer) servers.get(name.toLowerCase())).isRunning()) { + } else if (((SubServer) servers.get(name.toLowerCase())).getCurrentIncompatibilities().size() != 0) { } else { - ((SubServer) servers.get(data.getRawString("server").toLowerCase())).start((data.contains("player"))?data.getUUID("player"):null); + ((SubServer) servers.get(name.toLowerCase())).start(player); } }; Map servers = plugin.api.getServers(); - if (!servers.keySet().contains(data.getRawString("server").toLowerCase())) { - client.sendPacket(new PacketRestartServer(3, "There is no server with that name", (data.contains("id"))?data.getRawString("id"):null)); - } else if (!(servers.get(data.getRawString("server").toLowerCase()) instanceof SubServer)) { - client.sendPacket(new PacketRestartServer(4, "That Server is not a SubServer", (data.contains("id"))?data.getRawString("id"):null)); + if (!servers.keySet().contains(name.toLowerCase())) { + client.sendPacket(new PacketRestartServer(3, tracker)); + } else if (!(servers.get(name.toLowerCase()) instanceof SubServer)) { + client.sendPacket(new PacketRestartServer(4, tracker)); } else { - client.sendPacket(new PacketRestartServer(0, "Restarting SubServer", (data.contains("id"))?data.getRawString("id"):null)); - if (((SubServer) servers.get(data.getRawString("server").toLowerCase())).isRunning()) { + client.sendPacket(new PacketRestartServer(0, tracker)); + if (((SubServer) servers.get(name.toLowerCase())).isRunning()) { new Thread(() -> { try { - ((SubServer) servers.get(data.getRawString("server").toLowerCase())).stop(); - ((SubServer) servers.get(data.getRawString("server").toLowerCase())).waitFor(); + ((SubServer) servers.get(name.toLowerCase())).stop(); + ((SubServer) servers.get(name.toLowerCase())).waitFor(); Thread.sleep(100); starter.run(); } catch (Exception e) { e.printStackTrace(); } - }, "SubServers.Bungee::Server_Restart_Packet_Handler(" + servers.get(data.getRawString("server").toLowerCase()).getName() + ')').start(); + }, "SubServers.Bungee::Server_Restart_Packet_Handler(" + servers.get(name.toLowerCase()).getName() + ')').start(); } else { starter.run(); } } } catch (Throwable e) { - client.sendPacket(new PacketRestartServer(2, e.getClass().getCanonicalName() + ": " + e.getMessage(), (data.contains("id"))?data.getRawString("id"):null)); + client.sendPacket(new PacketRestartServer(2, tracker)); e.printStackTrace(); } } @Override - public Version getVersion() { - return new Version("2.11.0a"); + public int version() { + return 0x0001; } } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketStartServer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketStartServer.java index 92d6cd3b..873c5230 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketStartServer.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketStartServer.java @@ -1,13 +1,12 @@ package net.ME1312.SubServers.Bungee.Network.Packet; +import net.ME1312.SubData.Server.SubDataClient; import net.ME1312.SubServers.Bungee.Host.Server; import net.ME1312.SubServers.Bungee.Host.SubServer; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.Client; -import net.ME1312.SubServers.Bungee.Network.PacketIn; -import net.ME1312.SubServers.Bungee.Network.PacketOut; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Server.Protocol.PacketObjectIn; +import net.ME1312.SubData.Server.Protocol.PacketObjectOut; import net.ME1312.SubServers.Bungee.SubPlugin; import java.util.Map; @@ -16,11 +15,11 @@ import java.util.UUID; /** * Start Server Packet */ -public class PacketStartServer implements PacketIn, PacketOut { +public class PacketStartServer implements PacketObjectIn, PacketObjectOut { private SubPlugin plugin; private int response; - private String message; - private String id; + private String extra; + private UUID tracker; /** * New PacketStartServer (In) @@ -36,63 +35,75 @@ public class PacketStartServer implements PacketIn, PacketOut { * New PacketStartServer (Out) * * @param response Response ID - * @param message Message - * @param id Receiver ID + * @param tracker Receiver ID */ - public PacketStartServer(int response, String message, String id) { - if (Util.isNull(response, message)) throw new NullPointerException(); + public PacketStartServer(int response, UUID tracker) { + this(response, null, tracker); + } + + /** + * New PacketStartServer (Out) + * + * @param response Response ID + * @param tracker Receiver ID + */ + public PacketStartServer(int response, String extra, UUID tracker) { this.response = response; - this.message = message; - this.id = id; + this.extra = extra; + this.tracker = tracker; } @Override - public YAMLSection generate() { - YAMLSection json = new YAMLSection(); - if (id != null) json.set("id", id); - json.set("r", response); - json.set("m", message); + public ObjectMap send(SubDataClient client) { + ObjectMap json = new ObjectMap(); + if (tracker != null) json.set(0x0000, tracker); + json.set(0x0001, response); + if (extra != null) json.set(0x0002, extra); return json; } @Override - public void execute(Client client, YAMLSection data) { + public void receive(SubDataClient client, ObjectMap data) { + UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null); try { + String name = data.getRawString(0x0001); + UUID player = (data.contains(0x0002)?data.getUUID(0x0002):null); + Map servers = plugin.api.getServers(); - if (!servers.keySet().contains(data.getRawString("server").toLowerCase())) { - client.sendPacket(new PacketStartServer(3, "There is no server with that name", (data.contains("id"))?data.getRawString("id"):null)); - } else if (!(servers.get(data.getRawString("server").toLowerCase()) instanceof SubServer)) { - client.sendPacket(new PacketStartServer(4, "That Server is not a SubServer", (data.contains("id"))?data.getRawString("id"):null)); - } else if (!((SubServer) servers.get(data.getRawString("server").toLowerCase())).getHost().isAvailable()) { - client.sendPacket(new PacketStartServer(5, "That SubServer's Host is not available", (data.contains("id"))?data.getRawString("id"):null)); - } else if (!((SubServer) servers.get(data.getRawString("server").toLowerCase())).getHost().isEnabled()) { - client.sendPacket(new PacketStartServer(6, "That SubServer's Host is not enabled", (data.contains("id"))?data.getRawString("id"):null)); - } else if (!((SubServer) servers.get(data.getRawString("server").toLowerCase())).isEnabled()) { - client.sendPacket(new PacketStartServer(7, "That SubServer is not enabled", (data.contains("id"))?data.getRawString("id"):null)); - } else if (((SubServer) servers.get(data.getRawString("server").toLowerCase())).isRunning()) { - client.sendPacket(new PacketStartServer(8, "That SubServer is already running", (data.contains("id")) ? data.getRawString("id") : null)); - } else if (((SubServer) servers.get(data.getRawString("server").toLowerCase())).getCurrentIncompatibilities().size() != 0) { + if (!servers.keySet().contains(name.toLowerCase())) { + client.sendPacket(new PacketStartServer(3, tracker)); + } else if (!(servers.get(name.toLowerCase()) instanceof SubServer)) { + client.sendPacket(new PacketStartServer(4, tracker)); + } else if (!((SubServer) servers.get(name.toLowerCase())).getHost().isAvailable()) { + client.sendPacket(new PacketStartServer(5, tracker)); + } else if (!((SubServer) servers.get(name.toLowerCase())).getHost().isEnabled()) { + client.sendPacket(new PacketStartServer(6, tracker)); + } else if (!((SubServer) servers.get(name.toLowerCase())).isEnabled()) { + client.sendPacket(new PacketStartServer(7, tracker)); + } else if (((SubServer) servers.get(name.toLowerCase())).isRunning()) { + client.sendPacket(new PacketStartServer(8, tracker)); + } else if (((SubServer) servers.get(name.toLowerCase())).getCurrentIncompatibilities().size() != 0) { String list = ""; - for (SubServer server : ((SubServer) servers.get(data.getRawString("server").toLowerCase())).getCurrentIncompatibilities()) { + for (SubServer server : ((SubServer) servers.get(name.toLowerCase())).getCurrentIncompatibilities()) { if (list.length() != 0) list += ", "; list += server.getName(); } - client.sendPacket(new PacketStartServer(9, "Cannot start SubServer while these servers are running: " + list, (data.contains("id")) ? data.getRawString("id") : null)); + client.sendPacket(new PacketStartServer(9, list, tracker)); } else { - if (((SubServer) servers.get(data.getRawString("server").toLowerCase())).start((data.contains("player"))?data.getUUID("player"):null)) { - client.sendPacket(new PacketStartServer(0, "Starting SubServer", (data.contains("id"))?data.getRawString("id"):null)); + if (((SubServer) servers.get(name.toLowerCase())).start(player)) { + client.sendPacket(new PacketStartServer(0, tracker)); } else { - client.sendPacket(new PacketStartServer(1, "Couldn't start SubServer", (data.contains("id"))?data.getRawString("id"):null)); + client.sendPacket(new PacketStartServer(1, tracker)); } } } catch (Throwable e) { - client.sendPacket(new PacketStartServer(2, e.getClass().getCanonicalName() + ": " + e.getMessage(), (data.contains("id"))?data.getRawString("id"):null)); + client.sendPacket(new PacketStartServer(2, tracker)); e.printStackTrace(); } } @Override - public Version getVersion() { - return new Version("2.13b"); + public int version() { + return 0x0001; } } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketStopServer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketStopServer.java index 08a8b35e..275a4eeb 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketStopServer.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketStopServer.java @@ -2,12 +2,11 @@ package net.ME1312.SubServers.Bungee.Network.Packet; import net.ME1312.SubServers.Bungee.Host.Server; import net.ME1312.SubServers.Bungee.Host.SubServer; -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.Client; -import net.ME1312.SubServers.Bungee.Network.PacketIn; -import net.ME1312.SubServers.Bungee.Network.PacketOut; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Server.SubDataClient; +import net.ME1312.SubData.Server.Protocol.PacketObjectIn; +import net.ME1312.SubData.Server.Protocol.PacketObjectOut; import net.ME1312.SubServers.Bungee.SubPlugin; import java.util.Map; @@ -16,11 +15,10 @@ import java.util.UUID; /** * Stop Server Packet */ -public class PacketStopServer implements PacketIn, PacketOut { +public class PacketStopServer implements PacketObjectIn, PacketObjectOut { private SubPlugin plugin; private int response; - private String message; - private String id; + private UUID tracker; /** * New PacketStopServer (In) @@ -36,87 +34,88 @@ public class PacketStopServer implements PacketIn, PacketOut { * New PacketStopServer (Out) * * @param response Response ID - * @param message Message - * @param id Receiver ID + * @param tracker Receiver ID */ - public PacketStopServer(int response, String message, String id) { - if (Util.isNull(response, message)) throw new NullPointerException(); + public PacketStopServer(int response, UUID tracker) { this.response = response; - this.message = message; - this.id = id; + this.tracker = tracker; } @Override - public YAMLSection generate() { - YAMLSection json = new YAMLSection(); - if (id != null) json.set("id", id); - json.set("r", response); - json.set("m", message); + public ObjectMap send(SubDataClient client) { + ObjectMap json = new ObjectMap(); + if (tracker != null) json.set(0x0000, tracker); + json.set(0x0001, response); return json; } @Override - public void execute(Client client, YAMLSection data) { + public void receive(SubDataClient client, ObjectMap data) { + UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null); try { + String name = data.getRawString(0x0001); + boolean force = (data.contains(0x0002)?data.getBoolean(0x0002):false); + UUID player = (data.contains(0x0003)?data.getUUID(0x0003):null); + Map servers = plugin.api.getServers(); - if (!data.getRawString("server").equals("*") && !servers.keySet().contains(data.getRawString("server").toLowerCase())) { - client.sendPacket(new PacketStopServer(3, "There is no server with that name", (data.contains("id"))?data.getRawString("id"):null)); - } else if (!data.getRawString("server").equals("*") && !(servers.get(data.getRawString("server").toLowerCase()) instanceof SubServer)) { - client.sendPacket(new PacketStopServer(4, "That Server is not a SubServer", (data.contains("id"))?data.getRawString("id"):null)); - } else if (!data.getRawString("server").equals("*") && !((SubServer) servers.get(data.getRawString("server").toLowerCase())).isRunning()) { - client.sendPacket(new PacketStopServer(5, "That SubServer is not running", (data.contains("id"))?data.getRawString("id"):null)); - } else if (data.getRawString("server").equals("*")) { + if (!name.equals("*") && !servers.keySet().contains(name.toLowerCase())) { + client.sendPacket(new PacketStopServer(3, tracker)); + } else if (!name.equals("*") && !(servers.get(name.toLowerCase()) instanceof SubServer)) { + client.sendPacket(new PacketStopServer(4, tracker)); + } else if (!name.equals("*") && !((SubServer) servers.get(name.toLowerCase())).isRunning()) { + client.sendPacket(new PacketStopServer(5, tracker)); + } else if (name.equals("*")) { boolean sent = false; - if (data.contains("force") && data.getBoolean("force")) { + if (force) { for (Server server : servers.values()) { if (server instanceof SubServer && ((SubServer) server).isRunning()) { - if (((SubServer) server).terminate((data.contains("player"))?data.getUUID("player"):null)) { + if (((SubServer) server).terminate(player)) { sent = true; } } } if (sent) { - client.sendPacket(new PacketStopServer(0, "Terminating SubServers", (data.contains("id"))?data.getRawString("id"):null)); + client.sendPacket(new PacketStopServer(0, tracker)); } else { - client.sendPacket(new PacketStopServer(1, "Couldn't terminate SubServers", (data.contains("id"))?data.getRawString("id"):null)); + client.sendPacket(new PacketStopServer(1, tracker)); } } else { for (Server server : servers.values()) { if (server instanceof SubServer && ((SubServer) server).isRunning()) { - if (((SubServer) server).stop((data.contains("player"))?data.getUUID("player"):null)) { + if (((SubServer) server).stop(player)) { sent = true; } } } if (sent) { - client.sendPacket(new PacketStopServer(0, "Stopping SubServers", (data.contains("id"))?data.getRawString("id"):null)); + client.sendPacket(new PacketStopServer(0, tracker)); } else { - client.sendPacket(new PacketStopServer(1, "Couldn't stop SubServers", (data.contains("id"))?data.getRawString("id"):null)); + client.sendPacket(new PacketStopServer(1, tracker)); } } } else { - if (data.contains("force") && data.getBoolean("force")) { - if (((SubServer) servers.get(data.getRawString("server").toLowerCase())).terminate((data.contains("player"))?data.getUUID("player"):null)) { - client.sendPacket(new PacketStopServer(0, "Terminating SubServer", (data.contains("id"))?data.getRawString("id"):null)); + if (force) { + if (((SubServer) servers.get(name.toLowerCase())).terminate(player)) { + client.sendPacket(new PacketStopServer(0, tracker)); } else { - client.sendPacket(new PacketStopServer(1, "Couldn't terminate SubServer", (data.contains("id"))?data.getRawString("id"):null)); + client.sendPacket(new PacketStopServer(1, tracker)); } } else { - if (((SubServer) servers.get(data.getRawString("server").toLowerCase())).stop((data.contains("player"))?data.getUUID("player"):null)) { - client.sendPacket(new PacketStopServer(0, "Stopping SubServer", (data.contains("id"))?data.getRawString("id"):null)); + if (((SubServer) servers.get(name.toLowerCase())).stop(player)) { + client.sendPacket(new PacketStopServer(0, tracker)); } else { - client.sendPacket(new PacketStopServer(1, "Couldn't stop SubServer", (data.contains("id"))?data.getRawString("id"):null)); + client.sendPacket(new PacketStopServer(1, tracker)); } } } } catch (Throwable e) { - client.sendPacket(new PacketStopServer(2, e.getClass().getCanonicalName() + ": " + e.getMessage(), (data.contains("id"))?data.getRawString("id"):null)); + client.sendPacket(new PacketStopServer(2, tracker)); e.printStackTrace(); } } @Override - public Version getVersion() { - return new Version("2.11.0a"); + public int version() { + return 0x0001; } } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/PacketIn.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/PacketIn.java deleted file mode 100644 index 0bdc566b..00000000 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/PacketIn.java +++ /dev/null @@ -1,34 +0,0 @@ -package net.ME1312.SubServers.Bungee.Network; - -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Version.Version; - -/** - * PacketIn Layout Class - */ -public interface PacketIn { - /** - * Execute Incoming Packet - * - * @param client Client Accepting - * @param data Incoming Data - */ - void execute(Client client, YAMLSection data) throws Throwable; - - /** - * Get Packet Version - * - * @return Packet Version - */ - Version getVersion(); - - /** - * Check Compatibility with oncoming packet - * - * @param version Version of oncoming packet - * @return Compatibility Status - */ - default boolean isCompatible(Version version) { - return getVersion().equals(version); - } -} diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/PacketOut.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/PacketOut.java deleted file mode 100644 index e6b56f25..00000000 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/PacketOut.java +++ /dev/null @@ -1,23 +0,0 @@ -package net.ME1312.SubServers.Bungee.Network; - -import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection; -import net.ME1312.SubServers.Bungee.Library.Version.Version; - -/** - * PacketOut Layout Class - */ -public interface PacketOut { - /** - * Generate Packet Contents - * - * @return Packet Contents - */ - YAMLSection generate() throws Throwable; - - /** - * Get Packet Version - * - * @return Packet Version - */ - Version getVersion(); -} diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/SubDataServer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/SubDataServer.java deleted file mode 100644 index f3a7986a..00000000 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/SubDataServer.java +++ /dev/null @@ -1,486 +0,0 @@ -package net.ME1312.SubServers.Bungee.Network; - -import com.dosse.upnp.UPnP; -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; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.Encryption.AES; -import net.ME1312.SubServers.Bungee.Network.Packet.*; -import net.ME1312.SubServers.Bungee.SubPlugin; -import org.msgpack.value.Value; - -import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.net.*; -import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * SubDataServer Class - */ -public final class SubDataServer { - private static int MAX_QUEUE = 64; - private static HashMap, NamedContainer> pOut = new HashMap, NamedContainer>(); - private static HashMap>> pIn = new HashMap>>(); - private static HashMap ciphers = new HashMap(); - private static List allowedAddresses = new ArrayList(); - private static boolean defaults = false; - private HashMap clients = new HashMap(); - private ServerSocket server; - private Cipher cipher; - protected SubPlugin plugin; - - /** - * SubData Server Instance - * - * @param plugin SubPlugin - * @param port Port - * @param address Bind - * @param cipher Cipher (or null for none) - * @throws IOException - */ - public SubDataServer(SubPlugin plugin, int port, InetAddress address, Cipher cipher) throws IOException { - if (Util.isNull(plugin, port, MAX_QUEUE)) throw new NullPointerException(); - if (address == null) { - server = new ServerSocket(port, MAX_QUEUE); - allowConnection("127.0.0.1"); - } else { - server = new ServerSocket(port, MAX_QUEUE, address); - allowConnection(address.getHostAddress()); - } - if (UPnP.isUPnPAvailable() && plugin.config.get().getSection("Settings").getSection("UPnP", new YAMLSection()).getBoolean("Forward-SubData", false)) UPnP.openPortTCP(port); - this.plugin = plugin; - this.cipher = (cipher != null)?cipher:new Cipher() { - @Override - public String getName() { - return "NONE"; - } - @Override - public Value encrypt(String key, YAMLSection data) { - return data.msgPack(); - } - @Override - @SuppressWarnings("unchecked") - public YAMLSection decrypt(String key, Value data) { - return new YAMLSection(data.asMapValue()); - } - }; - - if (!defaults) loadDefaults(); - } - - static { - addCipher("AES", new AES(128)); - addCipher("AES_128", new AES(128)); - addCipher("AES_192", new AES(192)); - addCipher("AES_256", new AES(256)); - } private void loadDefaults() { - defaults = true; - - plugin.getPluginManager().registerListener(null, new PacketOutRunEvent(plugin)); - - registerPacket(new PacketAuthorization(plugin), "SubData", "Authorization"); - registerPacket(new PacketCommandServer(plugin), "SubServers", "CommandServer"); - registerPacket(new PacketCreateServer(plugin), "SubServers", "CreateServer"); - registerPacket(new PacketDownloadGroupInfo(plugin), "SubServers", "DownloadGroupInfo"); - registerPacket(new PacketDownloadHostInfo(plugin), "SubServers", "DownloadHostInfo"); - registerPacket(new PacketDownloadLang(plugin), "SubServers", "DownloadLang"); - registerPacket(new PacketDownloadNetworkList(plugin), "SubServers", "DownloadNetworkList"); - registerPacket(new PacketDownloadPlatformInfo(plugin), "SubServers", "DownloadPlatformInfo"); - registerPacket(new PacketDownloadPlayerList(plugin), "SubServers", "DownloadPlayerList"); - registerPacket(new PacketDownloadProxyInfo(plugin), "SubServers", "DownloadProxyInfo"); - registerPacket(new PacketDownloadServerInfo(plugin), "SubServers", "DownloadServerInfo"); - registerPacket(new PacketExAddServer(), "SubServers", "ExAddServer"); - registerPacket(new PacketExConfigureHost(plugin), "SubServers", "ExConfigureHost"); - registerPacket(new PacketExCreateServer(null), "SubServers", "ExCreateServer"); - registerPacket(new PacketExDeleteServer(), "SubServers", "ExDeleteServer"); - registerPacket(new PacketExRemoveServer(), "SubServers", "ExRemoveServer"); - registerPacket(new PacketExUpdateServer(plugin), "SubServers", "ExUpdateServer"); - registerPacket(new PacketInExLogMessage(), "SubServers", "ExLogMessage"); - registerPacket(new PacketInExRequestQueue(plugin), "SubServers", "ExRequestQueue"); - registerPacket(new PacketLinkExHost(plugin), "SubServers", "LinkExHost"); - registerPacket(new PacketLinkProxy(plugin), "SubServers", "LinkProxy"); - registerPacket(new PacketLinkServer(plugin), "SubServers", "LinkServer"); - registerPacket(new PacketRestartServer(plugin), "SubServers", "RestartServer"); - registerPacket(new PacketStartServer(plugin), "SubServers", "StartServer"); - registerPacket(new PacketStopServer(plugin), "SubServers", "StopServer"); - - registerPacket(PacketAuthorization.class, "SubData", "Authorization"); - registerPacket(PacketCommandServer.class, "SubServers", "CommandServer"); - registerPacket(PacketCreateServer.class, "SubServers", "CreateServer"); - registerPacket(PacketDownloadGroupInfo.class, "SubServers", "DownloadGroupInfo"); - registerPacket(PacketDownloadHostInfo.class, "SubServers", "DownloadHostInfo"); - registerPacket(PacketDownloadLang.class, "SubServers", "DownloadLang"); - registerPacket(PacketDownloadNetworkList.class, "SubServers", "DownloadNetworkList"); - registerPacket(PacketDownloadPlatformInfo.class, "SubServers", "DownloadPlatformInfo"); - registerPacket(PacketDownloadPlayerList.class, "SubServers", "DownloadPlayerList"); - registerPacket(PacketDownloadProxyInfo.class, "SubServers", "DownloadProxyInfo"); - registerPacket(PacketDownloadServerInfo.class, "SubServers", "DownloadServerInfo"); - registerPacket(PacketExAddServer.class, "SubServers", "ExAddServer"); - registerPacket(PacketExConfigureHost.class, "SubServers", "ExConfigureHost"); - registerPacket(PacketExCreateServer.class, "SubServers", "ExCreateServer"); - registerPacket(PacketExDeleteServer.class, "SubServers", "ExDeleteServer"); - registerPacket(PacketExRemoveServer.class, "SubServers", "ExRemoveServer"); - registerPacket(PacketExUpdateServer.class, "SubServers", "ExUpdateServer"); - registerPacket(PacketOutExUpdateWhitelist.class, "SubServers", "ExUpdateWhitelist"); - registerPacket(PacketLinkExHost.class, "SubServers", "LinkExHost"); - registerPacket(PacketLinkProxy.class, "SubServers", "LinkProxy"); - registerPacket(PacketLinkServer.class, "SubServers", "LinkServer"); - registerPacket(PacketOutRunEvent.class, "SubServers", "RunEvent"); - registerPacket(PacketOutReload.class, "SubServers", "Reload"); - registerPacket(PacketOutReset.class, "SubServers", "Reset"); - registerPacket(PacketRestartServer.class, "SubServers", "RestartServer"); - registerPacket(PacketStartServer.class, "SubServers", "StartServer"); - registerPacket(PacketStopServer.class, "SubServers", "StopServer"); - } - - /** - * Gets the Server Socket - * - * @return Server Socket - */ - public ServerSocket getServer() { - return server; - } - - /** - * Add a Cipher for use by SubData - * - * @param cipher Cipher to Add - * @param handle Handle to Bind - */ - public static void addCipher(String handle, Cipher cipher) { - if (Util.isNull(cipher)) throw new NullPointerException(); - if (ciphers.keySet().contains(handle.toUpperCase().replace('-', '_').replace(' ', '_'))) throw new IllegalStateException("Cipher already exists: " + handle); - ciphers.put(handle.toUpperCase().replace('-', '_').replace(' ', '_'), cipher); - } - - /** - * Gets the Ciphers - * - * @return Cipher Map - */ - public static Map getCiphers() { - return new TreeMap<>(ciphers); - } - - /** - * Gets the Server's Cipher - * - * @return Cipher - */ - public Cipher getCipher() { - return cipher; - } - - /** - * Gets a Cipher by Handle - * - * @param handle Handle - * @return Cipher - */ - public static Cipher getCipher(String handle) { - return getCiphers().get(handle.toUpperCase().replace('-', '_').replace(' ', '_')); - } - - /** - * Add a Client to the Network - * - * @param socket Client to add - * @throws IOException - */ - public Client addClient(Socket socket) throws IOException { - if (Util.isNull(socket)) throw new NullPointerException(); - if (checkConnection(socket.getInetAddress())) { - Client client = new Client(this, socket); - System.out.println("SubData > " + client.getAddress().toString() + " has connected"); - clients.put(client.getAddress().toString(), client); - return client; - } else { - System.out.println("SubData > " + socket.getInetAddress().toString() + " attempted to connect, but isn't white-listed"); - socket.close(); - return null; - } - } - - /** - * Grabs a Client from the Network - * - * @param socket Socket to search - * @return Client - */ - public Client getClient(Socket socket) { - if (Util.isNull(socket)) throw new NullPointerException(); - return getClient(new InetSocketAddress(socket.getInetAddress(), socket.getPort())); - } - - /** - * Grabs a Client from the Network - * - * @param address Address to search - * @return Client - */ - public Client getClient(InetSocketAddress address) { - if (Util.isNull(address)) throw new NullPointerException(); - return getClient(address.toString()); - } - - /** - * Grabs a Client from the Network - * - * @param address Address to search - * @return Client - */ - public Client getClient(String address) { - if (Util.isNull(address)) throw new NullPointerException(); - return clients.get(address); - } - - /** - * Grabs all the Clients on the Network - * - * @return Client List - */ - public Collection getClients() { - return clients.values(); - } - - /** - * Remove a Client from the Network - * - * @param client Client to Kick - * @throws IOException - */ - public void removeClient(Client client) throws IOException { - if (Util.isNull(client)) throw new NullPointerException(); - removeClient(client.getAddress()); - } - - /** - * Remove a Client from the Network - * - * @param address Address to Kick - * @throws IOException - */ - public void removeClient(InetSocketAddress address) throws IOException { - if (Util.isNull(address)) throw new NullPointerException(); - removeClient(address.toString()); - } - - /** - * Remove a Client from the Network - * - * @param address Address to Kick - * @throws IOException - */ - public void removeClient(String address) throws IOException { - if (Util.isNull(address)) throw new NullPointerException(); - 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"); - } - } - - /** - * Register PacketIn to the Network - * - * @param packet PacketIn to register - * @param channel Packet Channel - * @param handle Handle to Bind - */ - public static void registerPacket(PacketIn packet, String channel, String handle) { - if (Util.isNull(packet, channel, handle)) throw new NullPointerException(); - HashMap> map = (pIn.keySet().contains(channel.toLowerCase()))?pIn.get(channel.toLowerCase()):new HashMap>(); - List list = (map.keySet().contains(handle))?map.get(handle):new ArrayList(); - if (!list.contains(packet)) { - list.add(packet); - map.put(handle, list); - pIn.put(channel.toLowerCase(), map); - } - } - - /** - * Unregister PacketIn from the Network - * - * @param channel Packet Channel - * @param packet PacketIn to unregister - */ - public static void unregisterPacket(String channel, PacketIn packet) { - if (Util.isNull(channel, packet)) throw new NullPointerException(); - if (pIn.keySet().contains(channel.toLowerCase())) { - List search = new ArrayList(); - search.addAll(pIn.get(channel.toLowerCase()).keySet()); - for (String handle : search) if (pIn.get(channel.toLowerCase()).get(handle).contains(packet)) { - List list = pIn.get(channel.toLowerCase()).get(handle); - list.remove(packet); - if (list.isEmpty()) { - pIn.get(channel.toLowerCase()).remove(handle); - if (pIn.get(channel.toLowerCase()).isEmpty()) pIn.remove(channel.toLowerCase()); - } else { - pIn.get(channel.toLowerCase()).put(handle, list); - } - } - } - } - - /** - * Register PacketOut to the Network - * - * @param packet PacketOut to register - * @param channel Packet Channel - * @param handle Handle to bind - */ - public static void registerPacket(Class packet, String channel, String handle) { - if (Util.isNull(packet, channel, handle)) throw new NullPointerException(); - pOut.put(packet, new NamedContainer(channel.toLowerCase(), handle)); - } - - /** - * Unregister PacketOut to the Network - * - * @param channel Packet Channel - * @param packet PacketOut to unregister - */ - public static void unregisterPacket(String channel, Class packet) { - if (Util.isNull(channel, packet)) throw new NullPointerException(); - if (pOut.keySet().contains(packet) && pOut.get(packet).name().equalsIgnoreCase(channel)) pOut.remove(packet); - } - - /** - * Grab PacketIn Instances via handle - * - * @param channel Packet Channel - * @param handle Handle - * @return PacketIn - */ - public static List getPacket(String channel, String handle) { - if (Util.isNull(channel, handle)) throw new NullPointerException(); - return new ArrayList(pIn.get(channel.toLowerCase()).get(handle)); - } - - /** - * Broadcast a Packet to everything on the Network
- * Warning: There are usually different types of applications on the network at once, they may not recognise the same packet handles - * - * @param packet Packet to send - */ - public void broadcastPacket(PacketOut packet) { - if (Util.isNull(packet)) throw new NullPointerException(); - List clients = new ArrayList(); - clients.addAll(getClients()); - for (Client client : clients) { - client.sendPacket(packet); - } - } - - /** - * Allow Connections from an Address - * - * @param address Address to allow - */ - public static void allowConnection(String address) { - if (Util.isNull(address)) throw new NullPointerException(); - if (!allowedAddresses.contains(address)) allowedAddresses.add(address); - } - - private boolean checkConnection(InetAddress address) { - boolean whitelisted = false; - Matcher regaddress = Pattern.compile("^(\\d{1,3}).(\\d{1,3}).(\\d{1,3}).(\\d{1,3})$").matcher(address.getHostAddress()); - if (regaddress.find()) { - for (String allowed : allowedAddresses) if (!whitelisted) { - Matcher regallowed = Pattern.compile("^(\\d{1,3}|%).(\\d{1,3}|%).(\\d{1,3}|%).(\\d{1,3}|%)$").matcher(allowed); - if (regallowed.find() && ( - (regaddress.group(1).equals(regallowed.group(1)) || regallowed.group(1).equals("%")) && - (regaddress.group(2).equals(regallowed.group(2)) || regallowed.group(2).equals("%")) && - (regaddress.group(3).equals(regallowed.group(3)) || regallowed.group(3).equals("%")) && - (regaddress.group(4).equals(regallowed.group(4)) || regallowed.group(4).equals("%")) - )) whitelisted = true; - } - } - SubNetworkConnectEvent event = new SubNetworkConnectEvent(this, address); - event.setCancelled(!whitelisted); - plugin.getPluginManager().callEvent(event); - return !event.isCancelled(); - } - - /** - * Deny Connections from an Address - * - * @param address Address to deny - */ - public static void denyConnection(String address) { - if (Util.isNull(address)) throw new NullPointerException(); - allowedAddresses.remove(address); - } - - /** - * Encode PacketOut - * - * @param packet PacketOut - * @return JSON Formatted Packet - * @throws IllegalPacketException - */ - protected static YAMLSection encodePacket(Client client, PacketOut packet) throws IllegalPacketException, InvocationTargetException { - YAMLSection section = new YAMLSection(); - - if (!pOut.keySet().contains(packet.getClass())) throw new IllegalPacketException(packet.getClass().getCanonicalName() + ": Unknown PacketOut Channel: " + packet.getClass().getCanonicalName()); - if (packet.getVersion() == null) throw new NullPointerException(packet.getClass().getCanonicalName() + ": PacketOut getVersion() cannot be null: " + packet.getClass().getCanonicalName()); - - try { - YAMLSection contents = packet.generate(); - section.set("n", pOut.get(packet.getClass()).name()); - section.set("h", pOut.get(packet.getClass()).get()); - section.set("v", packet.getVersion()); - if (contents != null) section.set("c", contents); - return section; - } catch (Throwable e) { - throw new InvocationTargetException(e, packet.getClass().getCanonicalName() + ": Exception while encoding packet"); - } - } - - /** - * Decode PacketIn - * - * @param data Data to Decode - * @return PacketIn - * @throws IllegalPacketException - */ - protected static List decodePacket(Client client, YAMLSection data) throws IllegalPacketException { - if (!data.contains("n") || !data.contains("h") || !data.contains("v")) throw new IllegalPacketException(client.getAddress().toString() + ": Unknown Packet Format: " + data.toString()); - if (!pIn.keySet().contains(data.getRawString("n")) || !pIn.get(data.getRawString("n")).keySet().contains(data.getRawString("h"))) throw new IllegalPacketException("Unknown PacketIn Channel: " + data.getRawString("n") + ':' + data.getRawString("h")); - - List list = new ArrayList(); - for (PacketIn packet : pIn.get(data.getRawString("n")).get(data.getRawString("h"))) { - if (packet.isCompatible(data.getVersion("v"))) { - list.add(packet); - } else { - new IllegalPacketException(client.getAddress().toString() + ": Packet Version Mismatch in " + data.getRawString("h") + ": " + data.getRawString("v") + " =/= " + packet.getVersion().toFullString()).printStackTrace(); - } - } - - return list; - } - - /** - * Drops All Connections and Stops the SubData Listener - * - * @throws IOException - */ - public void destroy() throws IOException { - while(clients.size() > 0) { - removeClient((Client) clients.values().toArray()[0]); - } - server.close(); - if (UPnP.isUPnPAvailable() && UPnP.isMappedTCP(server.getLocalPort())) UPnP.closePortTCP(server.getLocalPort()); - System.out.println("SubServers > The SubData Listener has been closed"); - plugin.subdata = null; - } -} diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/SubProtocol.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/SubProtocol.java new file mode 100644 index 00000000..8534ef74 --- /dev/null +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/SubProtocol.java @@ -0,0 +1,162 @@ +package net.ME1312.SubServers.Bungee.Network; + +import net.ME1312.Galaxi.Library.Version.Version; +import net.ME1312.SubData.Server.SubDataProtocol; +import net.ME1312.SubData.Server.SubDataServer; +import net.ME1312.SubServers.Bungee.Event.SubNetworkConnectEvent; +import net.ME1312.SubServers.Bungee.Event.SubNetworkDisconnectEvent; +import net.ME1312.SubServers.Bungee.Network.Packet.*; +import net.ME1312.SubServers.Bungee.SubAPI; +import net.ME1312.SubServers.Bungee.SubPlugin; +import net.md_5.bungee.api.ProxyServer; + +import java.io.IOException; +import java.net.InetAddress; +import java.util.logging.Handler; +import java.util.logging.LogRecord; +import java.util.logging.Logger; + +public class SubProtocol extends SubDataProtocol { + private static SubProtocol instance; + private SubProtocol(Logger logger) { + super(logger); + } + + @SuppressWarnings("deprecation") + public static SubProtocol get() { + if (instance == null) { + Logger log = Logger.getAnonymousLogger(); + log.setUseParentHandlers(false); + log.addHandler(new Handler() { + private boolean open = true; + + @Override + public void publish(LogRecord record) { + if (open) + ProxyServer.getInstance().getLogger().log(record.getLevel(), "SubData > " + record.getMessage(), record.getParameters()); + } + + @Override + public void flush() { + + } + + @Override + public void close() throws SecurityException { + open = false; + } + }); + instance = new SubProtocol(log); + SubPlugin plugin = SubAPI.getInstance().getInternals(); + plugin.getPluginManager().registerListener(null, new PacketOutExRunEvent(plugin)); + + instance.setName("SubServers 2"); + instance.setVersion(new Version("2.13.2a+")); + + + // 00-09: Object Link Packets + instance.registerPacket(0x0000, PacketLinkProxy.class); + instance.registerPacket(0x0001, PacketLinkExHost.class); + instance.registerPacket(0x0002, PacketLinkServer.class); + + instance.registerPacket(0x0000, new PacketLinkProxy(plugin)); + instance.registerPacket(0x0001, new PacketLinkExHost(plugin)); + instance.registerPacket(0x0002, new PacketLinkServer(plugin)); + + + // 10-29: Download Packets + instance.registerPacket(0x0010, PacketDownloadLang.class); + instance.registerPacket(0x0011, PacketDownloadPlatformInfo.class); + instance.registerPacket(0x0012, PacketDownloadProxyInfo.class); + instance.registerPacket(0x0013, PacketDownloadHostInfo.class); + instance.registerPacket(0x0014, PacketDownloadGroupInfo.class); + instance.registerPacket(0x0015, PacketDownloadServerInfo.class); + instance.registerPacket(0x0016, PacketDownloadPlayerList.class); + + instance.registerPacket(0x0010, new PacketDownloadLang(plugin)); + instance.registerPacket(0x0011, new PacketDownloadPlatformInfo(plugin)); + instance.registerPacket(0x0012, new PacketDownloadProxyInfo(plugin)); + instance.registerPacket(0x0013, new PacketDownloadHostInfo(plugin)); + instance.registerPacket(0x0014, new PacketDownloadGroupInfo(plugin)); + instance.registerPacket(0x0015, new PacketDownloadServerInfo(plugin)); + instance.registerPacket(0x0016, new PacketDownloadPlayerList(plugin)); + + + // 30-49: Control Packets + //instance.registerPacket(0x0030, PacketInReload.class); TODO + instance.registerPacket(0x0031, PacketCreateServer.class); + //instance.registerPacket(0x0032, PacketAddServer.class); TODO + instance.registerPacket(0x0033, PacketStartServer.class); + //instance.registerPacket(0x0034, PacketEditServer.class); TODO + instance.registerPacket(0x0035, PacketRestartServer.class); + instance.registerPacket(0x0036, PacketCommandServer.class); + instance.registerPacket(0x0037, PacketStopServer.class); + //instance.registerPacket(0x0038, PacketRemoveServer.class); TODO + //instance.registerPacket(0x0039, PacketDeleteServer.class); TODO + + //instance.registerPacket(0x0030, new PacketInReload(plugin)); TODO + instance.registerPacket(0x0031, new PacketCreateServer(plugin)); + //instance.registerPacket(0x0032, new PacketAddServer(plugin)); TODO + instance.registerPacket(0x0033, new PacketStartServer(plugin)); + //instance.registerPacket(0x0034, new PacketEditServer(plugin)); TODO + instance.registerPacket(0x0035, new PacketRestartServer(plugin)); + instance.registerPacket(0x0036, new PacketCommandServer(plugin)); + instance.registerPacket(0x0037, new PacketStopServer(plugin)); + //instance.registerPacket(0x0038, new PacketRemoveServer(plugin)); TODO + //instance.registerPacket(0x0039, new PacketDeleteServer(plugin)); TODO + + + // 50-69: External Host Packets + instance.registerPacket(0x0050, PacketExConfigureHost.class); + instance.registerPacket(0x0051, PacketExDownloadTemplates.class); + //instance.registerPacket(0x0052, PacketInExRequestQueue.class); + instance.registerPacket(0x0053, PacketExCreateServer.class); + instance.registerPacket(0x0054, PacketExAddServer.class); + instance.registerPacket(0x0055, PacketExUpdateServer.class); + //instance.registerPacket(0x0056, PacketInExLogMessage.class); + instance.registerPacket(0x0057, PacketExDeleteServer.class); + instance.registerPacket(0x0058, PacketExRemoveServer.class); + + instance.registerPacket(0x0050, new PacketExConfigureHost(plugin)); + instance.registerPacket(0x0051, new PacketExDownloadTemplates(plugin)); + instance.registerPacket(0x0052, new PacketInExRequestQueue(plugin)); + instance.registerPacket(0x0053, new PacketExCreateServer(null)); + instance.registerPacket(0x0054, new PacketExAddServer()); + instance.registerPacket(0x0055, new PacketExUpdateServer(plugin)); + instance.registerPacket(0x0056, new PacketInExLogMessage()); + instance.registerPacket(0x0057, new PacketExDeleteServer()); + instance.registerPacket(0x0058, new PacketExRemoveServer()); + + + // 70-79: External Misc Packets + instance.registerPacket(0x0070, PacketOutExRunEvent.class); + instance.registerPacket(0x0071, PacketOutExReset.class); + instance.registerPacket(0x0072, PacketOutExReload.class); + instance.registerPacket(0x0073, PacketOutExUpdateWhitelist.class); + + //instance.registerPacket(0x0070, new PacketOutRunEvent()); + //instance.registerPacket(0x0071, new PacketOutReset()); + //instance.registerPacket(0x0072, new PacketOutReload()); + //instance.registerPacket(0x0073, new PacketOutExUpdateWhitelist()); + } + + return instance; + } + + @SuppressWarnings("deprecation") + @Override + public SubDataServer open(InetAddress address, int port, String cipher) throws IOException { + SubDataServer subdata = super.open(address, port, cipher); + SubPlugin plugin = SubAPI.getInstance().getInternals(); + + subdata.on.closed(server -> plugin.subdata = null); + subdata.on.connect(client -> { + if (!plugin.getPluginManager().callEvent(new SubNetworkConnectEvent(client.getServer(), client)).isCancelled()) { + client.on.closed(c -> plugin.getPluginManager().callEvent(new SubNetworkDisconnectEvent(c.get().getServer(), c.get(), c.name()))); + return true; + } else return false; + }); + + return subdata; + } +} diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubAPI.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubAPI.java index 2f27b0cb..f56560da 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubAPI.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubAPI.java @@ -1,18 +1,18 @@ package net.ME1312.SubServers.Bungee; import com.google.common.collect.Range; +import net.ME1312.SubData.Server.DataServer; import net.ME1312.SubServers.Bungee.Event.SubAddHostEvent; import net.ME1312.SubServers.Bungee.Event.SubAddServerEvent; import net.ME1312.SubServers.Bungee.Event.SubRemoveHostEvent; import net.ME1312.SubServers.Bungee.Event.SubRemoveServerEvent; import net.ME1312.SubServers.Bungee.Host.*; -import net.ME1312.SubServers.Bungee.Library.Container; import net.ME1312.SubServers.Bungee.Library.Exception.InvalidHostException; -import net.ME1312.SubServers.Bungee.Library.NamedContainer; -import net.ME1312.SubServers.Bungee.Library.UniversalFile; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.SubDataServer; +import net.ME1312.Galaxi.Library.NamedContainer; +import net.ME1312.Galaxi.Library.UniversalFile; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.Galaxi.Library.Version.Version; +import net.ME1312.SubData.Server.SubDataServer; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.protocol.ProtocolConstants; @@ -87,7 +87,7 @@ public final class SubAPI { * * @return SubData Network Manager */ - public SubDataServer getSubDataNetwork() { + public DataServer getSubDataNetwork() { return plugin.subdata; } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubCommand.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubCommand.java index 709ed1a8..fbbeb19f 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubCommand.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubCommand.java @@ -3,11 +3,11 @@ package net.ME1312.SubServers.Bungee; import com.google.gson.Gson; 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; -import net.ME1312.SubServers.Bungee.Library.Util; -import net.ME1312.SubServers.Bungee.Library.Version.Version; -import net.ME1312.SubServers.Bungee.Network.ClientHandler; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.NamedContainer; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.Galaxi.Library.Version.Version; +import net.ME1312.SubData.Server.ClientHandler; import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.chat.ClickEvent; @@ -96,12 +96,12 @@ public final class SubCommand extends CommandX { sender.sendMessage(""); new Thread(() -> { try { - YAMLSection tags = new YAMLSection(new Gson().fromJson("{\"tags\":" + Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://api.github.com/repos/ME1312/SubServers-2/git/refs/tags").openStream(), Charset.forName("UTF-8")))) + '}', Map.class)); + ObjectMap tags = new ObjectMap(new Gson().fromJson("{\"tags\":" + Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://api.github.com/repos/ME1312/SubServers-2/git/refs/tags").openStream(), Charset.forName("UTF-8")))) + '}', Map.class)); List versions = new LinkedList(); Version updversion = plugin.version; int updcount = 0; - for (YAMLSection tag : tags.getSectionList("tags")) versions.add(Version.fromString(tag.getString("ref").substring(10))); + for (ObjectMap tag : tags.getMapList("tags")) versions.add(Version.fromString(tag.getString("ref").substring(10))); Collections.sort(versions); for (Version version : versions) { if (version.compareTo(updversion) > 0) { @@ -179,7 +179,7 @@ public final class SubCommand extends CommandX { if (!(servers.get(name.toLowerCase()) instanceof SubServer)) { message += ChatColor.WHITE; } else if (((SubServer) server).isRunning()) { - if (((SubServer) server).getStopAction() == SubServer.StopAction.REMOVE_SERVER || ((SubServer) server).getStopAction() == SubServer.StopAction.DELETE_SERVER) { + if (((SubServer) server).getStopAction() == SubServer.StopAction.REMOVE_SERVER || ((SubServer) server).getStopAction() == SubServer.StopAction.RECYCLE_SERVER || ((SubServer) server).getStopAction() == SubServer.StopAction.DELETE_SERVER) { message += ChatColor.AQUA; } else { message += ChatColor.GREEN; @@ -212,7 +212,7 @@ public final class SubCommand extends CommandX { for (SubServer subserver : host.getSubServers().values()) { if (i != 0) message += div; if (subserver.isRunning()) { - if (subserver.getStopAction() == SubServer.StopAction.REMOVE_SERVER || subserver.getStopAction() == SubServer.StopAction.DELETE_SERVER) { + if (subserver.getStopAction() == SubServer.StopAction.REMOVE_SERVER || subserver.getStopAction() == SubServer.StopAction.RECYCLE_SERVER || subserver.getStopAction() == SubServer.StopAction.DELETE_SERVER) { message += ChatColor.AQUA; } else { message += ChatColor.GREEN; @@ -551,7 +551,7 @@ public final class SubCommand extends CommandX { sender.sendMessage("SubServers > The BungeeCord library provided does not support console sudo."); } } else if (args[0].equalsIgnoreCase("create")) { - if (args.length > 4) { + if (args.length > 3) { if (plugin.api.getSubServers().keySet().contains(args[1].toLowerCase()) || SubCreator.isReserved(args[1])) { sender.sendMessage("SubServers > There is already a SubServer with that name"); } else if (!plugin.hosts.keySet().contains(args[2].toLowerCase())) { @@ -564,15 +564,13 @@ public final class SubCommand extends CommandX { sender.sendMessage("SubServers > There is no template with that name"); } else if (!plugin.hosts.get(args[2].toLowerCase()).getCreator().getTemplate(args[3]).isEnabled()) { sender.sendMessage("SubServers > That Template is not enabled"); - } else if (new Version("1.8").compareTo(new Version(args[4])) > 0) { - sender.sendMessage("SubServers > SubCreator cannot create servers before Minecraft 1.8"); } else if (args.length > 5 && (Util.isException(() -> Integer.parseInt(args[5])) || Integer.parseInt(args[5]) <= 0 || Integer.parseInt(args[5]) > 65535)) { sender.sendMessage("SubServers > Invalid Port Number"); } else { - plugin.hosts.get(args[2].toLowerCase()).getCreator().create(args[1], plugin.hosts.get(args[2].toLowerCase()).getCreator().getTemplate(args[3]), new Version(args[4]), (args.length > 5)?Integer.parseInt(args[5]):null); + plugin.hosts.get(args[2].toLowerCase()).getCreator().create(args[1], plugin.hosts.get(args[2].toLowerCase()).getCreator().getTemplate(args[3]), (args.length > 4)?new Version(args[4]):null, (args.length > 5)?Integer.parseInt(args[5]):null); } } else { - sender.sendMessage("SubServers > Usage: " + label + " " + args[0].toLowerCase() + "