From 479523d88303a06d405330d5d2b11f29bfa7630d Mon Sep 17 00:00:00 2001 From: CrushedPixel Date: Mon, 1 Jun 2015 19:44:34 +0200 Subject: [PATCH] Fixed Race Condition which locked the user in the GuiReplaySaving caused by Minecraft opening the GUI in a delayed thread --- .../replaymod/events/GuiEventHandler.java | 16 +--------------- .../replaymod/gui/GuiReplaySaving.java | 6 ++++++ .../replaymod/gui/GuiVideoRenderer.java | 1 - .../replaymod/registry/ReplayFileAppender.java | 3 +-- 4 files changed, 8 insertions(+), 18 deletions(-) diff --git a/src/main/java/eu/crushedpixel/replaymod/events/GuiEventHandler.java b/src/main/java/eu/crushedpixel/replaymod/events/GuiEventHandler.java index 6cbc85da..2e284e11 100755 --- a/src/main/java/eu/crushedpixel/replaymod/events/GuiEventHandler.java +++ b/src/main/java/eu/crushedpixel/replaymod/events/GuiEventHandler.java @@ -2,7 +2,6 @@ package eu.crushedpixel.replaymod.events; import eu.crushedpixel.replaymod.ReplayMod; import eu.crushedpixel.replaymod.gui.GuiConstants; -import eu.crushedpixel.replaymod.gui.GuiReplaySaving; import eu.crushedpixel.replaymod.gui.GuiReplaySettings; import eu.crushedpixel.replaymod.gui.online.GuiLoginPrompt; import eu.crushedpixel.replaymod.gui.online.GuiReplayCenter; @@ -37,15 +36,7 @@ public class GuiEventHandler { private static final Color DARK_RED = Color.decode("#DF0101"); private static final Color DARK_GREEN = Color.decode("#01DF01"); private final Minecraft mc = Minecraft.getMinecraft(); - private final List allowedGUIs = new ArrayList() { - { - add(GuiReplaySettings.class); - add(GuiReplaySaving.class); - add(GuiIngameMenu.class); - add(GuiOptions.class); - add(GuiVideoSettings.class); - } - }; + public int replayCount = 0; private GuiButton editorButton; @@ -68,11 +59,6 @@ public class GuiEventHandler { if(ReplayHandler.isInReplay()) ReplayHandler.setInReplay(false); } - if(event.gui != null && ReplayMod.replayFileAppender.isBusy() && !allowedGUIs.contains(event.gui.getClass())) { - event.gui = new GuiReplaySaving(event.gui); - return; - } - if(!AuthenticationHandler.isAuthenticated()) return; if(event.gui instanceof GuiChat || event.gui instanceof GuiInventory) { diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/GuiReplaySaving.java b/src/main/java/eu/crushedpixel/replaymod/gui/GuiReplaySaving.java index 77693c9e..e96b7f7b 100755 --- a/src/main/java/eu/crushedpixel/replaymod/gui/GuiReplaySaving.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/GuiReplaySaving.java @@ -18,6 +18,12 @@ public class GuiReplaySaving extends GuiScreen { ReplayMod.replayFileAppender.addFinishListener(this); } + @Override + public void setWorldAndResolution(Minecraft mc, int width, int height) { + super.setWorldAndResolution(mc, width, height); + ReplayMod.replayFileAppender.callListeners(); + } + @Override public void drawScreen(int mouseX, int mouseY, float partialTicks) { this.drawDefaultBackground(); diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/GuiVideoRenderer.java b/src/main/java/eu/crushedpixel/replaymod/gui/GuiVideoRenderer.java index 343c132e..80511b26 100644 --- a/src/main/java/eu/crushedpixel/replaymod/gui/GuiVideoRenderer.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/GuiVideoRenderer.java @@ -164,7 +164,6 @@ public class GuiVideoRenderer extends GuiScreen { drawString(fontRendererObj, leftString, width - 12 - fontRendererObj.getStringWidth(leftString), previewCheckBox.yPosition + 5 + 20, Color.WHITE.getRGB()); - super.drawScreen(mouseX, mouseY, partialTicks); } } diff --git a/src/main/java/eu/crushedpixel/replaymod/registry/ReplayFileAppender.java b/src/main/java/eu/crushedpixel/replaymod/registry/ReplayFileAppender.java index 35c6c6bb..de188dc6 100644 --- a/src/main/java/eu/crushedpixel/replaymod/registry/ReplayFileAppender.java +++ b/src/main/java/eu/crushedpixel/replaymod/registry/ReplayFileAppender.java @@ -29,7 +29,6 @@ public class ReplayFileAppender extends Thread { @Override public void run() { final GuiReplaySaving savingScreen = new GuiReplaySaving(null); - Minecraft.getMinecraft().displayGuiScreen(savingScreen); } }); @@ -96,7 +95,7 @@ public class ReplayFileAppender extends Thread { } } - private void callListeners() { + public void callListeners() { if(filesToMove.isEmpty() && !newReplayFileWriting) { for(final GuiReplaySaving gui : listeners) { Minecraft.getMinecraft().addScheduledTask(new Runnable() {