From ee59429e1da671d9f02ce8392aff90e9c7d975fd Mon Sep 17 00:00:00 2001 From: ME1312 Date: Sun, 6 Jun 2021 02:02:27 -0400 Subject: [PATCH] Disallow starting unregistered servers --- .../ME1312/SubServers/Bungee/Host/External/ExternalHost.java | 3 ++- .../SubServers/Bungee/Host/External/ExternalSubServer.java | 4 ++++ .../ME1312/SubServers/Bungee/Host/Internal/InternalHost.java | 3 ++- .../SubServers/Bungee/Host/Internal/InternalSubServer.java | 4 ++++ .../src/net/ME1312/SubServers/Bungee/Host/SubServerImpl.java | 2 +- 5 files changed, 13 insertions(+), 3 deletions(-) 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 d23127d7..5b8f0373 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 @@ -173,13 +173,14 @@ public class ExternalHost extends Host implements ClientHandler { @Override public boolean addSubServer(UUID player, SubServer server) throws InvalidServerException { if (server.getHost() != this) throw new IllegalArgumentException("That Server does not belong to this Host!"); - if (plugin.api.getServers().keySet().contains(server.getName().toLowerCase())) throw new InvalidServerException("A Server already exists with this name!"); + if (plugin.api.getServers().containsKey(server.getName().toLowerCase())) throw new InvalidServerException("A Server already exists with this name!"); SubAddServerEvent event = new SubAddServerEvent(player, this, server); plugin.getPluginManager().callEvent(event); if (!event.isCancelled()) { queue(new PacketExAddServer(((ExternalSubServer) server), (server.isRunning())?((ExternalSubLogger) server.getLogger()).getExternalAddress():null, data -> { if (data.contains(0x0002)) ((ExternalSubServer) server).started(data.getUUID(0x0002)); })); + ((ExternalSubServer) server).register(); servers.put(server.getName().toLowerCase(), server); return true; } else { 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 9a41187e..a04c390f 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 @@ -97,6 +97,10 @@ public class ExternalSubServer extends SubServerImpl { this.lock = false; } + void register() { + registered = true; + } + @Override public boolean start(UUID player) { if (!lock && isAvailable() && isEnabled() && !running && getCurrentIncompatibilities().size() == 0) { diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalHost.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalHost.java index 69ed7a65..381b935f 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalHost.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalHost.java @@ -106,10 +106,11 @@ public class InternalHost extends Host { @Override public boolean addSubServer(UUID player, SubServer server) throws InvalidServerException { if (server.getHost() != this) throw new IllegalArgumentException("That Server does not belong to this Host!"); - if (plugin.api.getServers().keySet().contains(server.getName().toLowerCase())) throw new InvalidServerException("A Server already exists with this name!"); + if (plugin.api.getServers().containsKey(server.getName().toLowerCase())) throw new InvalidServerException("A Server already exists with this name!"); SubAddServerEvent event = new SubAddServerEvent(player, this, server); plugin.getPluginManager().callEvent(event); if (!event.isCancelled()) { + ((InternalSubServer) server).register(); servers.put(server.getName().toLowerCase(), server); if (UPnP.isUPnPAvailable() && plugin.config.get().getMap("Settings").getMap("UPnP", new ObjectMap()).getBoolean("Forward-Servers", false)) UPnP.openPortTCP(server.getAddress().getPort()); return true; diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubServer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubServer.java index 53109f35..fd0c024d 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubServer.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubServer.java @@ -136,6 +136,10 @@ public class InternalSubServer extends SubServerImpl { this.lock = false; } + void register() { + registered = true; + } + private void run() { boolean locked = lock; allowrestart = true; diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubServerImpl.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubServerImpl.java index faaa0aa7..571f2667 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubServerImpl.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubServerImpl.java @@ -100,7 +100,7 @@ public abstract class SubServerImpl extends ServerImpl implements SubServer { @Override public boolean isAvailable() { - return !updating && getHost().isAvailable(); + return registered && !updating && getHost().isAvailable(); } @Override