From fb4c40c951b4633770a4980f75037e99c5e7a4a1 Mon Sep 17 00:00:00 2001 From: gnembon Date: Sat, 22 May 2021 22:14:16 -0300 Subject: [PATCH] separated properly client disconnect from server shutdown allowing for retaining carpet settings till world is gone. Fixes #854 --- src/main/java/carpet/CarpetServer.java | 3 +++ .../java/carpet/mixins/MinecraftServer_coreMixin.java | 6 ++++++ src/main/java/carpet/network/CarpetClient.java | 10 +++++++--- 3 files changed, 16 insertions(+), 3 deletions(-) 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()