From 15f7d52b4cbdb4333ef555f3480974be75849106 Mon Sep 17 00:00:00 2001 From: gnembon Date: Fri, 28 May 2021 13:37:04 -0300 Subject: [PATCH] server closing for SP is signalled too late. --- src/main/java/carpet/CarpetServer.java | 9 ++++++++- src/main/java/carpet/network/CarpetClient.java | 6 +++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/main/java/carpet/CarpetServer.java b/src/main/java/carpet/CarpetServer.java index a2887fa8..00b7ca93 100644 --- a/src/main/java/carpet/CarpetServer.java +++ b/src/main/java/carpet/CarpetServer.java @@ -114,7 +114,7 @@ public class CarpetServer implements ClientModInitializer,DedicatedServerModInit { TickSpeed.tick(); HUDController.update_hud(server, null); - scriptServer.tick(); + if (scriptServer != null) scriptServer.tick(); //in case something happens CarpetSettings.impendingFillSkipUpdates.set(false); @@ -168,6 +168,12 @@ public class CarpetServer implements ClientModInitializer,DedicatedServerModInit extensions.forEach(e -> e.onPlayerLoggedOut(player)); } + public static void clientPreClosing() + { + if (scriptServer != null) scriptServer.onClose(); + scriptServer = null; + } + public static void onServerClosed(MinecraftServer server) { // this for whatever reason gets called multiple times even when joining on SP @@ -175,6 +181,7 @@ public class CarpetServer implements ClientModInitializer,DedicatedServerModInit if (minecraft_server != null) { if (scriptServer != null) scriptServer.onClose(); + scriptServer = null; ServerNetworkHandler.close(); currentCommandDispatcher = null; diff --git a/src/main/java/carpet/network/CarpetClient.java b/src/main/java/carpet/network/CarpetClient.java index 49627f78..1ccd4c1d 100644 --- a/src/main/java/carpet/network/CarpetClient.java +++ b/src/main/java/carpet/network/CarpetClient.java @@ -37,13 +37,17 @@ public class CarpetClient public static void disconnect() { - if (isServerCarpet) + if (isServerCarpet) // multiplayer connection { isServerCarpet = false; clientPlayer = null; CarpetServer.onServerClosed(null); CarpetServer.onServerDoneClosing(null); } + else // singleplayer disconnect + { + CarpetServer.clientPreClosing(); + } } public static void setCarpet()