From c4d2be9e89ee11789dd022224c0500f3e8071caa Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Mon, 8 Jul 2019 09:53:47 +0200 Subject: [PATCH] Make thread requirements of ReplayHandler#setup explicit and fix illegal usage --- .../replaymod/replay/FullReplaySender.java | 2 +- .../com/replaymod/replay/ReplayHandler.java | 31 +++++++++---------- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/replaymod/replay/FullReplaySender.java b/src/main/java/com/replaymod/replay/FullReplaySender.java index f649a210..af7f8c74 100755 --- a/src/main/java/com/replaymod/replay/FullReplaySender.java +++ b/src/main/java/com/replaymod/replay/FullReplaySender.java @@ -845,11 +845,11 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend startFromBeginning = false; nextPacket = null; lastPacketSent = System.currentTimeMillis(); - replayHandler.restartedReplay(); if (replayIn != null) { replayIn.close(); replayIn = null; } + ReplayMod.instance.runSync(replayHandler::restartedReplay); } } } catch (Exception e) { diff --git a/src/main/java/com/replaymod/replay/ReplayHandler.java b/src/main/java/com/replaymod/replay/ReplayHandler.java index c0798670..4f196404 100755 --- a/src/main/java/com/replaymod/replay/ReplayHandler.java +++ b/src/main/java/com/replaymod/replay/ReplayHandler.java @@ -161,25 +161,22 @@ public class ReplayHandler { } void restartedReplay() { + Preconditions.checkState(isOnMainThread(), "Must be called from Minecraft thread."); + channel.close(); + //#if MC>=11300 + mc.mouse.unlockCursor(); + //#else + //$$ mc.setIngameNotInFocus(); + //#endif + // Force re-creation of camera entity by unloading the previous world - try { - ReplayMod.instance.runSync(() -> { - //#if MC>=11300 - mc.mouse.unlockCursor(); - //#else - //$$ mc.setIngameNotInFocus(); - //#endif - //#if MC>=11400 - mc.disconnect(); - //#else - //$$ mc.loadWorld(null); - //#endif - }); - } catch (InterruptedException | ExecutionException | TimeoutException e) { - LOGGER.error("Failed to properly restart (shutdown) replay:", e); - } + //#if MC>=11400 + mc.disconnect(); + //#else + //$$ mc.loadWorld(null); + //#endif restrictions = new Restrictions(); @@ -236,6 +233,8 @@ public class ReplayHandler { } private void setup() { + Preconditions.checkState(isOnMainThread(), "Must be called from Minecraft thread."); + //#if MC>=11100 mc.inGameHud.getChatHud().clear(false); //#else