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 a135dcd8..d7a9dbfd 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Host.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Host.java @@ -4,6 +4,7 @@ import net.ME1312.Galaxi.Library.ExtraDataHandler; import net.ME1312.Galaxi.Library.Map.ObjectMap; import net.ME1312.Galaxi.Library.Map.ObjectMapValue; import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubServers.Bungee.Library.Compatibility.Logger; import net.ME1312.SubServers.Bungee.Library.Exception.InvalidHostException; import net.ME1312.SubServers.Bungee.Library.Exception.InvalidServerException; import net.ME1312.SubServers.Bungee.SubAPI; @@ -463,12 +464,14 @@ public abstract class Host implements ExtraDataHandler { * * @return Success Status */ + @SuppressWarnings("unchecked") public boolean destroy() { try { - String[] subservers = getSubServers().keySet().toArray(new String[0]); + Map.Entry[] subservers = getSubServers().entrySet().toArray(new Map.Entry[0]); - for (String server : subservers) { - forceRemoveSubServer(server); + for (Map.Entry entry : subservers) { + if (entry.getValue().isRunning()) Logger.get("SubServers").info("Stopping " + entry.getValue().getName()); + forceRemoveSubServer(entry.getKey()); } getCreator().terminate(); getCreator().waitFor(); diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Compatibility/Plugin.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Compatibility/Plugin.java index a031f8c2..b566e337 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Compatibility/Plugin.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Compatibility/Plugin.java @@ -7,12 +7,12 @@ import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.plugin.PluginDescription; import java.io.File; -import java.io.IOException; public final class Plugin extends net.md_5.bungee.api.plugin.Plugin { private static final PluginDescription description = new PluginDescription(); private final ExceptionRunnable enable; private final Runnable disable; + private boolean enabled; @Deprecated public Plugin() { @@ -43,12 +43,17 @@ public final class Plugin extends net.md_5.bungee.api.plugin.Plugin { if (enable == null) { throw new IllegalStateException("SubServers.Bungee does not run as a plugin, but a wrapper. For more information on how to install, please visit this page: https://github.com/ME1312/SubServers-2/wiki/Install"); } else try { + enabled = true; enable.run(); } catch (Throwable e) { e.printStackTrace(); } } + public boolean isActive() { + return enabled; + } + @Override public void onDisable() { if (disable != null) disable.run(); diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubProxy.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubProxy.java index 07f13af1..af5cef2b 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubProxy.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubProxy.java @@ -731,6 +731,11 @@ public final class SubProxy extends BungeeCommon implements Listener { @Override public void stopListeners() { if (running) { + if (plugin != null && plugin.isActive()) { + shutdown = !super.isRunning; + super.isRunning = true; + } + ListenerInfo[] listeners = getConfig().getListeners().toArray(new ListenerInfo[0]); super.stopListeners(); @@ -742,6 +747,7 @@ public final class SubProxy extends BungeeCommon implements Listener { } } + private boolean shutdown = false; protected void shutdown() { if (running) { legServers.clear(); @@ -771,6 +777,8 @@ public final class SubProxy extends BungeeCommon implements Listener { subdata.close(); Thread.sleep(500); } catch (InterruptedException | IOException e) {} + + if (shutdown) super.isRunning = false; } } diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/ExHost.java b/SubServers.Host/src/net/ME1312/SubServers/Host/ExHost.java index d3b2b94a..f68ed300 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/ExHost.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/ExHost.java @@ -291,21 +291,24 @@ public final class ExHost { } } + @SuppressWarnings("unchecked") private void stop() { if (running) { log.info.println("Stopping hosted servers"); - String[] subservers = servers.keySet().toArray(new String[0]); + Map.Entry[] subservers = servers.entrySet().toArray(new Map.Entry[0]); - for (String name : subservers) { - SubServerImpl server = servers.get(name); - server.stop(); - try { - server.waitFor(); - } catch (Exception e) { - log.error.println(e); + for (Map.Entry entry : subservers) { + if (entry.getValue().isRunning()) { + log.info.println("Stopping " + entry.getValue().getName()); + entry.getValue().stop(); + try { + entry.getValue().waitFor(); + } catch (Exception e) { + log.error.println(e); + } } - servers.remove(name); - if (UPnP.isUPnPAvailable() && UPnP.isMappedTCP(server.getPort())) UPnP.closePortTCP(server.getPort()); + servers.remove(entry.getKey()); + if (UPnP.isUPnPAvailable() && UPnP.isMappedTCP(entry.getValue().getPort())) UPnP.closePortTCP(entry.getValue().getPort()); } servers.clear();