From 81d37b8b1e2211ef2e150d529d3a800a1c2b73a5 Mon Sep 17 00:00:00 2001 From: ME1312 Date: Thu, 29 Aug 2019 20:01:52 -0400 Subject: [PATCH] Reduce dependance on SubServers.Bungee SubServers.Host can now seamlessly reconnect to SubServers.Bungee, even if it's been restarted, without restarting uneffected servers. Also, you can now shutdown SubServers.Bungee without turning off remote servers. Isn't that neat? --- .../Bungee/Host/External/ExternalHost.java | 19 +++++-- .../Host/External/ExternalSubServer.java | 10 ++-- .../ME1312/SubServers/Bungee/Host/Host.java | 27 ++++++++-- .../Network/Packet/PacketExEditServer.java | 4 +- .../net/ME1312/SubServers/Bungee/SubAPI.java | 28 ++--------- .../net/ME1312/SubServers/Host/ExHost.java | 8 +-- .../Host/Executable/SubCreator.java | 4 +- .../SubServers/Host/Executable/SubLogger.java | 48 +++++++++++++++++- .../{SubServer.java => SubServerImpl.java} | 17 +++++-- .../Network/Packet/PacketExAddServer.java | 48 +++++++++++++++--- .../Network/Packet/PacketExCreateServer.java | 2 +- .../Network/Packet/PacketExDeleteServer.java | 5 +- .../Network/Packet/PacketExEditServer.java | 15 +++--- .../Host/Network/Packet/PacketInExReset.java | 4 +- .../SubServers/Host/Network/SubProtocol.java | 3 +- .../Fallback/SmartReconnectHandler.java | 17 +++---- .../{ServerContainer.java => ServerImpl.java} | 4 +- ...erverContainer.java => SubServerImpl.java} | 4 +- .../ME1312/SubServers/Sync/SubCommand.java | 50 +++++++++---------- .../net/ME1312/SubServers/Sync/SubPlugin.java | 44 ++++++++-------- 20 files changed, 234 insertions(+), 127 deletions(-) rename SubServers.Host/src/net/ME1312/SubServers/Host/Executable/{SubServer.java => SubServerImpl.java} (94%) rename SubServers.Sync/src/net/ME1312/SubServers/Sync/Server/{ServerContainer.java => ServerImpl.java} (94%) rename SubServers.Sync/src/net/ME1312/SubServers/Sync/Server/{SubServerContainer.java => SubServerImpl.java} (70%) 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 6907d9e2..935c1642 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 @@ -19,6 +19,7 @@ import net.ME1312.SubServers.Bungee.Network.Packet.PacketExDeleteServer; import net.ME1312.SubServers.Bungee.Network.Packet.PacketExRemoveServer; import net.ME1312.SubServers.Bungee.Network.Packet.PacketOutExReset; import net.ME1312.SubServers.Bungee.SubPlugin; +import net.md_5.bungee.BungeeCord; import java.net.InetAddress; import java.util.*; @@ -106,7 +107,9 @@ public class ExternalHost extends Host implements ClientHandler { clean = true; } for (SubServer server : servers.values()) { - client.sendPacket(new PacketExAddServer(server.getName(), server.isEnabled(), server.getAddress().getPort(), server.isLogging(), server.getPath(), ((ExternalSubServer) server).exec, server.getStopCommand(), (server.isRunning())?((ExternalSubLogger) server.getLogger()).getExternalAddress():null)); + client.sendPacket(new PacketExAddServer(server.getName(), server.isEnabled(), server.getAddress().getPort(), server.isLogging(), server.getPath(), ((ExternalSubServer) server).exec, server.getStopCommand(), (server.isRunning())?((ExternalSubLogger) server.getLogger()).getExternalAddress():null, data -> { + if (data.contains(0x0002)) ((ExternalSubServer) server).started(data.getUUID(0x0002)); + })); } while (queue.size() != 0) { client.sendPacket(queue.get(0)); @@ -164,11 +167,13 @@ public class ExternalHost extends Host implements ClientHandler { @Override public SubServer addSubServer(UUID player, String name, boolean enabled, int port, String motd, boolean log, String directory, String executable, String stopcmd, boolean hidden, boolean restricted) throws InvalidServerException { if (plugin.api.getServers().keySet().contains(name.toLowerCase())) throw new InvalidServerException("A Server already exists with this name!"); - SubServer server = new ExternalSubServer(this, name, enabled, port, motd, log, directory, executable, stopcmd, hidden, restricted); + ExternalSubServer server = new ExternalSubServer(this, name, enabled, port, motd, log, directory, executable, stopcmd, hidden, restricted); SubAddServerEvent event = new SubAddServerEvent(player, this, server); plugin.getPluginManager().callEvent(event); if (!event.isCancelled()) { - queue(new PacketExAddServer(name, enabled, port, log, directory, executable, stopcmd, (server.isRunning())?((ExternalSubLogger) server.getLogger()).getExternalAddress():null)); + queue(new PacketExAddServer(name, enabled, port, log, directory, executable, stopcmd, (server.isRunning())?((ExternalSubLogger) server.getLogger()).getExternalAddress():null, data -> { + if (data.contains(0x0002)) server.started(data.getUUID(0x0002)); + })); servers.put(name.toLowerCase(), server); return server; } else { @@ -367,6 +372,14 @@ public class ExternalHost extends Host implements ClientHandler { return true; } + @Override + public boolean destroy() { + if (Util.getDespiteException(() -> Util.reflect(BungeeCord.class.getDeclaredField("isRunning"), plugin), true)) { + return super.destroy(); + } + return true; + } + @Override public ObjectMap forSubData() { ObjectMap hinfo = super.forSubData(); 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 e9c4deb9..e8d0fac4 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 @@ -79,14 +79,18 @@ public class ExternalSubServer extends SubServerContainer { lock = false; if (!event.isCancelled()) { Logger.get("SubServers").info("Now starting " + getName()); - started = false; - running = true; - logger.start(); + started(null); host.queue(new PacketExEditServer(this, PacketExEditServer.UpdateType.START, logger.getExternalAddress().toString())); return true; } else return false; } else return false; } + void started(UUID address) { + started = false; + running = true; + logger.start(); + if (address != null && address != logger.getExternalAddress()) host.queue(new PacketExEditServer(this, PacketExEditServer.UpdateType.SET_LOGGING_ADDRESS, logger.getExternalAddress().toString())); + } private void falsestart() { Logger.get("SubServers").info("Couldn't start " + getName() + " - See the " + host.getName() + " console for more details"); running = false; 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 b375171b..81001520 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Host.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Host.java @@ -13,9 +13,7 @@ import net.ME1312.SubServers.Bungee.SubAPI; import net.ME1312.SubServers.Bungee.SubPlugin; import java.net.InetAddress; -import java.util.LinkedList; -import java.util.Map; -import java.util.UUID; +import java.util.*; /** * Host Layout Class @@ -390,6 +388,29 @@ public abstract class Host implements ExtraDataHandler { */ public abstract boolean forceDeleteSubServer(UUID player, String name) throws InterruptedException; + /** + * Resets this Host object + * + * @return Success Status + */ + public boolean destroy() { + try { + List subservers = new ArrayList(); + subservers.addAll(getSubServers().keySet()); + + for (String server : subservers) { + forceRemoveSubServer(server); + } + subservers.clear(); + getCreator().terminate(); + getCreator().waitFor(); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + /** * Get the Signature of this Object * diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExEditServer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExEditServer.java index bf2c7fab..a5c278cd 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExEditServer.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExEditServer.java @@ -11,6 +11,7 @@ import net.ME1312.SubData.Server.Protocol.PacketObjectIn; import net.ME1312.SubServers.Bungee.SubPlugin; import java.util.Arrays; +import java.util.UUID; /** * Edit External Server Packet @@ -31,7 +32,8 @@ public class PacketExEditServer implements PacketObjectIn, PacketObject // Data Manipulation SET_ENABLED(0, Boolean.class), SET_LOGGING(5, Boolean.class), - SET_STOP_COMMAND(6, String.class); + SET_LOGGING_ADDRESS(6, String.class), + SET_STOP_COMMAND(7, String.class); private short value; private Class[] args; diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubAPI.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubAPI.java index 46bec143..5230486b 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubAPI.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubAPI.java @@ -272,20 +272,10 @@ public final class SubAPI { SubRemoveHostEvent event = new SubRemoveHostEvent(player, getHost(name)); plugin.getPluginManager().callEvent(event); if (event.isCancelled()) { - try { - List subservers = new ArrayList(); - subservers.addAll(getHost(name).getSubServers().keySet()); - - for (String server : subservers) { - getHost(name).removeSubServer(server); - } - subservers.clear(); - getHost(name).getCreator().terminate(); - getHost(name).getCreator().waitFor(); + if (getHost(name).destroy()) { plugin.hosts.remove(name.toLowerCase()); return true; - } catch (Exception e) { - e.printStackTrace(); + } else { return false; } } else return false; @@ -312,20 +302,10 @@ public final class SubAPI { if (Util.isNull(name, getHost(name))) throw new NullPointerException(); SubRemoveHostEvent event = new SubRemoveHostEvent(player, getHost(name)); plugin.getPluginManager().callEvent(event); - try { - List subservers = new ArrayList(); - subservers.addAll(getHost(name).getSubServers().keySet()); - - for (String server : subservers) { - getHost(name).removeSubServer(server); - } - subservers.clear(); - getHost(name).getCreator().terminate(); - getHost(name).getCreator().waitFor(); + if (getHost(name).destroy()) { plugin.hosts.remove(name.toLowerCase()); return true; - } catch (Exception e) { - e.printStackTrace(); + } else { return false; } } diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/ExHost.java b/SubServers.Host/src/net/ME1312/SubServers/Host/ExHost.java index c3197bcd..8c9f0203 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/ExHost.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/ExHost.java @@ -2,9 +2,7 @@ package net.ME1312.SubServers.Host; import com.dosse.upnp.UPnP; import net.ME1312.Galaxi.Engine.GalaxiEngine; -import net.ME1312.Galaxi.Engine.GalaxiOption; import net.ME1312.Galaxi.Event.GalaxiReloadEvent; -import net.ME1312.Galaxi.Galaxi; import net.ME1312.Galaxi.Library.Config.YAMLConfig; import net.ME1312.Galaxi.Library.Config.YAMLSection; import net.ME1312.Galaxi.Library.Map.ObjectMap; @@ -18,18 +16,16 @@ import net.ME1312.Galaxi.Plugin.App; import net.ME1312.Galaxi.Plugin.PluginInfo; import net.ME1312.SubData.Client.Encryption.AES; import net.ME1312.SubData.Client.Encryption.RSA; -import net.ME1312.SubData.Client.Protocol.PacketObjectIn; import net.ME1312.SubData.Client.SubDataClient; import net.ME1312.SubServers.Host.Executable.SubCreator; import net.ME1312.SubServers.Host.Executable.SubLogger; -import net.ME1312.SubServers.Host.Executable.SubServer; +import net.ME1312.SubServers.Host.Executable.SubServerImpl; import net.ME1312.SubServers.Host.Library.*; import net.ME1312.SubServers.Host.Library.Updates.ConfigUpdater; import net.ME1312.SubServers.Host.Network.SubProtocol; import org.json.JSONObject; import java.io.*; -import java.lang.reflect.Field; import java.net.InetAddress; import java.net.URL; import java.nio.charset.Charset; @@ -46,7 +42,7 @@ public final class ExHost { HashMap subdata = new HashMap(); NamedContainer>> lang = null; public HashMap templates = new HashMap(); - public HashMap servers = new HashMap(); + public HashMap servers = new HashMap(); public SubCreator creator; public Logger log; diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/SubCreator.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/SubCreator.java index 3fd19650..267cd4fc 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/SubCreator.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/SubCreator.java @@ -196,7 +196,7 @@ public class SubCreator { } private class CreatorTask extends Thread { - private final SubServer update; + private final SubServerImpl update; private final String name; private final ServerTemplate template; private final Version version; @@ -214,7 +214,7 @@ public class SubCreator { this.template = template; this.version = version; this.port = port; - this.dir = new File(host.host.getRawString("Directory"), dir.replace("$address$", host.config.get().getMap("Settings").getRawString("Server-Bind"))); + this.dir = new File(host.host.getRawString("Directory"), dir); this.log = new SubLogger(null, this, name + File.separator + ((update == null)?"Creator":"Updater"), address, new Container(true), null); this.address = address; this.tracker = tracker; diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/SubLogger.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/SubLogger.java index f2349c39..390470c0 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/SubLogger.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/SubLogger.java @@ -1,17 +1,25 @@ package net.ME1312.SubServers.Host.Executable; +import net.ME1312.Galaxi.Library.Callback.Callback; +import net.ME1312.Galaxi.Library.Callback.ReturnCallback; import net.ME1312.Galaxi.Library.Map.ObjectMap; import net.ME1312.Galaxi.Library.Container; import net.ME1312.Galaxi.Library.Log.LogStream; import net.ME1312.Galaxi.Library.Log.Logger; +import net.ME1312.Galaxi.Library.NamedContainer; import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Client.DataClient; +import net.ME1312.SubData.Client.Library.DisconnectReason; import net.ME1312.SubData.Client.SubDataClient; +import net.ME1312.SubServers.Host.ExHost; import net.ME1312.SubServers.Host.Library.TextColor; +import net.ME1312.SubServers.Host.Network.API.Host; import net.ME1312.SubServers.Host.Network.Packet.PacketOutExLogMessage; import net.ME1312.SubServers.Host.SubAPI; import java.io.*; import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -59,7 +67,6 @@ public class SubLogger { */ public void start() { started = true; - if (logn) Util.isException(() -> channel = (SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0].newChannel()); if (file != null && writer == null) { try { this.writer = new PrintWriter(file, "UTF-8"); @@ -69,6 +76,36 @@ public class SubLogger { logger.error.println(e); } } + Process process = this.process; + ExHost host = SubAPI.getInstance().getInternals(); + if (logn) Util.isException(() -> { + channel = (SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0].newChannel(); + channel.on.closed(new Callback>() { + @Override + public void run(NamedContainer client) { + if (started && SubLogger.this.process != null && process == SubLogger.this.process && process.isAlive()) { + int reconnect = host.config.get().getMap("Settings").getMap("SubData").getInt("Reconnect", 30); + if (Util.getDespiteException(() -> Util.reflect(ExHost.class.getDeclaredField("reconnect"), host), false) && reconnect > 0 + && client.name() != DisconnectReason.PROTOCOL_MISMATCH && client.name() != DisconnectReason.ENCRYPTION_MISMATCH) { + Timer timer = new Timer(SubAPI.getInstance().getAppInfo().getName() + "::Log_Reconnect_Handler"); + Callback> run = this; + timer.scheduleAtFixedRate(new TimerTask() { + @Override + public void run() { + if (!started || SubLogger.this.process == null || process != SubLogger.this.process || !process.isAlive()) { + timer.cancel(); + } else try { + channel = (SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0].newChannel(); + channel.on.closed(run); + timer.cancel(); + } catch (NullPointerException | IOException e) {} + } + }, TimeUnit.SECONDS.toMillis(reconnect), TimeUnit.SECONDS.toMillis(reconnect)); + } + } + } + }); + }); if (out == null) (out = new Thread(() -> start(process.getInputStream(), false), SubAPI.getInstance().getAppInfo().getName() + "::Log_Spooler(" + name + ')')).start(); if (err == null) (err = new Thread(() -> start(process.getErrorStream(), true), SubAPI.getInstance().getAppInfo().getName() + "::Error_Spooler(" + name + ')')).start(); } @@ -194,4 +231,13 @@ public class SubLogger { public boolean isLogging() { return log.get(); } + + /** + * Get the Logging Address + * + * @return Address + */ + public UUID getAddress() { + return address; + } } diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/SubServer.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/SubServerImpl.java similarity index 94% rename from SubServers.Host/src/net/ME1312/SubServers/Host/Executable/SubServer.java rename to SubServers.Host/src/net/ME1312/SubServers/Host/Executable/SubServerImpl.java index cc90a688..81d05cdf 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/SubServer.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/SubServerImpl.java @@ -19,7 +19,7 @@ import java.util.jar.JarInputStream; /** * Internal SubServer Class */ -public class SubServer { +public class SubServerImpl { private ExHost host; private String name; private boolean enabled; @@ -48,7 +48,7 @@ public class SubServer { * @param stopcmd Stop Command * @throws InvalidServerException */ - public SubServer(ExHost host, String name, boolean enabled, int port, boolean log, String directory, String executable, String stopcmd) throws InvalidServerException { + public SubServerImpl(ExHost host, String name, boolean enabled, int port, boolean log, String directory, String executable, String stopcmd) throws InvalidServerException { if (Util.isNull(host, name, enabled, log, directory, executable)) throw new NullPointerException(); this.host = host; this.name = name; @@ -133,7 +133,8 @@ public class SubServer { if (falsestart) ((SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0]).sendPacket(new PacketExEditServer(this, PacketExEditServer.UpdateType.LAUNCH_EXCEPTION)); } - ((SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0]).sendPacket(new PacketExEditServer(this, PacketExEditServer.UpdateType.STOPPED, (Integer) process.exitValue(), (Boolean) allowrestart)); + if (SubAPI.getInstance().getSubDataNetwork()[0] != null) + ((SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0]).sendPacket(new PacketExEditServer(this, PacketExEditServer.UpdateType.STOPPED, (Integer) process.exitValue(), (Boolean) allowrestart)); host.log.info.println(name + " has stopped"); process = null; command = null; @@ -159,6 +160,7 @@ public class SubServer { try { allowrestart = false; if (process != null && process.isAlive()) { + System.out.println(stopcmd); command.write(stopcmd); command.newLine(); command.flush(); @@ -289,6 +291,15 @@ public class SubServer { return dir; } + /** + * Get the Server's Executable String + * + * @return Executable String + */ + public String getExecutable() { + return executable; + } + /** * Grab the Command to Stop the Server * 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 03a43731..1bf84d91 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 @@ -6,7 +6,7 @@ import net.ME1312.Galaxi.Library.Util; import net.ME1312.SubData.Client.Protocol.PacketObjectIn; import net.ME1312.SubData.Client.Protocol.PacketObjectOut; import net.ME1312.SubData.Client.SubDataClient; -import net.ME1312.SubServers.Host.Executable.SubServer; +import net.ME1312.SubServers.Host.Executable.SubServerImpl; import net.ME1312.SubServers.Host.ExHost; import java.util.UUID; @@ -18,6 +18,7 @@ import java.util.logging.Logger; public class PacketExAddServer implements PacketObjectIn, PacketObjectOut { private ExHost host; private int response; + private UUID running; private UUID tracker; /** @@ -37,9 +38,20 @@ public class PacketExAddServer implements PacketObjectIn, PacketObjectO * @param tracker Receiver ID */ public PacketExAddServer(int response, UUID tracker) { + this(response, null, tracker); + } + + /** + * New PacketExAddServer (Out) + * + * @param response Response ID + * @param tracker Receiver ID + */ + public PacketExAddServer(int response, UUID running, UUID tracker) { if (Util.isNull(response)) throw new NullPointerException(); this.response = response; this.tracker = tracker; + this.running = running; } @Override @@ -47,6 +59,7 @@ public class PacketExAddServer implements PacketObjectIn, PacketObjectO ObjectMap data = new ObjectMap(); if (tracker != null) data.set(0x0000, tracker); data.set(0x0001, response); + if (running != null) data.set(0x0002, running); return data; } @@ -65,14 +78,25 @@ public class PacketExAddServer implements PacketObjectIn, PacketObjectO UUID running = data.contains(0x0008)?data.getUUID(0x0008):null; if (host.servers.keySet().contains(name.toLowerCase())) { - client.sendPacket(new PacketExAddServer(1, tracker)); + SubServerImpl server = host.servers.get(name.toLowerCase()); + if (server.getPort() == port && server.getExecutable().equals(exec) && server.getDirectory().equals(dir)) { + if (server.isEnabled() != enabled || server.getLogger().isLogging() != log || !server.getStopCommand().equals(stopcmd)) { + server.setEnabled(enabled); + server.setLogging(log); + server.setStopCommand(stopcmd); + logger.info("Re-Added SubServer: " + server.getName()); + } + client.sendPacket(new PacketExAddServer(0, (server.isRunning())?server.getLogger().getAddress():null, tracker)); + } else { + server.stop(); + server.waitFor(); + if (UPnP.isUPnPAvailable() && UPnP.isMappedTCP(server.getPort())) + UPnP.closePortTCP(server.getPort()); + + init(client, server = new SubServerImpl(host, name, enabled, port, log, dir, exec, stopcmd), running, tracker, logger); + } } else { - SubServer server = new SubServer(host, name, enabled, port, log, dir, exec, stopcmd); - host.servers.put(name.toLowerCase(), server); - if (UPnP.isUPnPAvailable() && host.config.get().getMap("Settings").getMap("UPnP", new ObjectMap()).getBoolean("Forward-Servers", false)) UPnP.openPortTCP(server.getPort()); - logger.info("Added SubServer: " + name); - if (running != null) server.start(running); - client.sendPacket(new PacketExAddServer(0, tracker)); + init(client, new SubServerImpl(host, name, enabled, port, log, dir, exec, stopcmd), running, tracker, logger); } } catch (Throwable e) { client.sendPacket(new PacketExAddServer(2, tracker)); @@ -80,6 +104,14 @@ public class PacketExAddServer implements PacketObjectIn, PacketObjectO } } + private void init(SubDataClient client, SubServerImpl server, UUID running, UUID tracker, Logger logger) { + host.servers.put(server.getName().toLowerCase(), server); + if (UPnP.isUPnPAvailable() && host.config.get().getMap("Settings").getMap("UPnP", new ObjectMap()).getBoolean("Forward-Servers", false)) UPnP.openPortTCP(server.getPort()); + logger.info("Added SubServer: " + server.getName()); + if (running != null) server.start(running); + client.sendPacket(new PacketExAddServer(0, tracker)); + } + @Override public int version() { return 0x0001; diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketExCreateServer.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketExCreateServer.java index a47075c8..dd5bbc05 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketExCreateServer.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketExCreateServer.java @@ -90,7 +90,7 @@ public class PacketExCreateServer implements PacketObjectIn, PacketObje String template = data.getRawString(0x0003); Version version = (data.contains(0x0004)?data.getVersion(0x0004):null); Integer port = data.getInt(0x0005); - String dir = data.getRawString(0x0006); + String dir = data.getRawString(0x0006).replace("$address$", host.config.get().getMap("Settings").getRawString("Server-Bind")); UUID log = data.getUUID(0x0007); host.creator.create(name, host.templates.get(template.toLowerCase()), version, 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 7125e2da..ad951485 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 @@ -6,11 +6,10 @@ import net.ME1312.Galaxi.Library.Config.YAMLSection; import net.ME1312.Galaxi.Library.Map.ObjectMap; import net.ME1312.Galaxi.Library.UniversalFile; import net.ME1312.Galaxi.Library.Util; -import net.ME1312.Galaxi.Library.Version.Version; import net.ME1312.SubData.Client.Protocol.PacketObjectIn; import net.ME1312.SubData.Client.Protocol.PacketObjectOut; import net.ME1312.SubData.Client.SubDataClient; -import net.ME1312.SubServers.Host.Executable.SubServer; +import net.ME1312.SubServers.Host.Executable.SubServerImpl; import net.ME1312.SubServers.Host.ExHost; import net.ME1312.SubServers.Host.SubAPI; @@ -73,7 +72,7 @@ public class PacketExDeleteServer implements PacketObjectIn, PacketObje } else if (host.servers.get(name.toLowerCase()).isRunning()) { ((SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0]).sendPacket(new PacketExDeleteServer(3, tracker)); } else { - SubServer server = host.servers.get(name.toLowerCase()); + SubServerImpl server = host.servers.get(name.toLowerCase()); host.servers.remove(name.toLowerCase()); new Thread(() -> { UniversalFile to = new UniversalFile(GalaxiEngine.getInstance().getRuntimeDirectory(), "Recently Deleted:" + server.getName().toLowerCase()); diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketExEditServer.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketExEditServer.java index d1e22cf9..dc09e9ee 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketExEditServer.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketExEditServer.java @@ -1,22 +1,22 @@ package net.ME1312.SubServers.Host.Network.Packet; import net.ME1312.Galaxi.Library.Map.ObjectMap; -import net.ME1312.Galaxi.Library.Version.Version; +import net.ME1312.Galaxi.Library.Util; import net.ME1312.SubData.Client.Protocol.PacketObjectIn; import net.ME1312.SubData.Client.Protocol.PacketObjectOut; import net.ME1312.SubData.Client.SubDataClient; -import net.ME1312.SubServers.Host.Executable.SubServer; +import net.ME1312.SubServers.Host.Executable.SubLogger; +import net.ME1312.SubServers.Host.Executable.SubServerImpl; import net.ME1312.SubServers.Host.ExHost; import java.util.Arrays; -import java.util.UUID; /** * Edit Server Packet */ public class PacketExEditServer implements PacketObjectIn, PacketObjectOut { private ExHost host; - private SubServer server; + private SubServerImpl server; private UpdateType type; private Object[] args; @@ -56,7 +56,7 @@ public class PacketExEditServer implements PacketObjectIn, PacketObject * @param type Update Type * @param arguments Arguments */ - public PacketExEditServer(SubServer server, UpdateType type, Object... arguments) { + public PacketExEditServer(SubServerImpl server, UpdateType type, Object... arguments) { if (arguments.length != type.getArguments().length) throw new IllegalArgumentException(((arguments.length > type.getArguments().length)?"Too many":"Not enough") + " arguments for type: " + type.toString()); int i = 0; while (i < arguments.length) { @@ -80,7 +80,7 @@ public class PacketExEditServer implements PacketObjectIn, PacketObject @Override public void receive(SubDataClient client, ObjectMap data) { try { - SubServer server = host.servers.get(data.getString(0x0000).toLowerCase()); + SubServerImpl server = host.servers.get(data.getString(0x0000).toLowerCase()); switch (data.getInt(0x0001)) { case 0: server.setEnabled(data.getList(0x0002).get(0).asBoolean()); @@ -101,6 +101,9 @@ public class PacketExEditServer implements PacketObjectIn, PacketObject server.setLogging(data.getList(0x0002).get(0).asBoolean()); break; case 6: + Util.reflect(SubLogger.class.getDeclaredField("address"), server.getLogger(), data.getList(0x0002).get(0).asUUID()); + break; + case 7: server.setStopCommand(data.getList(0x0002).get(0).asRawString()); break; } diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketInExReset.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketInExReset.java index 1e83362b..a7705280 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketInExReset.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketInExReset.java @@ -19,7 +19,7 @@ public class PacketInExReset implements PacketObjectIn { } @Override - public void receive(SubDataClient client, ObjectMap data) { + public void receive(SubDataClient client, ObjectMap data) {/* List subservers = new ArrayList(); subservers.addAll(host.servers.keySet()); @@ -32,7 +32,7 @@ public class PacketInExReset implements PacketObjectIn { } } subservers.clear(); - host.servers.clear(); + host.servers.clear(); */ host.creator.terminate(); try { diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/SubProtocol.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/SubProtocol.java index e264a915..69215e70 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/SubProtocol.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/SubProtocol.java @@ -1,6 +1,7 @@ package net.ME1312.SubServers.Host.Network; import net.ME1312.Galaxi.Library.Callback.Callback; +import net.ME1312.Galaxi.Library.Config.YAMLSection; import net.ME1312.Galaxi.Library.Util; import net.ME1312.Galaxi.Library.Version.Version; import net.ME1312.SubData.Client.Library.DisconnectReason; @@ -162,7 +163,7 @@ public class SubProtocol extends SubDataProtocol { map.put(0, null); Logger log = Util.getDespiteException(() -> Util.reflect(SubDataClient.class.getDeclaredField("log"), client.get()), null); - int reconnect = host.config.get().getMap("Settings").getMap("SubData").getInt("Reconnect", 30); + int reconnect = host.config.get().getMap("Settings", new YAMLSection()).getMap("SubData", new YAMLSection()).getInt("Reconnect", 30); if (Util.getDespiteException(() -> Util.reflect(ExHost.class.getDeclaredField("reconnect"), host), false) && reconnect > 0 && client.name() != DisconnectReason.PROTOCOL_MISMATCH && client.name() != DisconnectReason.ENCRYPTION_MISMATCH) { log.info("Attempting reconnect in " + reconnect + " seconds"); diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/Fallback/SmartReconnectHandler.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/Fallback/SmartReconnectHandler.java index 4cb507fb..a107cfa3 100644 --- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/Fallback/SmartReconnectHandler.java +++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/Fallback/SmartReconnectHandler.java @@ -1,8 +1,8 @@ package net.ME1312.SubServers.Sync.Library.Fallback; import net.ME1312.Galaxi.Library.Util; -import net.ME1312.SubServers.Sync.Server.ServerContainer; -import net.ME1312.SubServers.Sync.Server.SubServerContainer; +import net.ME1312.SubServers.Sync.Server.ServerImpl; +import net.ME1312.SubServers.Sync.Server.SubServerImpl; import net.ME1312.SubServers.Sync.SubAPI; import net.md_5.bungee.UserConnection; import net.md_5.bungee.api.AbstractReconnectHandler; @@ -16,7 +16,6 @@ import net.md_5.bungee.api.connection.ProxiedPlayer; import java.lang.reflect.InvocationTargetException; import java.util.*; import java.util.concurrent.CopyOnWriteArrayList; -import java.util.concurrent.LinkedBlockingQueue; /** * Smart Reconnect Handler Class @@ -75,12 +74,12 @@ public class SmartReconnectHandler implements ReconnectHandler { if (server != null) { boolean valid = true; int confidence = 0; - if (server instanceof ServerContainer) { - if (!((ServerContainer) server).isHidden()) confidence++; - if (!((ServerContainer) server).isRestricted()) confidence++; - if (((ServerContainer) server).getSubData()[0] != null) confidence++; - } if (server instanceof SubServerContainer) { - if (!((SubServerContainer) server).isRunning()) valid = false; + if (server instanceof ServerImpl) { + if (!((ServerImpl) server).isHidden()) confidence++; + if (!((ServerImpl) server).isRestricted()) confidence++; + if (((ServerImpl) server).getSubData()[0] != null) confidence++; + } if (server instanceof SubServerImpl) { + if (!((SubServerImpl) server).isRunning()) valid = false; } List inspectors = new ArrayList(); diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Server/ServerContainer.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Server/ServerImpl.java similarity index 94% rename from SubServers.Sync/src/net/ME1312/SubServers/Sync/Server/ServerContainer.java rename to SubServers.Sync/src/net/ME1312/SubServers/Sync/Server/ServerImpl.java index 784598a4..f2d879f0 100644 --- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Server/ServerContainer.java +++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Server/ServerImpl.java @@ -12,14 +12,14 @@ import java.util.*; /** * Server Class */ -public class ServerContainer extends BungeeServerInfo { +public class ServerImpl extends BungeeServerInfo { private HashMap subdata = new HashMap(); private List whitelist = new ArrayList(); private String nick = null; private boolean hidden; private final String signature; - public ServerContainer(String signature, String name, String display, InetSocketAddress address, Map subdata, String motd, boolean hidden, boolean restricted, Collection whitelist) { + public ServerImpl(String signature, String name, String display, InetSocketAddress address, Map subdata, String motd, boolean hidden, boolean restricted, Collection whitelist) { super(name, address, motd, restricted); if (Util.isNull(name, address, motd, hidden, restricted)) throw new NullPointerException(); this.signature = signature; diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Server/SubServerContainer.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Server/SubServerImpl.java similarity index 70% rename from SubServers.Sync/src/net/ME1312/SubServers/Sync/Server/SubServerContainer.java rename to SubServers.Sync/src/net/ME1312/SubServers/Sync/Server/SubServerImpl.java index 5490fa1d..34fb7673 100644 --- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Server/SubServerContainer.java +++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Server/SubServerImpl.java @@ -8,10 +8,10 @@ import java.util.UUID; /** * SubServer Class */ -public class SubServerContainer extends ServerContainer { +public class SubServerImpl extends ServerImpl { private boolean running; - public SubServerContainer(String signature, String name, String display, InetSocketAddress address, Map subdata, String motd, boolean hidden, boolean restricted, Collection whitelist, boolean running) { + public SubServerImpl(String signature, String name, String display, InetSocketAddress address, Map subdata, String motd, boolean hidden, boolean restricted, Collection whitelist, boolean running) { super(signature, name, display, address, subdata, motd, hidden, restricted, whitelist); this.running = running; } diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubCommand.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubCommand.java index fa0e0573..04cc6159 100644 --- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubCommand.java +++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubCommand.java @@ -12,8 +12,8 @@ import net.ME1312.Galaxi.Library.Version.Version; import net.ME1312.SubServers.Sync.Library.Compatibility.GalaxiInfo; import net.ME1312.SubServers.Sync.Network.API.*; import net.ME1312.SubServers.Sync.Network.Packet.*; -import net.ME1312.SubServers.Sync.Server.ServerContainer; -import net.ME1312.SubServers.Sync.Server.SubServerContainer; +import net.ME1312.SubServers.Sync.Server.ServerImpl; +import net.ME1312.SubServers.Sync.Server.SubServerImpl; import net.md_5.bungee.BungeeCord; import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.CommandSender; @@ -683,7 +683,7 @@ public final class SubCommand extends CommandX { // do nothing } else if (!players.keySet().contains(((ProxiedPlayer) sender).getUniqueId()) || !players.get(((ProxiedPlayer) sender).getUniqueId()).keySet().contains(((ProxiedPlayer) sender).getServer().getInfo()) || Calendar.getInstance().getTime().getTime() - players.get(((ProxiedPlayer) sender).getUniqueId()).get(((ProxiedPlayer) sender).getServer().getInfo()).name() >= TimeUnit.MINUTES.toMillis(1)) { - if (!(((ProxiedPlayer) sender).getServer().getInfo() instanceof ServerContainer) || ((ServerContainer) ((ProxiedPlayer) sender).getServer().getInfo()).getSubData()[0] == null) { + if (!(((ProxiedPlayer) sender).getServer().getInfo() instanceof ServerImpl) || ((ServerImpl) ((ProxiedPlayer) sender).getServer().getInfo()).getSubData()[0] == null) { HashMap> map = (players.keySet().contains(((ProxiedPlayer) sender).getUniqueId()))?players.get(((ProxiedPlayer) sender).getUniqueId()):new HashMap>(); map.put(((ProxiedPlayer) sender).getServer().getInfo(), new NamedContainer<>(Calendar.getInstance().getTime().getTime(), false)); players.put(((ProxiedPlayer) sender).getUniqueId(), map); @@ -723,7 +723,7 @@ public final class SubCommand extends CommandX { for (String proxy : proxyCache) if (!list.contains(proxy)) list.add(proxy); for (String host : hostCache.keySet()) if (!list.contains(host)) list.add(host); for (String group : groupCache) if (!list.contains(group)) list.add(group); - for (ServerContainer server : plugin.servers.values()) if (!list.contains(server.getName())) list.add(server.getName()); + for (ServerImpl server : plugin.servers.values()) if (!list.contains(server.getName())) list.add(server.getName()); } else { for (String command : subcommands) { if (!list.contains(command) && command.toLowerCase().startsWith(last)) @@ -741,7 +741,7 @@ public final class SubCommand extends CommandX { if (!list.contains(group) && group.toLowerCase().startsWith(last)) list.add(last + group.substring(last.length())); } - for (ServerContainer server : plugin.servers.values()) { + for (ServerImpl server : plugin.servers.values()) { if (!list.contains(server.getName()) && server.getName().toLowerCase().startsWith(last)) list.add(last + server.getName().substring(last.length())); } @@ -767,7 +767,7 @@ public final class SubCommand extends CommandX { case "s": case "server": case "subserver": - for (ServerContainer server : plugin.servers.values()) list.add(server.getName()); + for (ServerImpl server : plugin.servers.values()) list.add(server.getName()); break; } } else { @@ -796,7 +796,7 @@ public final class SubCommand extends CommandX { case "s": case "server": case "subserver": - for (ServerContainer server : plugin.servers.values()) { + for (ServerImpl server : plugin.servers.values()) { if (server.getName().toLowerCase().startsWith(last)) list.add(last + server.getName().substring(last.length())); } @@ -812,10 +812,10 @@ public final class SubCommand extends CommandX { List list = new ArrayList(); if (args.length == 2) { if (last.length() == 0) { - for (ServerContainer server : plugin.servers.values()) if (server instanceof SubServerContainer) list.add(server.getName()); + for (ServerImpl server : plugin.servers.values()) if (server instanceof SubServerImpl) list.add(server.getName()); } else { - for (ServerContainer server : plugin.servers.values()) { - if (server instanceof SubServerContainer && server.getName().toLowerCase().startsWith(last)) list.add(last + server.getName().substring(last.length())); + for (ServerImpl server : plugin.servers.values()) { + if (server instanceof SubServerImpl && server.getName().toLowerCase().startsWith(last)) list.add(last + server.getName().substring(last.length())); } } return new NamedContainer<>((list.size() <= 0)?plugin.api.getLang("SubServers", "Command.Generic.Unknown-SubServer").replace("$str$", args[0]):null, list); @@ -828,11 +828,11 @@ public final class SubCommand extends CommandX { if (args.length == 2) { if (last.length() == 0) { list.add("*"); - for (ServerContainer server : plugin.servers.values()) if (server instanceof SubServerContainer) list.add(server.getName()); + for (ServerImpl server : plugin.servers.values()) if (server instanceof SubServerImpl) list.add(server.getName()); } else { if ("*".startsWith(last)) list.add("*"); - for (ServerContainer server : plugin.servers.values()) { - if (server instanceof SubServerContainer && server.getName().toLowerCase().startsWith(last)) list.add(last + server.getName().substring(last.length())); + for (ServerImpl server : plugin.servers.values()) { + if (server instanceof SubServerImpl && server.getName().toLowerCase().startsWith(last)) list.add(last + server.getName().substring(last.length())); } } return new NamedContainer<>((list.size() <= 0)?plugin.api.getLang("SubServers", "Command.Generic.Unknown-SubServer").replace("$str$", args[0]):null, list); @@ -843,10 +843,10 @@ public final class SubCommand extends CommandX { if (args.length == 2) { List list = new ArrayList(); if (last.length() == 0) { - for (ServerContainer server : plugin.servers.values()) if (server instanceof SubServerContainer) list.add(server.getName()); + for (ServerImpl server : plugin.servers.values()) if (server instanceof SubServerImpl) list.add(server.getName()); } else { - for (ServerContainer server : plugin.servers.values()) { - if (server instanceof SubServerContainer && server.getName().toLowerCase().startsWith(last)) list.add(last + server.getName().substring(last.length())); + for (ServerImpl server : plugin.servers.values()) { + if (server instanceof SubServerImpl && server.getName().toLowerCase().startsWith(last)) list.add(last + server.getName().substring(last.length())); } } return new NamedContainer<>((list.size() <= 0)?plugin.api.getLang("SubServers", "Command.Generic.Unknown-SubServer").replace("$str$", args[0]):null, list); @@ -900,9 +900,9 @@ public final class SubCommand extends CommandX { if (args.length == 2) { List list = new ArrayList(); if (last.length() == 0) { - for (ServerContainer server : plugin.servers.values()) list.add(server.getName()); + for (ServerImpl server : plugin.servers.values()) list.add(server.getName()); } else { - for (ServerContainer server : plugin.servers.values()) { + for (ServerImpl server : plugin.servers.values()) { if (server.getName().toLowerCase().startsWith(last)) list.add(last + server.getName().substring(last.length())); } } @@ -985,7 +985,7 @@ public final class SubCommand extends CommandX { public void execute(CommandSender sender, String[] args) { if (sender instanceof ProxiedPlayer) { if (args.length > 0) { - Map servers = plugin.servers; + Map servers = plugin.servers; if (servers.keySet().contains(args[0].toLowerCase())) { ((ProxiedPlayer) sender).connect(servers.get(args[0].toLowerCase())); } else { @@ -995,8 +995,8 @@ public final class SubCommand extends CommandX { int i = 0; TextComponent serverm = new TextComponent(ChatColor.RESET.toString()); TextComponent div = new TextComponent(plugin.api.getLang("SubServers", "Bungee.Server.Divider")); - for (ServerContainer server : plugin.servers.values()) { - if (!server.isHidden() && server.canAccess(sender) && (!(server instanceof SubServerContainer) || ((SubServerContainer) server).isRunning())) { + for (ServerImpl server : plugin.servers.values()) { + if (!server.isHidden() && server.canAccess(sender) && (!(server instanceof SubServerImpl) || ((SubServerImpl) server).isRunning())) { if (i != 0) serverm.addExtra(div); TextComponent message = new TextComponent(plugin.api.getLang("SubServers", "Bungee.Server.List").replace("$str$", server.getDisplayName())); try { @@ -1031,12 +1031,12 @@ public final class SubCommand extends CommandX { String last = (args.length > 0)?args[args.length - 1].toLowerCase():""; List list = new ArrayList(); if (last.length() == 0) { - for (ServerContainer server : plugin.servers.values()) { + for (ServerImpl server : plugin.servers.values()) { if (!server.isHidden()) list.add(server.getName()); } return new NamedContainer<>(null, new LinkedList<>(list)); } else { - for (ServerContainer server : plugin.servers.values()) { + for (ServerImpl server : plugin.servers.values()) { if (server.getName().toLowerCase().startsWith(last) && !server.isHidden()) list.add(server.getName()); } return new NamedContainer<>((list.size() <= 0)?plugin.api.getLang("SubServers", "Bungee.Server.Invalid").replace("$str$", args[0]):null, list); @@ -1079,7 +1079,7 @@ public final class SubCommand extends CommandX { public void execute(CommandSender sender, String[] args) { List messages = new LinkedList(); int players = 0; - for (ServerContainer server : plugin.servers.values()) { + for (ServerImpl server : plugin.servers.values()) { List playerlist = new ArrayList(); if (plugin.redis) { try { @@ -1093,7 +1093,7 @@ public final class SubCommand extends CommandX { Collections.sort(playerlist); players += playerlist.size(); - if (!server.isHidden() && (!(server instanceof SubServerContainer) || ((SubServerContainer) server).isRunning())) { + if (!server.isHidden() && (!(server instanceof SubServerImpl) || ((SubServerImpl) server).isRunning())) { int i = 0; String message = plugin.api.getLang("SubServers", "Bungee.List.Format").replace("$str$", server.getDisplayName()).replace("$int$", Integer.toString(playerlist.size())); for (String player : playerlist) { diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubPlugin.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubPlugin.java index 86438f27..2798a63e 100644 --- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubPlugin.java +++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubPlugin.java @@ -18,8 +18,8 @@ import net.ME1312.Galaxi.Library.Version.Version; import net.ME1312.SubData.Client.SubDataClient; import net.ME1312.SubServers.Sync.Library.Updates.ConfigUpdater; import net.ME1312.SubServers.Sync.Network.SubProtocol; -import net.ME1312.SubServers.Sync.Server.ServerContainer; -import net.ME1312.SubServers.Sync.Server.SubServerContainer; +import net.ME1312.SubServers.Sync.Server.ServerImpl; +import net.ME1312.SubServers.Sync.Server.SubServerImpl; import net.md_5.bungee.BungeeCord; import net.md_5.bungee.UserConnection; import net.md_5.bungee.api.ChatColor; @@ -46,7 +46,7 @@ import java.util.concurrent.TimeUnit; public final class SubPlugin extends BungeeCord implements Listener { HashMap subdata = new HashMap(); NamedContainer>> lang = null; - public final Map servers = new TreeMap(); + public final Map servers = new TreeMap(); private final HashMap> fallbackLimbo = new HashMap>(); public final PrintStream out; @@ -285,7 +285,7 @@ public final class SubPlugin extends BungeeCord implements Listener { int offline = 0; for (String name : e.getConnection().getListener().getServerPriority()) { ServerInfo server = getServerInfo(name); - if (server == null || server instanceof SubServerContainer && !((SubServerContainer) server).isRunning()) offline++; + if (server == null || server instanceof SubServerImpl && !((SubServerImpl) server).isRunning()) offline++; } if (offline >= e.getConnection().getListener().getServerPriority().size()) { @@ -320,7 +320,7 @@ public final class SubPlugin extends BungeeCord implements Listener { e.getPlayer().sendMessage(getTranslation("no_server_permission")); e.setCancelled(true); } - } else if (e.getPlayer().getServer() != null && !fallbackLimbo.keySet().contains(e.getPlayer().getUniqueId()) && e.getTarget() instanceof SubServerContainer && !((SubServerContainer) e.getTarget()).isRunning()) { + } else if (e.getPlayer().getServer() != null && !fallbackLimbo.keySet().contains(e.getPlayer().getUniqueId()) && e.getTarget() instanceof SubServerImpl && !((SubServerImpl) e.getTarget()).isRunning()) { e.getPlayer().sendMessage(api.getLang("SubServers", "Bungee.Server.Offline")); e.setCancelled(true); } @@ -349,7 +349,7 @@ public final class SubPlugin extends BungeeCord implements Listener { fallbacks.remove(e.getKickedFrom().getName()); if (!fallbacks.isEmpty()) { e.setCancelled(true); - e.getPlayer().sendMessage(api.getLang("SubServers", "Bungee.Feature.Smart-Fallback").replace("$str$", (e.getKickedFrom() instanceof ServerContainer)?((ServerContainer) e.getKickedFrom()).getDisplayName():e.getKickedFrom().getName()).replace("$msg$", e.getKickReason())); + e.getPlayer().sendMessage(api.getLang("SubServers", "Bungee.Feature.Smart-Fallback").replace("$str$", (e.getKickedFrom() instanceof ServerImpl)?((ServerImpl) e.getKickedFrom()).getDisplayName():e.getKickedFrom().getName()).replace("$msg$", e.getKickReason())); if (!fallbackLimbo.keySet().contains(e.getPlayer().getUniqueId())) fallbackLimbo.put(e.getPlayer().getUniqueId(), new LinkedList<>(fallbacks.values())); ServerInfo next = new LinkedList>(fallbacks.entrySet()).getFirst().getValue(); @@ -369,7 +369,7 @@ public final class SubPlugin extends BungeeCord implements Listener { public void run() { if (e.getPlayer().getServer() != null && !((UserConnection) e.getPlayer()).isDimensionChange() && e.getPlayer().getServer().getInfo().getAddress().equals(e.getServer().getInfo().getAddress())) { fallbackLimbo.remove(e.getPlayer().getUniqueId()); - e.getPlayer().sendMessage(api.getLang("SubServers", "Bungee.Feature.Smart-Fallback.Result").replace("$str$", (e.getServer().getInfo() instanceof ServerContainer)?((ServerContainer) e.getServer().getInfo()).getDisplayName():e.getServer().getInfo().getName())); + e.getPlayer().sendMessage(api.getLang("SubServers", "Bungee.Feature.Smart-Fallback.Result").replace("$str$", (e.getServer().getInfo() instanceof ServerImpl)?((ServerImpl) e.getServer().getInfo()).getDisplayName():e.getServer().getInfo().getName())); } } }, 1000); @@ -393,11 +393,11 @@ public final class SubPlugin extends BungeeCord implements Listener { api.getServer(e.getServer(), server -> { if (server != null) { if (server instanceof net.ME1312.SubServers.Sync.Network.API.SubServer) { - servers.put(server.getName().toLowerCase(), new SubServerContainer(server.getSignature(), server.getName(), server.getDisplayName(), server.getAddress(), + servers.put(server.getName().toLowerCase(), new SubServerImpl(server.getSignature(), server.getName(), server.getDisplayName(), server.getAddress(), getSubDataAsMap(server), server.getMotd(), server.isHidden(), server.isRestricted(), server.getWhitelist(), ((net.ME1312.SubServers.Sync.Network.API.SubServer) server).isRunning())); Logger.get("SubServers").info("Added SubServer: " + e.getServer()); } else { - servers.put(server.getName().toLowerCase(), new ServerContainer(server.getSignature(), server.getName(), server.getDisplayName(), server.getAddress(), + servers.put(server.getName().toLowerCase(), new ServerImpl(server.getSignature(), server.getName(), server.getDisplayName(), server.getAddress(), getSubDataAsMap(server), server.getMotd(), server.isHidden(), server.isRestricted(), server.getWhitelist())); Logger.get("SubServers").info("Added Server: " + e.getServer()); } @@ -406,14 +406,14 @@ public final class SubPlugin extends BungeeCord implements Listener { } public Boolean merge(net.ME1312.SubServers.Sync.Network.API.Server server) { - ServerContainer current = servers.get(server.getName().toLowerCase()); - if (current == null || server instanceof net.ME1312.SubServers.Sync.Network.API.SubServer || !(current instanceof SubServerContainer)) { + ServerImpl current = servers.get(server.getName().toLowerCase()); + if (current == null || server instanceof net.ME1312.SubServers.Sync.Network.API.SubServer || !(current instanceof SubServerImpl)) { if (current == null || !current.getSignature().equals(server.getSignature())) { if (server instanceof net.ME1312.SubServers.Sync.Network.API.SubServer) { - servers.put(server.getName().toLowerCase(), new SubServerContainer(server.getSignature(), server.getName(), server.getDisplayName(), server.getAddress(), + servers.put(server.getName().toLowerCase(), new SubServerImpl(server.getSignature(), server.getName(), server.getDisplayName(), server.getAddress(), getSubDataAsMap(server), server.getMotd(), server.isHidden(), server.isRestricted(), server.getWhitelist(), ((net.ME1312.SubServers.Sync.Network.API.SubServer) server).isRunning())); } else { - servers.put(server.getName().toLowerCase(), new ServerContainer(server.getSignature(), server.getName(), server.getDisplayName(), server.getAddress(), + servers.put(server.getName().toLowerCase(), new ServerImpl(server.getSignature(), server.getName(), server.getDisplayName(), server.getAddress(), getSubDataAsMap(server), server.getMotd(), server.isHidden(), server.isRestricted(), server.getWhitelist())); } @@ -421,8 +421,8 @@ public final class SubPlugin extends BungeeCord implements Listener { return true; } else { if (server instanceof net.ME1312.SubServers.Sync.Network.API.SubServer) { - if (((net.ME1312.SubServers.Sync.Network.API.SubServer) server).isRunning() != ((SubServerContainer) current).isRunning()) - ((SubServerContainer) current).setRunning(((net.ME1312.SubServers.Sync.Network.API.SubServer) server).isRunning()); + if (((net.ME1312.SubServers.Sync.Network.API.SubServer) server).isRunning() != ((SubServerImpl) current).isRunning()) + ((SubServerImpl) current).setRunning(((net.ME1312.SubServers.Sync.Network.API.SubServer) server).isRunning()); } if (!server.getMotd().equals(current.getMotd())) current.setMotd(server.getMotd()); @@ -443,7 +443,7 @@ public final class SubPlugin extends BungeeCord implements Listener { @EventHandler(priority = Byte.MIN_VALUE) public void edit(SubEditServerEvent e) { if (servers.keySet().contains(e.getServer().toLowerCase())) { - ServerContainer server = servers.get(e.getServer().toLowerCase()); + ServerImpl server = servers.get(e.getServer().toLowerCase()); switch (e.getEdit().name().toLowerCase()) { case "display": server.setDisplayName(e.getEdit().get().asString()); @@ -463,17 +463,17 @@ public final class SubPlugin extends BungeeCord implements Listener { @EventHandler(priority = Byte.MIN_VALUE) public void start(SubStartEvent e) { - if (servers.keySet().contains(e.getServer().toLowerCase()) && servers.get(e.getServer().toLowerCase()) instanceof SubServerContainer) - ((SubServerContainer) servers.get(e.getServer().toLowerCase())).setRunning(true); + if (servers.keySet().contains(e.getServer().toLowerCase()) && servers.get(e.getServer().toLowerCase()) instanceof SubServerImpl) + ((SubServerImpl) servers.get(e.getServer().toLowerCase())).setRunning(true); } - public void connect(ServerContainer server, int channel, UUID address) { + public void connect(ServerImpl server, int channel, UUID address) { if (server != null) { server.setSubData(address, channel); } } - public void disconnect(ServerContainer server, int channel) { + public void disconnect(ServerImpl server, int channel) { if (server != null) { server.setSubData(null, channel); } @@ -481,8 +481,8 @@ public final class SubPlugin extends BungeeCord implements Listener { @EventHandler(priority = Byte.MIN_VALUE) public void stop(SubStoppedEvent e) { - if (servers.keySet().contains(e.getServer().toLowerCase()) && servers.get(e.getServer().toLowerCase()) instanceof SubServerContainer) - ((SubServerContainer) servers.get(e.getServer().toLowerCase())).setRunning(false); + if (servers.keySet().contains(e.getServer().toLowerCase()) && servers.get(e.getServer().toLowerCase()) instanceof SubServerImpl) + ((SubServerImpl) servers.get(e.getServer().toLowerCase())).setRunning(false); } @EventHandler(priority = Byte.MIN_VALUE)