diff --git a/src/main/java/com/minecrafttas/tasmod/handlers/PlayUntilHandler.java b/src/main/java/com/minecrafttas/tasmod/handlers/PlayUntilHandler.java index 51bd3a7d..b933dda7 100644 --- a/src/main/java/com/minecrafttas/tasmod/handlers/PlayUntilHandler.java +++ b/src/main/java/com/minecrafttas/tasmod/handlers/PlayUntilHandler.java @@ -35,12 +35,11 @@ public void onPlaybackTickPre(long index) { if (playUntil != null && playUntil == index) { TASmodClient.tickratechanger.pauseGame(true); PlaybackControllerClient controller = TASmodClient.controller; - controller.setTASState(TASstate.NONE); + controller.setTASState(TASstate.RECORDING); controller.setIndex(controller.index() - 1); for (long i = controller.size() - 1; i >= index; i--) { controller.remove(i); } - controller.setTASState(TASstate.RECORDING); playUntil = null; } } diff --git a/src/main/java/com/minecrafttas/tasmod/playback/PlaybackControllerClient.java b/src/main/java/com/minecrafttas/tasmod/playback/PlaybackControllerClient.java index 90e3681d..43d35534 100644 --- a/src/main/java/com/minecrafttas/tasmod/playback/PlaybackControllerClient.java +++ b/src/main/java/com/minecrafttas/tasmod/playback/PlaybackControllerClient.java @@ -237,7 +237,10 @@ public String setTASStateClient(TASstate stateIn, boolean verbose) { case PLAYBACK: return TextFormatting.RED + "Please report this message to the mod author, because you should never be able to see this (Error: Playback)"; case RECORDING: - return verbose ? TextFormatting.RED + "A playback is currently running. Please stop the playback first before starting a recording" : ""; + stopPlayback(false); + startRecording(); + state = TASstate.RECORDING; + return verbose ? TextFormatting.GREEN + "Switching from playback to recording" : ""; case PAUSED: LOGGER.debug(LoggerMarkers.Playback, "Pausing a playback"); state = TASstate.PAUSED; @@ -245,7 +248,7 @@ public String setTASStateClient(TASstate stateIn, boolean verbose) { TASmodClient.virtual.clear(); return verbose ? TextFormatting.GREEN + "Pausing a playback" : ""; case NONE: - stopPlayback(); + stopPlayback(true); state = TASstate.NONE; return verbose ? TextFormatting.GREEN + "Stopping the playback" : ""; } @@ -298,10 +301,12 @@ private void startPlayback() { // TASmod.ktrngHandler.setInitialSeed(startSeed); } - private void stopPlayback() { + private void stopPlayback(boolean clearInputs) { LOGGER.debug(LoggerMarkers.Playback, "Stopping a playback"); Minecraft.getMinecraft().gameSettings.chatLinks = true; - TASmodClient.virtual.clear(); + if (clearInputs) { + TASmodClient.virtual.clear(); + } } /** @@ -466,6 +471,10 @@ public void onClientTickPost(Minecraft mc) { } else if (state == TASstate.PLAYBACK) { playbackNextTick(); } + +// if (TASmod.isDevEnvironment) { +// DebugWriter.writeDebugFile(this); +// } } private void recordNextTick() { diff --git a/src/main/java/com/minecrafttas/tasmod/playback/PlaybackControllerServer.java b/src/main/java/com/minecrafttas/tasmod/playback/PlaybackControllerServer.java index 2ef2fe2d..f224566b 100644 --- a/src/main/java/com/minecrafttas/tasmod/playback/PlaybackControllerServer.java +++ b/src/main/java/com/minecrafttas/tasmod/playback/PlaybackControllerServer.java @@ -88,7 +88,7 @@ public void setState(TASstate stateIn) { public void setServerState(TASstate stateIn) { if (state != stateIn) { - if (state == TASstate.RECORDING && stateIn == TASstate.PLAYBACK || state == TASstate.PLAYBACK && stateIn == TASstate.RECORDING) + if (state == TASstate.RECORDING && stateIn == TASstate.PLAYBACK) return; if (state == TASstate.NONE && state == TASstate.PAUSED) { return; diff --git a/src/main/java/com/minecrafttas/tasmod/util/DebugWriter.java b/src/main/java/com/minecrafttas/tasmod/util/DebugWriter.java new file mode 100644 index 00000000..58988346 --- /dev/null +++ b/src/main/java/com/minecrafttas/tasmod/util/DebugWriter.java @@ -0,0 +1,21 @@ +package com.minecrafttas.tasmod.util; + +import java.nio.file.Path; + +import com.minecrafttas.tasmod.TASmodClient; +import com.minecrafttas.tasmod.playback.PlaybackControllerClient; +import com.minecrafttas.tasmod.playback.tasfile.PlaybackSerialiser; + +/** + * Prints the current {@link PlaybackControllerClient#inputs} content to {@link TASmodClient#tasfiledirectory}/debug.mctas + * + * @author Scribble + */ +public class DebugWriter { + + private static Path debugTASFile = TASmodClient.tasfiledirectory.resolve("debug.mctas"); + + public static void writeDebugFile(PlaybackControllerClient controller) { + PlaybackSerialiser.saveToFile(debugTASFile, controller, null); + } +}