diff --git a/src/main/java/carpet/CarpetServer.java b/src/main/java/carpet/CarpetServer.java index a08e3e66..43aa110e 100644 --- a/src/main/java/carpet/CarpetServer.java +++ b/src/main/java/carpet/CarpetServer.java @@ -171,14 +171,22 @@ public class CarpetServer implements ClientModInitializer,DedicatedServerModInit public static void onServerClosed(MinecraftServer server) { - if (scriptServer != null) scriptServer.onClose(); - ServerNetworkHandler.close(); - currentCommandDispatcher = null; + // this for whatever reason gets called multiple times even when joining on SP + // so we allow to pass multiple times gating it only on existing server ref + if (minecraft_server != null) + { + if (scriptServer != null) scriptServer.onClose(); + ServerNetworkHandler.close(); + currentCommandDispatcher = null; - LoggerRegistry.stopLoggers(); - extensions.forEach(e -> e.onServerClosed(server)); - minecraft_server = null; - disconnect(); + LoggerRegistry.stopLoggers(); + extensions.forEach(e -> e.onServerClosed(server)); + minecraft_server = null; + } + + // this for whatever reason gets called multiple times even when joining; + TickSpeed.reset(); + settingsManager.detachServer(); } public static void registerExtensionLoggers() @@ -186,13 +194,6 @@ public class CarpetServer implements ClientModInitializer,DedicatedServerModInit extensions.forEach(CarpetExtension::registerLoggers); } - public static void disconnect() - { - // this for whatever reason gets called multiple times even when joining; - TickSpeed.reset(); - settingsManager.detachServer(); - } - public static void onReload(MinecraftServer server) { scriptServer.reload(server); diff --git a/src/main/java/carpet/network/CarpetClient.java b/src/main/java/carpet/network/CarpetClient.java index 47f74fd4..4236d2d3 100644 --- a/src/main/java/carpet/network/CarpetClient.java +++ b/src/main/java/carpet/network/CarpetClient.java @@ -39,7 +39,7 @@ public class CarpetClient { isServerCarpet = false; clientPlayer = null; - CarpetServer.disconnect(); + CarpetServer.onServerClosed(null); } public static void setCarpet()