From 22e4ce4584492c15eaa74688903eb1e3c29de02b Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Tue, 16 Jan 2018 16:14:03 +0100 Subject: [PATCH] Make sure the replay is stopped if the main menu is opened (fixes #95) --- .../com/replaymod/replay/ReplayModReplay.java | 4 ++++ .../com/replaymod/replay/handler/GuiHandler.java | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/main/java/com/replaymod/replay/ReplayModReplay.java b/src/main/java/com/replaymod/replay/ReplayModReplay.java index 88a65f19..a19741ca 100644 --- a/src/main/java/com/replaymod/replay/ReplayModReplay.java +++ b/src/main/java/com/replaymod/replay/ReplayModReplay.java @@ -195,6 +195,10 @@ public class ReplayModReplay { replayHandler = new ReplayHandler(replayFile, true); } + public void forcefullyStopReplay() { + replayHandler = null; + } + public ReplayMod getCore() { return core; } diff --git a/src/main/java/com/replaymod/replay/handler/GuiHandler.java b/src/main/java/com/replaymod/replay/handler/GuiHandler.java index f05d2971..cad20d5a 100644 --- a/src/main/java/com/replaymod/replay/handler/GuiHandler.java +++ b/src/main/java/com/replaymod/replay/handler/GuiHandler.java @@ -16,6 +16,8 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; +import static com.replaymod.replay.ReplayModReplay.LOGGER; + public class GuiHandler { private static final int BUTTON_EXIT_SERVER = 1; private static final int BUTTON_ACHIEVEMENTS = 5; @@ -102,6 +104,20 @@ public class GuiHandler { return; } + if (mod.getReplayHandler() != null) { + // Something went terribly wrong and we ended up in the main menu with the replay still active. + // To prevent players from joining live servers and using the CameraEntity, try to stop the replay now. + try { + mod.getReplayHandler().endReplay(); + } catch (IOException e) { + LOGGER.error("Trying to stop broken replay: ", e); + } finally { + if (mod.getReplayHandler() != null) { + mod.forcefullyStopReplay(); + } + } + } + @SuppressWarnings("unchecked") List buttonList = event.buttonList; GuiButton button = new GuiButton(BUTTON_REPLAY_VIEWER, event.gui.width / 2 - 100,