From 0ceb95a5e26236e6e5d59be2aa3c6f976bec50d6 Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Sun, 15 Aug 2021 19:30:10 +0200 Subject: [PATCH] Abort path preview when opening render screen (fixes #524) --- .../replaymod/simplepathing/gui/GuiPathing.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/java/com/replaymod/simplepathing/gui/GuiPathing.java b/src/main/java/com/replaymod/simplepathing/gui/GuiPathing.java index 8df8f8f2..d4031bbd 100644 --- a/src/main/java/com/replaymod/simplepathing/gui/GuiPathing.java +++ b/src/main/java/com/replaymod/simplepathing/gui/GuiPathing.java @@ -102,6 +102,7 @@ public class GuiPathing { public final GuiButton renderButton = new GuiButton().onClick(new Runnable() { @Override public void run() { + abortPathPlayback(); GuiScreen screen = GuiRenderSettings.createBaseScreen(); new GuiRenderQueue(screen, replayHandler, () -> preparePathsForPlayback(false)) { @Override @@ -378,7 +379,21 @@ public class GuiPathing { startLoadingEntityTracker(); } + private void abortPathPlayback() { + if (!player.isActive()) { + return; + } + + ListenableFuture future = player.getFuture(); + if (!future.isDone() && !future.isCancelled()) { + future.cancel(false); + } + // Tear down of the player might only happen the next tick after it was cancelled + player.onTick(); + } + public void keyframeRepoButtonPressed() { + abortPathPlayback(); try { GuiKeyframeRepository gui = new GuiKeyframeRepository( mod.getCurrentTimeline(), replayHandler.getReplayFile(), mod.getCurrentTimeline().getTimeline());