diff --git a/src/main/java/carpet/CarpetServer.java b/src/main/java/carpet/CarpetServer.java index 126d8d85..a847a9fa 100644 --- a/src/main/java/carpet/CarpetServer.java +++ b/src/main/java/carpet/CarpetServer.java @@ -188,6 +188,9 @@ public class CarpetServer implements ClientModInitializer,DedicatedServerModInit // this for whatever reason gets called multiple times even when joining; TickSpeed.reset(); + } + public static void onServerDoneClosing(MinecraftServer server) + { settingsManager.detachServer(); } diff --git a/src/main/java/carpet/mixins/MinecraftServer_coreMixin.java b/src/main/java/carpet/mixins/MinecraftServer_coreMixin.java index 8b47e629..29511879 100644 --- a/src/main/java/carpet/mixins/MinecraftServer_coreMixin.java +++ b/src/main/java/carpet/mixins/MinecraftServer_coreMixin.java @@ -50,6 +50,12 @@ public abstract class MinecraftServer_coreMixin CarpetServer.onServerClosed((MinecraftServer) (Object) this); } + @Inject(method = "shutdown", at = @At("TAIL")) + private void serverDoneClosed(CallbackInfo ci) + { + CarpetServer.onServerDoneClosing((MinecraftServer) (Object) this); + } + @Inject(method = "prepareStartRegion", at = @At("RETURN")) private void afterSpawnCreated(WorldGenerationProgressListener worldGenerationProgressListener, CallbackInfo ci) { diff --git a/src/main/java/carpet/network/CarpetClient.java b/src/main/java/carpet/network/CarpetClient.java index 4236d2d3..49627f78 100644 --- a/src/main/java/carpet/network/CarpetClient.java +++ b/src/main/java/carpet/network/CarpetClient.java @@ -37,9 +37,13 @@ public class CarpetClient public static void disconnect() { - isServerCarpet = false; - clientPlayer = null; - CarpetServer.onServerClosed(null); + if (isServerCarpet) + { + isServerCarpet = false; + clientPlayer = null; + CarpetServer.onServerClosed(null); + CarpetServer.onServerDoneClosing(null); + } } public static void setCarpet()