void |
stopListeners()
Reset all changes made by startListeners
@@ -356,6 +366,15 @@ implements net.md_5.bungee.api.plugin.Listener
public boolean redis
+
+
+
+
+-
+
api
+public final SubAPI api
+
+
@@ -383,13 +402,13 @@ implements net.md_5.bungee.api.plugin.Listener
public final Version bversion
-
+
-
-
api
-public final SubAPI api
+lastReload
+public long lastReload
@@ -532,6 +551,17 @@ implements net.md_5.bungee.api.plugin.Listener
public void start(SubStartEvent e)
+
+
+
+
diff --git a/Javadoc/SubServers.Sync/overview-tree.html b/Javadoc/SubServers.Sync/overview-tree.html
index 2641ebe8..f67f6698 100644
--- a/Javadoc/SubServers.Sync/overview-tree.html
+++ b/Javadoc/SubServers.Sync/overview-tree.html
@@ -139,6 +139,7 @@
net.ME1312.SubServers.Sync.Network.Packet.PacketDownloadLang (implements net.ME1312.SubServers.Sync.Network.PacketIn, net.ME1312.SubServers.Sync.Network.PacketOut)
net.ME1312.SubServers.Sync.Network.Packet.PacketDownloadNetworkList (implements net.ME1312.SubServers.Sync.Network.PacketIn, net.ME1312.SubServers.Sync.Network.PacketOut)
net.ME1312.SubServers.Sync.Network.Packet.PacketDownloadPlayerList (implements net.ME1312.SubServers.Sync.Network.PacketIn, net.ME1312.SubServers.Sync.Network.PacketOut)
+net.ME1312.SubServers.Sync.Network.Packet.PacketDownloadProxyInfo (implements net.ME1312.SubServers.Sync.Network.PacketIn, net.ME1312.SubServers.Sync.Network.PacketOut)
net.ME1312.SubServers.Sync.Network.Packet.PacketDownloadServerInfo (implements net.ME1312.SubServers.Sync.Network.PacketIn, net.ME1312.SubServers.Sync.Network.PacketOut)
net.ME1312.SubServers.Sync.Network.Packet.PacketDownloadServerList (implements net.ME1312.SubServers.Sync.Network.PacketIn, net.ME1312.SubServers.Sync.Network.PacketOut)
net.ME1312.SubServers.Sync.Network.Packet.PacketInReset (implements net.ME1312.SubServers.Sync.Network.PacketIn)
diff --git a/SubServers.Bungee/src.jar b/SubServers.Bungee/src.jar
index d74d59f9..e2e4c9da 100644
Binary files a/SubServers.Bungee/src.jar and b/SubServers.Bungee/src.jar differ
diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalSubServer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalSubServer.java
index 4706c272..17c5c8c8 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
@@ -252,6 +252,7 @@ public class ExternalSubServer extends SubServerContainer {
break;
case "port":
if (value.isInt() && host.removeSubServer(player, getName())) {
+ waitFor(() -> host.getSubServer(getName()), null);
SubServer server = host.addSubServer(player, getName(), isEnabled(), value.asInt(), getMotd(), isLogging(), getPath(), getExecutable(), getStopCommand(), false, willAutoRestart(), isHidden(), isRestricted(), isTemporary());
if (server != null) {
if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
@@ -289,6 +290,7 @@ public class ExternalSubServer extends SubServerContainer {
break;
case "dir":
if (value.isString()) {
+ waitFor(() -> host.getSubServer(getName()), null);
SubServer server = host.addSubServer(player, getName(), isEnabled(), getAddress().getPort(), getMotd(), isLogging(), value.asRawString(), getExecutable(), getStopCommand(), false, willAutoRestart(), isHidden(), isRestricted(), isTemporary());
if (server != null) {
if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
@@ -302,6 +304,7 @@ public class ExternalSubServer extends SubServerContainer {
break;
case "exec":
if (value.isString()) {
+ waitFor(() -> host.getSubServer(getName()), null);
SubServer server = host.addSubServer(player, getName(), isEnabled(), getAddress().getPort(), getMotd(), isLogging(), getPath(), new Executable(value.asRawString()), getStopCommand(), false, willAutoRestart(), isHidden(), isRestricted(), isTemporary());
if (server != null) {
if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
@@ -414,6 +417,10 @@ public class ExternalSubServer extends SubServerContainer {
}
if (!isRunning() && forward == null && state) start(player);
return c;
+ } private void waitFor(Util.ReturnRunnable method, V value) throws InterruptedException {
+ while (!((value == null && method.run() == null) || !method.run().equals(value))) {
+ Thread.sleep(250);
+ }
}
@Override
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 2ec611e5..2fbf9b5d 100644
--- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Host.java
+++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Host.java
@@ -21,6 +21,7 @@ import java.util.UUID;
*/
public abstract class Host implements ExtraDataHandler {
private YAMLSection extra = new YAMLSection();
+ private final String signature;
private String nick = null;
/**
@@ -35,6 +36,7 @@ public abstract class Host implements ExtraDataHandler {
*/
public Host(SubPlugin plugin, String name, Boolean enabled, InetAddress address, String directory, String gitBash) {
if (name.contains(" ")) throw new InvalidHostException("Host names cannot have spaces: " + name);
+ signature = plugin.signObject();
SubDataServer.allowConnection(address.getHostAddress());
}
@@ -357,6 +359,15 @@ public abstract class Host implements ExtraDataHandler {
*/
public abstract boolean forceDeleteSubServer(UUID player, String name) throws InterruptedException;
+ /**
+ * Get the Signature of this Object
+ *
+ * @return Object Signature
+ */
+ public final String getSignature() {
+ return signature;
+ }
+
@Override
public void addExtra(String handle, Object value) {
if (Util.isNull(handle, value)) throw new NullPointerException();
@@ -414,6 +425,7 @@ public abstract class Host implements ExtraDataHandler {
}
hinfo.put("servers", servers);
if (this instanceof ClientHandler && ((ClientHandler) this).getSubData() != null) hinfo.put("subdata", ((ClientHandler) this).getSubData().getAddress().toString());
+ hinfo.put("signature", signature);
hinfo.put("extra", getExtra().toJSON());
return hinfo.toString();
}
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 f74ce272..77ec678d 100644
--- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Server.java
+++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Server.java
@@ -87,4 +87,11 @@ public interface Server extends ServerInfo, ClientHandler, ExtraDataHandler {
* @param value Value
*/
void setRestricted(boolean value);
+
+ /**
+ * Get the Signature of this Object
+ *
+ * @return Object Signature
+ */
+ String getSignature();
}
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 a54dc9fc..575f359c 100644
--- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/ServerContainer.java
+++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/ServerContainer.java
@@ -26,6 +26,7 @@ import java.util.List;
*/
public class ServerContainer extends BungeeServerInfo implements Server {
private YAMLSection extra = new YAMLSection();
+ private final String signature;
private Client client = null;
private List groups = new ArrayList();
private String nick = null;
@@ -33,10 +34,12 @@ public class ServerContainer extends BungeeServerInfo implements Server {
private boolean restricted;
private boolean hidden;
+ @SuppressWarnings("deprecation")
public ServerContainer(String name, InetSocketAddress address, String motd, boolean hidden, boolean restricted) throws InvalidServerException {
super(name, address, ChatColor.translateAlternateColorCodes('&', motd), restricted);
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().getInternals().signObject();
SubDataServer.allowConnection(getAddress().getAddress().getHostAddress());
this.motd = motd;
this.restricted = restricted;
@@ -129,6 +132,11 @@ public class ServerContainer extends BungeeServerInfo implements Server {
this.restricted = value;
}
+ @Override
+ public final String getSignature() {
+ return signature;
+ }
+
@Override
public void addExtra(String handle, Object value) {
if (Util.isNull(handle, value)) throw new NullPointerException();
@@ -178,6 +186,7 @@ public class ServerContainer extends BungeeServerInfo implements Server {
}
info.put("players", players);
if (getSubData() != null) info.put("subdata", getSubData().getAddress().toString());
+ info.put("signature", signature);
info.put("extra", getExtra().toJSON());
return info.toString();
}
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 ffa3a65b..54ba1d5f 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
@@ -91,6 +91,7 @@ public class PacketDownloadHostInfo implements PacketIn, PacketOut {
}
info.put("servers", servers);
if (host instanceof ClientHandler && ((ClientHandler) host).getSubData() != null) info.put("subdata", ((ClientHandler) host).getSubData().getAddress().toString());
+ info.put("signature", host.getSignature());
info.put("extra", host.getExtra().toJSON());
} else json.put("valid", false);
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 e4336489..83e2dc59 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
@@ -41,6 +41,7 @@ public class PacketDownloadProxyInfo implements PacketIn, PacketOut {
JSONObject subservers = new JSONObject();
subservers.put("version", plugin.version.toString());
if (plugin.bversion != null) subservers.put("beta", plugin.bversion.toString());
+ subservers.put("last-reload", plugin.resetDate);
subservers.put("hosts", plugin.api.getHosts().size());
subservers.put("subservers", plugin.api.getSubServers().size());
json.put("subservers", subservers);
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 97e0ab56..cdcde18e 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,6 +1,7 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.SubServers.Bungee.Host.Server;
+import net.ME1312.SubServers.Bungee.Host.ServerContainer;
import net.ME1312.SubServers.Bungee.Host.SubServer;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
@@ -80,6 +81,7 @@ public class PacketDownloadServerInfo implements PacketIn, PacketOut {
info.put("hidden", server.isHidden());
info.put("motd", server.getMotd());
if (server.getSubData() != null) info.put("subdata", server.getSubData().getAddress().toString());
+ info.put("signature", server.getSignature());
info.put("extra", server.getExtra().toJSON());
JSONObject players = new JSONObject();
diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubPlugin.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubPlugin.java
index 51908c77..dd04f908 100644
--- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubPlugin.java
+++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubPlugin.java
@@ -24,6 +24,7 @@ import org.xml.sax.InputSource;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.*;
import java.lang.reflect.InvocationTargetException;
+import java.math.BigInteger;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketException;
@@ -56,8 +57,10 @@ public final class SubPlugin extends BungeeCord implements Listener {
public final Version bversion = (SubPlugin.class.getPackage().getSpecificationVersion().equals("0"))?null:new Version(SubPlugin.class.getPackage().getSpecificationVersion());
public boolean redis = false;
+ public long resetDate = 0;
private boolean running = false;
private boolean posted = false;
+ private BigInteger lastSignature = new BigInteger("-1");
protected SubPlugin(PrintStream out) throws IOException {
System.out.println("SubServers > Loading SubServers.Bungee v" + version.toString() + " Libraries... ");
@@ -208,13 +211,14 @@ public final class SubPlugin extends BungeeCord implements Listener {
public void reload() throws IOException {
List ukeys = new ArrayList();
long begin = Calendar.getInstance().getTime().getTime();
- boolean status = running;
+ boolean status;
+ if (!(status = running)) resetDate = begin;
YAMLSection prevconfig = config.get();
config.reload();
lang.reload();
- if (subdata == null ||
+ if (subdata == null || // SubData Server must be reset
!config.get().getSection("Settings").getSection("SubData").getRawString("Address", "127.0.0.1:4391").equals(prevconfig.getSection("Settings").getSection("SubData").getRawString("Address", "127.0.0.1:4391")) ||
!config.get().getSection("Settings").getSection("SubData").getRawString("Encryption", "NONE").equals(prevconfig.getSection("Settings").getSection("SubData").getRawString("Encryption", "NONE"))
) {
@@ -233,7 +237,7 @@ public final class SubPlugin extends BungeeCord implements Listener {
encryption);
System.out.println("SubServers > SubData Direct Listening on " + subdata.getServer().getLocalSocketAddress().toString());
loop();
- } else System.out.println("SubServers > Reloading SubData Whitelist...");
+ } // Add new entries to Allowed-Connections
for (String s : config.get().getSection("Settings").getSection("SubData").getStringList("Allowed-Connections", new ArrayList())) {
try {
SubDataServer.allowConnection(s);
@@ -248,8 +252,7 @@ public final class SubPlugin extends BungeeCord implements Listener {
if (!ukeys.contains(name.toLowerCase())) try {
if (!hostDrivers.keySet().contains(config.get().getSection("Hosts").getSection(name).getRawString("Driver").toLowerCase())) throw new InvalidHostException("Invalid Driver for host: " + name);
Host host = this.hosts.get(name.toLowerCase());
- if (host == null ||
- config.get().getSection("Hosts").getSection(name).getBoolean("Enabled") !=host.isEnabled() ||
+ if (host == null || // Host must be reset
!hostDrivers.get(config.get().getSection("Hosts").getSection(name).getRawString("Driver").toLowerCase()).equals(host.getClass()) ||
!config.get().getSection("Hosts").getSection(name).getRawString("Address").equals(host.getAddress().getHostAddress()) ||
!config.get().getSection("Hosts").getSection(name).getRawString("Directory").equals(host.getPath()) ||
@@ -258,7 +261,10 @@ public final class SubPlugin extends BungeeCord implements Listener {
if (host != null) api.forceRemoveHost(name);
host = api.addHost(config.get().getSection("Hosts").getSection(name).getRawString("Driver").toLowerCase(), name, config.get().getSection("Hosts").getSection(name).getBoolean("Enabled"), InetAddress.getByName(config.get().getSection("Hosts").getSection(name).getRawString("Address")),
config.get().getSection("Hosts").getSection(name).getRawString("Directory"), config.get().getSection("Hosts").getSection(name).getRawString("Git-Bash"));
- }
+ } else { // Host wasn't reset, so check for these changes
+ if (config.get().getSection("Hosts").getSection(name).getBoolean("Enabled") != host.isEnabled())
+ host.setEnabled(config.get().getSection("Hosts").getSection(name).getBoolean("Enabled"));
+ } // Check for other changes
if (config.get().getSection("Hosts").getSection(name).getKeys().contains("Display") && ((config.get().getSection("Hosts").getSection(name).getString("Display").length() == 0 && !host.getDisplayName().equals(host.getName())) || !config.get().getSection("Hosts").getSection(name).getString("Display").equals(host.getDisplayName())))
host.setDisplayName(config.get().getSection("Hosts").getSection(name).getString("Display"));
if (config.get().getSection("Hosts").getSection(name).getKeys().contains("Extra"))
@@ -278,21 +284,21 @@ public final class SubPlugin extends BungeeCord implements Listener {
if (!ukeys.contains(name.toLowerCase())) try {
Server server = api.getServer(name);
if (server == null || !(server instanceof SubServer)) {
- if (server == null ||
+ if (server == null || // Server must be reset
bungeeconfig.get().getSection("servers").getSection(name).getRawString("address").equals(server.getAddress().getAddress().getHostAddress() + ':' + server.getAddress().getPort())
) {
if (server != null) api.forceRemoveServer(name);
server = api.addServer(name, InetAddress.getByName(bungeeconfig.get().getSection("servers").getSection(name).getRawString("address").split(":")[0]),
Integer.parseInt(bungeeconfig.get().getSection("servers").getSection(name).getRawString("address").split(":")[1]), bungeeconfig.get().getSection("servers").getSection(name).getColoredString("motd", '&'),
bungeeconfig.get().getSection("servers").getSection(name).getBoolean("hidden", false), bungeeconfig.get().getSection("servers").getSection(name).getBoolean("restricted"));
- } else {
+ } else { // Server wasn't reset, so check for these changes
if (!bungeeconfig.get().getSection("servers").getSection(name).getColoredString("motd", '&').equals(server.getMotd()))
server.setMotd(bungeeconfig.get().getSection("servers").getSection(name).getColoredString("motd", '&'));
if (bungeeconfig.get().getSection("servers").getSection(name).getBoolean("hidden", false) != server.isHidden())
server.setHidden(bungeeconfig.get().getSection("servers").getSection(name).getBoolean("hidden", false));
if (bungeeconfig.get().getSection("servers").getSection(name).getBoolean("restricted") != server.isRestricted())
server.setRestricted(bungeeconfig.get().getSection("servers").getSection(name).getBoolean("restricted"));
- }
+ } // Check for other changes
if (bungeeconfig.get().getSection("servers").getSection(name).getKeys().contains("display") && ((bungeeconfig.get().getSection("servers").getSection(name).getRawString("display").length() == 0 && !server.getDisplayName().equals(server.getName())) || !bungeeconfig.get().getSection("servers").getSection(name).getRawString("display").equals(server.getDisplayName())))
server.setDisplayName(bungeeconfig.get().getSection("servers").getSection(name).getString("display"));
if (bungeeconfig.get().getSection("servers").getSection(name).getKeys().contains("group")) {
@@ -484,6 +490,58 @@ public final class SubPlugin extends BungeeCord implements Listener {
}).start();
}
+ /**
+ * Reset all changes made by startListeners
+ *
+ * @see SubPlugin#startListeners()
+ */
+ @Override
+ public void stopListeners() {
+ try {
+ legServers.clear();
+ legServers.putAll(getServers());
+ if (api.listeners.size() > 0) {
+ System.out.println("SubServers > Resetting SubAPI Plugins...");
+ for (NamedContainer listener : api.listeners) {
+ try {
+ if (listener.get() != null) listener.get().run();
+ } catch (Throwable e) {
+ new InvocationTargetException(e, "Problem disabling plugin").printStackTrace();
+ }
+ }
+ }
+
+ shutdown();
+
+ subdata.destroy();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ super.stopListeners();
+ } private void shutdown() throws Exception {
+ api.ready = false;
+ System.out.println("SubServers > Resetting Hosts and Server Data");
+ List hosts = new ArrayList();
+ hosts.addAll(this.hosts.keySet());
+
+ for (String host : hosts) {
+ api.forceRemoveHost(host);
+ }
+ running = false;
+ this.hosts.clear();
+ exServers.clear();
+ }
+
+ /**
+ * Returns a unique signature for use by signed objects
+ *
+ * @return Signature
+ */
+ public String signObject() {
+ return (lastSignature = lastSignature.add(BigInteger.ONE)).toString();
+ }
+
/**
* Reference a RedisBungee method via reflection
*
@@ -562,49 +620,6 @@ public final class SubPlugin extends BungeeCord implements Listener {
return getServers().get(name);
}
- /**
- * Reset all changes made by startListeners
- *
- * @see SubPlugin#startListeners()
- */
- @Override
- public void stopListeners() {
- try {
- legServers.clear();
- legServers.putAll(getServers());
- if (api.listeners.size() > 0) {
- System.out.println("SubServers > Resetting SubAPI Plugins...");
- for (NamedContainer listener : api.listeners) {
- try {
- if (listener.get() != null) listener.get().run();
- } catch (Throwable e) {
- new InvocationTargetException(e, "Problem disabling plugin").printStackTrace();
- }
- }
- }
-
- shutdown();
-
- subdata.destroy();
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- super.stopListeners();
- } private void shutdown() throws Exception {
- api.ready = false;
- System.out.println("SubServers > Resetting Hosts and Server Data");
- List hosts = new ArrayList();
- hosts.addAll(this.hosts.keySet());
-
- for (String host : hosts) {
- api.forceRemoveHost(host);
- }
- running = false;
- this.hosts.clear();
- exServers.clear();
- }
-
@EventHandler(priority = Byte.MAX_VALUE)
public void reroute(ServerConnectEvent e) {
Map servers = new TreeMap(api.getServers());
diff --git a/SubServers.Client/Bukkit/src.jar b/SubServers.Client/Bukkit/src.jar
index 54b63b7f..9583ec03 100644
Binary files a/SubServers.Client/Bukkit/src.jar and b/SubServers.Client/Bukkit/src.jar differ
diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/Packet/PacketDownloadProxyInfo.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/Packet/PacketDownloadProxyInfo.java
new file mode 100644
index 00000000..f8dcd3ac
--- /dev/null
+++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/Packet/PacketDownloadProxyInfo.java
@@ -0,0 +1,47 @@
+package net.ME1312.SubServers.Client.Bukkit.Network.Packet;
+
+import net.ME1312.SubServers.Client.Bukkit.Library.JSONCallback;
+import net.ME1312.SubServers.Client.Bukkit.Library.Util;
+import net.ME1312.SubServers.Client.Bukkit.Library.Version.Version;
+import net.ME1312.SubServers.Client.Bukkit.Network.PacketIn;
+import net.ME1312.SubServers.Client.Bukkit.Network.PacketOut;
+import org.json.JSONObject;
+
+import java.util.HashMap;
+import java.util.UUID;
+
+/**
+ * Download Proxy Info Packet
+ */
+public class PacketDownloadProxyInfo implements PacketIn, PacketOut {
+ private static HashMap callbacks = new HashMap();
+ private String id;
+ /**
+ * New PacketDownloadProxyInfo
+ *
+ * @param callback Callbacks
+ */
+ public PacketDownloadProxyInfo(JSONCallback... callback) {
+ if (Util.isNull((Object) callback)) throw new NullPointerException();
+ this.id = Util.getNew(callbacks.keySet(), UUID::randomUUID).toString();
+ callbacks.put(id, callback);
+ }
+
+ @Override
+ public JSONObject generate() {
+ JSONObject json = new JSONObject();
+ json.put("id", id);
+ return json;
+ }
+
+ @Override
+ public void execute(JSONObject data) {
+ for (JSONCallback callback : callbacks.get(data.getString("id"))) callback.run(data);
+ callbacks.remove(data.getString("id"));
+ }
+
+ @Override
+ public Version getVersion() {
+ return new Version("2.11.0a");
+ }
+}
diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/SubDataClient.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/SubDataClient.java
index 51db51bd..80365fb8 100644
--- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/SubDataClient.java
+++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/SubDataClient.java
@@ -89,6 +89,7 @@ public final class SubDataClient {
registerPacket(new PacketDownloadLang(plugin), "SubDownloadLang");
registerPacket(new PacketDownloadNetworkList(), "SubDownloadNetworkList");
registerPacket(new PacketDownloadPlayerList(), "SubDownloadPlayerList");
+ registerPacket(new PacketDownloadProxyInfo(), "SubDownloadProxyInfo");
registerPacket(new PacketDownloadServerInfo(), "SubDownloadServerInfo");
registerPacket(new PacketDownloadServerList(), "SubDownloadServerList");
registerPacket(new PacketInRunEvent(plugin), "SubRunEvent");
@@ -104,6 +105,7 @@ public final class SubDataClient {
registerPacket(PacketDownloadLang.class, "SubDownloadLang");
registerPacket(PacketDownloadNetworkList.class, "SubDownloadNetworkList");
registerPacket(PacketDownloadPlayerList.class, "SubDownloadPlayerList");
+ registerPacket(PacketDownloadProxyInfo.class, "SubDownloadProxyInfo");
registerPacket(PacketDownloadServerInfo.class, "SubDownloadServerInfo");
registerPacket(PacketDownloadServerList.class, "SubDownloadServerList");
registerPacket(PacketLinkServer.class, "SubLinkServer");
@@ -402,7 +404,6 @@ public final class SubDataClient {
}
}, reconnect * 20);
}
- plugin.subdata = null;
}
}
}
diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubCommand.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubCommand.java
index b6c65604..841f5d85 100644
--- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubCommand.java
+++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubCommand.java
@@ -26,7 +26,7 @@ import java.nio.charset.Charset;
import java.text.DecimalFormat;
import java.util.*;
-public final class SubCommand implements CommandExecutor {
+public final class SubCommand implements CommandExecutor{
private SubPlugin plugin;
public SubCommand(SubPlugin plugin) {
diff --git a/SubServers.Host/src.jar b/SubServers.Host/src.jar
index bb4ab801..09da4ff7 100644
Binary files a/SubServers.Host/src.jar and b/SubServers.Host/src.jar differ
diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketDownloadProxyInfo.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketDownloadProxyInfo.java
new file mode 100644
index 00000000..276b69f9
--- /dev/null
+++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketDownloadProxyInfo.java
@@ -0,0 +1,48 @@
+package net.ME1312.SubServers.Host.Network.Packet;
+
+import net.ME1312.SubServers.Host.Library.JSONCallback;
+import net.ME1312.SubServers.Host.Library.Util;
+import net.ME1312.SubServers.Host.Library.Version.Version;
+import net.ME1312.SubServers.Host.Network.PacketIn;
+import net.ME1312.SubServers.Host.Network.PacketOut;
+import org.json.JSONObject;
+
+import java.util.HashMap;
+import java.util.UUID;
+
+/**
+ * Download Proxy Info Packet
+ */
+public class PacketDownloadProxyInfo implements PacketIn, PacketOut {
+ private static HashMap callbacks = new HashMap();
+ private String id;
+
+ /**
+ * New PacketDownloadProxyInfo
+ *
+ * @param callback Callbacks
+ */
+ public PacketDownloadProxyInfo(JSONCallback... callback) {
+ if (Util.isNull((Object) callback)) throw new NullPointerException();
+ this.id = Util.getNew(callbacks.keySet(), UUID::randomUUID).toString();
+ callbacks.put(id, callback);
+ }
+
+ @Override
+ public JSONObject generate() {
+ JSONObject json = new JSONObject();
+ json.put("id", id);
+ return json;
+ }
+
+ @Override
+ public void execute(JSONObject data) {
+ for (JSONCallback callback : callbacks.get(data.getString("id"))) callback.run(data);
+ callbacks.remove(data.getString("id"));
+ }
+
+ @Override
+ public Version getVersion() {
+ return new Version("2.11.0a");
+ }
+}
diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketExAddServer.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketExAddServer.java
index 8bff69e3..f3806c01 100644
--- a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketExAddServer.java
+++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketExAddServer.java
@@ -72,7 +72,7 @@ public class PacketExAddServer implements PacketIn, PacketOut {
SubServer server = new SubServer(host, data.getJSONObject("server").getString("name"), data.getJSONObject("server").getBoolean("enabled"), data.getJSONObject("server").getBoolean("log"),
data.getJSONObject("server").getString("dir"), new Executable(data.getJSONObject("server").getString("exec")), data.getJSONObject("server").getString("stopcmd"));
host.servers.put(data.getJSONObject("server").getString("name").toLowerCase(), server);
- log.info.println("Added Server - " + data.getJSONObject("server").getString("name"));
+ log.info.println("Added SubServer: " + data.getJSONObject("server").getString("name"));
if (data.getJSONObject("server").keySet().contains("running")) server.start(UUID.fromString(data.getJSONObject("server").getString("running")));
host.subdata.sendPacket(new PacketExAddServer(0, "Server Added Successfully", (data.keySet().contains("id"))?data.getString("id"):null));
}
diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketExDeleteServer.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketExDeleteServer.java
index c9264755..6cd5d447 100644
--- a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketExDeleteServer.java
+++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketExDeleteServer.java
@@ -102,7 +102,7 @@ public class PacketExDeleteServer implements PacketIn, PacketOut {
} catch (Exception e) {
e.printStackTrace();
}
- log.info.println("Deleted Server - " + data.getString("server"));
+ log.info.println("Deleted SubServer: " + data.getString("server"));
host.subdata.sendPacket(new PacketExDeleteServer(0, "Server Deleted Successfully", (data.keySet().contains("id"))?data.getString("id"):null));
}).start();
}
diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketExRemoveServer.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketExRemoveServer.java
index c2a6c381..10f9af93 100644
--- a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketExRemoveServer.java
+++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketExRemoveServer.java
@@ -69,7 +69,7 @@ public class PacketExRemoveServer implements PacketIn, PacketOut {
host.subdata.sendPacket(new PacketExRemoveServer(2, "That server is still running.", (data.keySet().contains("id"))?data.getString("id"):null));
} else {
host.servers.remove(data.getString("server").toLowerCase());
- log.info.println("Removed Server - " + data.getString("server"));
+ log.info.println("Removed SubServer: " + data.getString("server"));
host.subdata.sendPacket(new PacketExRemoveServer(0, "Server Removed Successfully", (data.keySet().contains("id"))?data.getString("id"):null));
}
} catch (Throwable e) {
diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/SubDataClient.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/SubDataClient.java
index b8c92b56..7cb2f267 100644
--- a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/SubDataClient.java
+++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/SubDataClient.java
@@ -97,6 +97,7 @@ public final class SubDataClient {
registerPacket(new PacketDownloadLang(host), "SubDownloadLang");
registerPacket(new PacketDownloadNetworkList(), "SubDownloadNetworkList");
registerPacket(new PacketDownloadPlayerList(), "SubDownloadPlayerList");
+ registerPacket(new PacketDownloadProxyInfo(), "SubDownloadProxyInfo");
registerPacket(new PacketDownloadServerInfo(), "SubDownloadServerInfo");
registerPacket(new PacketDownloadServerList(), "SubDownloadServerList");
registerPacket(new PacketExAddServer(host), "SubExAddServer");
@@ -119,6 +120,7 @@ public final class SubDataClient {
registerPacket(PacketDownloadLang.class, "SubDownloadLang");
registerPacket(PacketDownloadNetworkList.class, "SubDownloadNetworkList");
registerPacket(PacketDownloadPlayerList.class, "SubDownloadPlayerList");
+ registerPacket(PacketDownloadProxyInfo.class, "SubDownloadProxyInfo");
registerPacket(PacketDownloadServerInfo.class, "SubDownloadServerInfo");
registerPacket(PacketDownloadServerList.class, "SubDownloadServerList");
registerPacket(PacketExAddServer.class, "SubExAddServer");
@@ -423,7 +425,6 @@ public final class SubDataClient {
}
}, TimeUnit.SECONDS.toMillis(reconnect), TimeUnit.SECONDS.toMillis(reconnect));
}
- host.subdata = null;
}
}
}
diff --git a/SubServers.Sync/src.jar b/SubServers.Sync/src.jar
index 7b68b5af..ceeb70c1 100644
Binary files a/SubServers.Sync/src.jar and b/SubServers.Sync/src.jar differ
diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketDownloadProxyInfo.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketDownloadProxyInfo.java
new file mode 100644
index 00000000..3c4fa34b
--- /dev/null
+++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketDownloadProxyInfo.java
@@ -0,0 +1,48 @@
+package net.ME1312.SubServers.Sync.Network.Packet;
+
+import net.ME1312.SubServers.Sync.Library.JSONCallback;
+import net.ME1312.SubServers.Sync.Library.Util;
+import net.ME1312.SubServers.Sync.Library.Version.Version;
+import net.ME1312.SubServers.Sync.Network.PacketIn;
+import net.ME1312.SubServers.Sync.Network.PacketOut;
+import org.json.JSONObject;
+
+import java.util.HashMap;
+import java.util.UUID;
+
+/**
+ * Download Proxy Info Packet
+ */
+public class PacketDownloadProxyInfo implements PacketIn, PacketOut {
+ private static HashMap callbacks = new HashMap();
+ private String id;
+
+ /**
+ * New PacketDownloadProxyInfo
+ *
+ * @param callback Callbacks
+ */
+ public PacketDownloadProxyInfo(JSONCallback... callback) {
+ if (Util.isNull((Object) callback)) throw new NullPointerException();
+ this.id = Util.getNew(callbacks.keySet(), UUID::randomUUID).toString();
+ callbacks.put(id, callback);
+ }
+
+ @Override
+ public JSONObject generate() {
+ JSONObject json = new JSONObject();
+ json.put("id", id);
+ return json;
+ }
+
+ @Override
+ public void execute(JSONObject data) {
+ for (JSONCallback callback : callbacks.get(data.getString("id"))) callback.run(data);
+ callbacks.remove(data.getString("id"));
+ }
+
+ @Override
+ public Version getVersion() {
+ return new Version("2.11.0a");
+ }
+}
diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/SubDataClient.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/SubDataClient.java
index 50964ff3..61ebec29 100644
--- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/SubDataClient.java
+++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/SubDataClient.java
@@ -72,24 +72,21 @@ public final class SubDataClient {
private void init() {
plugin.subdata.sendPacket(new PacketDownloadLang(plugin));
- plugin.subdata.sendPacket(new PacketDownloadServerList(null, json -> {
- System.out.println("SubServers > Resetting Server Data");
- plugin.servers.clear();
+ plugin.subdata.sendPacket(new PacketDownloadProxyInfo(proxy -> plugin.subdata.sendPacket(new PacketDownloadServerList(null, json -> {
+ if (plugin.lastReload != proxy.getJSONObject("subservers").getLong("last-reload")) {
+ System.out.println("SubServers > Resetting Server Data");
+ plugin.servers.clear();
+ plugin.lastReload = proxy.getJSONObject("subservers").getLong("last-reload");
+ }
for (String host : json.getJSONObject("hosts").keySet()) {
for (String subserver : json.getJSONObject("hosts").getJSONObject(host).getJSONObject("servers").keySet()) {
- plugin.servers.put(subserver.toLowerCase(), new SubServer(subserver, json.getJSONObject("hosts").getJSONObject(host).getJSONObject("servers").getJSONObject(subserver).getString("display"),
- new InetSocketAddress(json.getJSONObject("hosts").getJSONObject(host).getJSONObject("servers").getJSONObject(subserver).getString("address").split(":")[0], Integer.parseInt(json.getJSONObject("hosts").getJSONObject(host).getJSONObject("servers").getJSONObject(subserver).getString("address").split(":")[1])),
- json.getJSONObject("hosts").getJSONObject(host).getJSONObject("servers").getJSONObject(subserver).getString("motd"), json.getJSONObject("hosts").getJSONObject(host).getJSONObject("servers").getJSONObject(subserver).getBoolean("hidden"),
- json.getJSONObject("hosts").getJSONObject(host).getJSONObject("servers").getJSONObject(subserver).getBoolean("restricted"), json.getJSONObject("hosts").getJSONObject(host).getJSONObject("servers").getJSONObject(subserver).getBoolean("running")));
- System.out.println("SubServers > Added SubServer: " + subserver);
+ plugin.merge(subserver, json.getJSONObject("hosts").getJSONObject(host).getJSONObject("servers").getJSONObject(subserver), true);
}
}
for (String server : json.getJSONObject("servers").keySet()) {
- plugin.servers.put(server.toLowerCase(), new Server(server, json.getJSONObject("servers").getJSONObject(server).getString("display"), new InetSocketAddress(json.getJSONObject("servers").getJSONObject(server).getString("address").split(":")[0], Integer.parseInt(json.getJSONObject("servers").getJSONObject(server).getString("address").split(":")[1])),
- json.getJSONObject("servers").getJSONObject(server).getString("motd"), json.getJSONObject("servers").getJSONObject(server).getBoolean("hidden"), json.getJSONObject("servers").getJSONObject(server).getBoolean("restricted")));
- System.out.println("SubServers > Added Server: " + server);
+ plugin.merge(server, json.getJSONObject("servers").getJSONObject(server), false);
}
- }));
+ }))));
while (queue.size() != 0) {
sendPacket(queue.get(0));
queue.remove(0);
@@ -108,6 +105,7 @@ public final class SubDataClient {
registerPacket(new PacketDownloadLang(plugin), "SubDownloadLang");
registerPacket(new PacketDownloadNetworkList(), "SubDownloadNetworkList");
registerPacket(new PacketDownloadPlayerList(), "SubDownloadPlayerList");
+ registerPacket(new PacketDownloadProxyInfo(), "SubDownloadProxyInfo");
registerPacket(new PacketDownloadServerInfo(), "SubDownloadServerInfo");
registerPacket(new PacketDownloadServerList(), "SubDownloadServerList");
registerPacket(new PacketInRunEvent(), "SubRunEvent");
@@ -122,6 +120,7 @@ public final class SubDataClient {
registerPacket(PacketDownloadLang.class, "SubDownloadLang");
registerPacket(PacketDownloadNetworkList.class, "SubDownloadNetworkList");
registerPacket(PacketDownloadPlayerList.class, "SubDownloadPlayerList");
+ registerPacket(PacketDownloadProxyInfo.class, "SubDownloadProxyInfo");
registerPacket(PacketDownloadServerInfo.class, "SubDownloadServerInfo");
registerPacket(PacketDownloadServerList.class, "SubDownloadServerList");
registerPacket(PacketStartServer.class, "SubStartServer");
@@ -408,7 +407,6 @@ public final class SubDataClient {
}
}, TimeUnit.SECONDS.toMillis(reconnect), TimeUnit.SECONDS.toMillis(reconnect));
}
- plugin.subdata = null;
}
}
}
diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Server/Server.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Server/Server.java
index 79e20e39..70b7aa4a 100644
--- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Server/Server.java
+++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Server/Server.java
@@ -10,14 +10,16 @@ import java.net.InetSocketAddress;
* Server Class
*/
public class Server extends BungeeServerInfo {
+ private final String signature;
private String nick = null;
private String motd;
private boolean restricted;
private boolean hidden;
- public Server(String name, String display, InetSocketAddress address, String motd, boolean hidden, boolean restricted) {
+ public Server(String signature, String name, String display, InetSocketAddress address, String motd, boolean hidden, boolean restricted) {
super(name, address, ChatColor.translateAlternateColorCodes('&', motd), restricted);
if (Util.isNull(name, address, motd, hidden, restricted)) throw new NullPointerException();
+ this.signature = signature;
this.motd = motd;
this.restricted = restricted;
this.hidden = hidden;
@@ -104,4 +106,13 @@ public class Server extends BungeeServerInfo {
if (Util.isNull(value)) throw new NullPointerException();
this.restricted = value;
}
+
+ /**
+ * Get the Signature of this Object
+ *
+ * @return Object Signature
+ */
+ public final String getSignature() {
+ return signature;
+ }
}
diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Server/SubServer.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Server/SubServer.java
index 8ca0ea5c..c8ad0e72 100644
--- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Server/SubServer.java
+++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Server/SubServer.java
@@ -8,8 +8,8 @@ import java.net.InetSocketAddress;
public class SubServer extends Server {
private boolean running;
- public SubServer(String name, String display, InetSocketAddress address, String motd, boolean hidden, boolean restricted, boolean running) {
- super(name, display, address, motd, hidden, restricted);
+ public SubServer(String signature, String name, String display, InetSocketAddress address, String motd, boolean hidden, boolean restricted, boolean running) {
+ super(signature, name, display, address, motd, hidden, restricted);
this.running = running;
}
diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubPlugin.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubPlugin.java
index 207854c7..7fd641e1 100644
--- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubPlugin.java
+++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubPlugin.java
@@ -17,6 +17,7 @@ import net.md_5.bungee.api.config.ServerInfo;
import net.md_5.bungee.api.event.ServerConnectEvent;
import net.md_5.bungee.api.plugin.Listener;
import net.md_5.bungee.event.EventHandler;
+import org.json.JSONObject;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
@@ -44,11 +45,13 @@ public final class SubPlugin extends BungeeCord implements Listener {
public YAMLConfig config;
public YAMLSection lang = null;
public boolean redis = false;
+ public final SubAPI api = new SubAPI(this);
public SubDataClient subdata = null;
public final Version version = new Version(SubPlugin.class.getPackage().getImplementationVersion());
public final Version bversion = (SubPlugin.class.getPackage().getSpecificationVersion().equals("0"))?null:new Version(SubPlugin.class.getPackage().getSpecificationVersion());
- public final SubAPI api = new SubAPI(this);
+
+ public long lastReload = -1;
private boolean posted = false;
protected SubPlugin(PrintStream out) throws IOException {
@@ -243,11 +246,11 @@ public final class SubPlugin extends BungeeCord implements Listener {
System.out.println("PacketDownloadServerInfo(" + e.getServer() + ") returned with an invalid response");
break;
case "subserver":
- servers.put(json.getJSONObject("server").getString("name").toLowerCase(), new SubServer(json.getJSONObject("server").getString("name"), json.getJSONObject("server").getString("display"), new InetSocketAddress(json.getJSONObject("server").getString("address").split(":")[0], Integer.parseInt(json.getJSONObject("server").getString("address").split(":")[1])), json.getJSONObject("server").getString("motd"), json.getJSONObject("server").getBoolean("hidden"), json.getJSONObject("server").getBoolean("restricted"), json.getJSONObject("server").getBoolean("running")));
+ servers.put(json.getJSONObject("server").getString("name").toLowerCase(), new SubServer(json.getJSONObject("server").getString("signature"), json.getJSONObject("server").getString("name"), json.getJSONObject("server").getString("display"), new InetSocketAddress(json.getJSONObject("server").getString("address").split(":")[0], Integer.parseInt(json.getJSONObject("server").getString("address").split(":")[1])), json.getJSONObject("server").getString("motd"), json.getJSONObject("server").getBoolean("hidden"), json.getJSONObject("server").getBoolean("restricted"), json.getJSONObject("server").getBoolean("running")));
System.out.println("SubServers > Added SubServer: " + e.getServer());
break;
default:
- servers.put(json.getJSONObject("server").getString("name").toLowerCase(), new Server(json.getJSONObject("server").getString("name"), json.getJSONObject("server").getString("display"), new InetSocketAddress(json.getJSONObject("server").getString("address").split(":")[0], Integer.parseInt(json.getJSONObject("server").getString("address").split(":")[1])), json.getJSONObject("server").getString("motd"), json.getJSONObject("server").getBoolean("hidden"), json.getJSONObject("server").getBoolean("restricted")));
+ servers.put(json.getJSONObject("server").getString("name").toLowerCase(), new Server(json.getJSONObject("server").getString("signature"), json.getJSONObject("server").getString("name"), json.getJSONObject("server").getString("display"), new InetSocketAddress(json.getJSONObject("server").getString("address").split(":")[0], Integer.parseInt(json.getJSONObject("server").getString("address").split(":")[1])), json.getJSONObject("server").getString("motd"), json.getJSONObject("server").getBoolean("hidden"), json.getJSONObject("server").getBoolean("restricted")));
System.out.println("SubServers > Added Server: " + e.getServer());
break;
}
@@ -260,6 +263,41 @@ public final class SubPlugin extends BungeeCord implements Listener {
((SubServer) servers.get(e.getServer().toLowerCase())).setRunning(true);
}
+ public Boolean merge(String name, JSONObject json, boolean isSubServer) {
+ Server server = api.getServer(name);
+ if (server == null || isSubServer || !(server instanceof SubServer)) {
+ if (server == null || !server.getSignature().equals(json.getString("signature"))) {
+ if (isSubServer) {
+ servers.put(name.toLowerCase(), new SubServer(json.getString("signature"), name, json.getString("display"), new InetSocketAddress(json.getString("address").split(":")[0],
+ Integer.parseInt(json.getString("address").split(":")[1])), json.getString("motd"), json.getBoolean("hidden"), json.getBoolean("restricted"), json.getBoolean("running")));
+ } else {
+ servers.put(name.toLowerCase(), new Server(json.getString("signature"), name, json.getString("display"), new InetSocketAddress(json.getString("address").split(":")[0],
+ Integer.parseInt(json.getString("address").split(":")[1])), json.getString("motd"), json.getBoolean("hidden"), json.getBoolean("restricted")));
+ }
+
+ System.out.println("SubServers > Added "+((isSubServer)?"Sub":"")+"Server: " + name);
+ return true;
+ } else {
+ if (isSubServer) {
+ if (json.getBoolean("running") != ((SubServer) server).isRunning())
+ ((SubServer) server).setRunning(json.getBoolean("running"));
+ }
+ if (!json.getString("motd").equals(server.getMotd()))
+ server.setMotd(json.getString("motd"));
+ if (json.getBoolean("hidden") != server.isHidden())
+ server.setHidden(json.getBoolean("hidden"));
+ if (json.getBoolean("restricted") != server.isRestricted())
+ server.setRestricted(json.getBoolean("restricted"));
+ if (!json.getString("display").equals(server.getDisplayName()))
+ server.setDisplayName(json.getString("display"));
+
+ System.out.println("SubServers > Re-added "+((isSubServer)?"Sub":"")+"Server: " + name);
+ return false;
+ }
+ }
+ return null;
+ }
+
@EventHandler(priority = Byte.MIN_VALUE)
public void edit(SubEditServerEvent e) {
if (servers.keySet().contains(e.getServer().toLowerCase())) {
|