From f70d57d266234d3f1044c6826dc55cc10b0fa4b4 Mon Sep 17 00:00:00 2001 From: Scribble Date: Wed, 4 Jun 2025 09:13:51 +0200 Subject: [PATCH] [Commands] Fix corruption when trying to use restartandplay under certain conditions This happens when savestate 0 does not exist and trying to use restartandplay --- .../tasmod/commands/CommandRestartAndPlay.java | 17 +++++++++++++++-- .../tickratechanger/TickrateChangerServer.java | 2 +- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/minecrafttas/tasmod/commands/CommandRestartAndPlay.java b/src/main/java/com/minecrafttas/tasmod/commands/CommandRestartAndPlay.java index 9dbdb86f..f0c8a290 100644 --- a/src/main/java/com/minecrafttas/tasmod/commands/CommandRestartAndPlay.java +++ b/src/main/java/com/minecrafttas/tasmod/commands/CommandRestartAndPlay.java @@ -10,6 +10,7 @@ import com.minecrafttas.tasmod.networking.TASmodBufferBuilder; import com.minecrafttas.tasmod.playback.PlaybackControllerClient.TASstate; import com.minecrafttas.tasmod.registries.TASmodPackets; +import com.minecrafttas.tasmod.savestates.SavestateHandlerServer.SavestateState; import com.minecrafttas.tasmod.savestates.exceptions.LoadstateException; import net.minecraft.client.Minecraft; @@ -50,9 +51,21 @@ public void execute(MinecraftServer server, ICommandSender sender, String[] args try { TASmod.savestateHandlerServer.loadState(0, false); } catch (LoadstateException e) { - e.printStackTrace(); + TASmod.LOGGER.catching(e); + if (e.getMessage() != null) { + sender.sendMessage(new TextComponentString(TextFormatting.RED + "Could not load the initial savestate: " + e.getMessage())); + } + TASmod.savestateHandlerServer.state = SavestateState.NONE; + TASmod.tickratechanger.pauseGame(false); + return; } catch (IOException e) { - e.printStackTrace(); + TASmod.LOGGER.catching(e); + if (e.getMessage() != null) { + sender.sendMessage(new TextComponentString(TextFormatting.RED + "Could not load the initial savestate: " + e.getMessage())); + } + TASmod.savestateHandlerServer.state = SavestateState.NONE; + TASmod.tickratechanger.pauseGame(false); + return; } TASmod.playbackControllerServer.setServerState(TASstate.PLAYBACK); try { diff --git a/src/main/java/com/minecrafttas/tasmod/tickratechanger/TickrateChangerServer.java b/src/main/java/com/minecrafttas/tasmod/tickratechanger/TickrateChangerServer.java index a0d70db9..d1d5645e 100644 --- a/src/main/java/com/minecrafttas/tasmod/tickratechanger/TickrateChangerServer.java +++ b/src/main/java/com/minecrafttas/tasmod/tickratechanger/TickrateChangerServer.java @@ -145,7 +145,7 @@ public void togglePause() { } /** - * Enables tickrate 0 + * Enables/Disables tickrate 0 on both client and server * * @param pause True if the game should be paused, false if unpause */