diff --git a/gradle.properties b/gradle.properties index 205e8e64..9129b224 100644 --- a/gradle.properties +++ b/gradle.properties @@ -16,5 +16,5 @@ mod_email=scribble@minecrafttas.com # TASmod properties group=com.minecrafttas artifact=TASmod-1.12.2 -version=Beta2 +version=Beta2.1 release=false diff --git a/src/main/java/com/minecrafttas/tasmod/mixin/playbackhooks/MixinMinecraft.java b/src/main/java/com/minecrafttas/tasmod/mixin/playbackhooks/MixinMinecraft.java index 53f6aeda..35bad375 100644 --- a/src/main/java/com/minecrafttas/tasmod/mixin/playbackhooks/MixinMinecraft.java +++ b/src/main/java/com/minecrafttas/tasmod/mixin/playbackhooks/MixinMinecraft.java @@ -172,7 +172,7 @@ private static void playback_unpressAllKeys(GuiScreen guiScreen) { KeyBinding.unPressAllKeys(); } - @Redirect(method = "displayGuiScreen", at = @At(value = "INVOKE", target = "Lorg/lwjgl/input/Mouse;next()Z")) + @Redirect(method = "displayGuiScreen", at = @At(value = "INVOKE", target = "Lorg/lwjgl/input/Mouse;next()Z", remap = false)) private static boolean playback_mouseNext(GuiScreen guiScreen) { if (guiScreen instanceof SubtickGuiScreen) { return false; @@ -180,7 +180,7 @@ private static boolean playback_mouseNext(GuiScreen guiScreen) { return Mouse.next(); } - @Redirect(method = "displayGuiScreen", at = @At(value = "INVOKE", target = "Lorg/lwjgl/input/Keyboard;next()Z")) + @Redirect(method = "displayGuiScreen", at = @At(value = "INVOKE", target = "Lorg/lwjgl/input/Keyboard;next()Z", remap = false)) private static boolean playback_keyboardNext(GuiScreen guiScreen) { if (guiScreen instanceof SubtickGuiScreen) { return false; diff --git a/src/main/java/com/minecrafttas/tasmod/savestates/handlers/SavestateTempHandler.java b/src/main/java/com/minecrafttas/tasmod/savestates/handlers/SavestateTempHandler.java index 77bea8e4..efa25403 100644 --- a/src/main/java/com/minecrafttas/tasmod/savestates/handlers/SavestateTempHandler.java +++ b/src/main/java/com/minecrafttas/tasmod/savestates/handlers/SavestateTempHandler.java @@ -1,5 +1,6 @@ package com.minecrafttas.tasmod.savestates.handlers; +import static com.minecrafttas.tasmod.TASmod.LOGGER; import static com.minecrafttas.tasmod.playback.PlaybackControllerClient.TASstate.NONE; import static com.minecrafttas.tasmod.playback.PlaybackControllerClient.TASstate.PLAYBACK; import static com.minecrafttas.tasmod.playback.PlaybackControllerClient.TASstate.RECORDING; @@ -12,7 +13,12 @@ import com.minecrafttas.tasmod.events.EventPlaybackServer.EventControllerStateChange; 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; +import com.minecrafttas.tasmod.savestates.exceptions.SavestateException; +import com.minecrafttas.tasmod.util.Component; + +import net.minecraft.util.text.TextFormatting; /** *

Handles the creation of temporary savestates when recording/playing back a TAS @@ -48,23 +54,85 @@ public void onControllerStateChange(TASstate newstate, TASstate oldstate) { if (newstate == RECORDING && createState) { logger.info("Creating temporary savestate"); createState = false; - handler.saveStateTemp((paths) -> { + try { + handler.saveStateTemp((paths) -> { + try { + TASmod.server.sendToAll(new TASmodBufferBuilder(SAVESTATE_CLEAR_SCREEN)); + } catch (Exception e) { + logger.catching(e); + } + }); + } catch (SavestateException e) { + TASmod.getServerInstance().getServer().getPlayerList().sendMessage(Component.translatable(e.getMessage()).withStyle(TextFormatting.RED).build()); + try { - TASmod.server.sendToAll(new TASmodBufferBuilder(SAVESTATE_CLEAR_SCREEN)); - } catch (Exception e) { + TASmod.server.sendToAll(new TASmodBufferBuilder(TASmodPackets.TICKRATE_0_WARN)); + TASmod.server.sendToAll(new TASmodBufferBuilder(TASmodPackets.CLEAR_SCREEN)); + } catch (Exception e1) { logger.catching(e); } - }); + + LOGGER.error("Failed to create a temp savestate"); + LOGGER.catching(e); + } catch (Exception e) { + Throwable cause = e.getCause(); + if (cause == null) { + cause = e; + } + TASmod.getServerInstance().getPlayerList().sendMessage(Component.translatable("msg.tasmod.savestate.failure", e.getMessage()).withStyle(TextFormatting.RED).build()); + + try { + TASmod.server.sendToAll(new TASmodBufferBuilder(TASmodPackets.TICKRATE_0_WARN)); + TASmod.server.sendToAll(new TASmodBufferBuilder(TASmodPackets.CLEAR_SCREEN)); + } catch (Exception e1) { + logger.catching(e); + } + + LOGGER.error("Failed to create a temp savestate"); + LOGGER.catching(e); + } finally { + handler.resetState(); + } } else if (newstate == PLAYBACK) { logger.info("Loading temporary savestate"); createState = false; - handler.loadStateTemp((paths) -> { + try { + handler.loadStateTemp((paths) -> { + try { + TASmod.server.sendToAll(new TASmodBufferBuilder(SAVESTATE_CLEAR_SCREEN)); + } catch (Exception e) { + logger.catching(e); + } + }); + } catch (SavestateException e) { + TASmod.getServerInstance().getServer().getPlayerList().sendMessage(Component.translatable(e.getMessage()).withStyle(TextFormatting.RED).build()); + + try { + TASmod.server.sendToAll(new TASmodBufferBuilder(TASmodPackets.CLEAR_SCREEN)); + } catch (Exception e1) { + logger.catching(e); + } + + LOGGER.error("Failed to load a temp savestate"); + LOGGER.catching(e); + } catch (Exception e) { + Throwable cause = e.getCause(); + if (cause == null) { + cause = e; + } + TASmod.getServerInstance().getPlayerList().sendMessage(Component.translatable("msg.tasmod.savestate.failure", e.getMessage()).withStyle(TextFormatting.RED).build()); + try { - TASmod.server.sendToAll(new TASmodBufferBuilder(SAVESTATE_CLEAR_SCREEN)); - } catch (Exception e) { + TASmod.server.sendToAll(new TASmodBufferBuilder(TASmodPackets.CLEAR_SCREEN)); + } catch (Exception e1) { logger.catching(e); } - }); + + LOGGER.error("Failed to load a temp savestate"); + LOGGER.catching(e); + } finally { + handler.resetState(); + } } }