Fixed Race Condition which locked the user in the GuiReplaySaving caused by Minecraft opening the GUI in a delayed thread

This commit is contained in:
CrushedPixel
2015-06-01 19:44:34 +02:00
parent 394165cba4
commit 479523d883
4 changed files with 8 additions and 18 deletions

View File

@@ -2,7 +2,6 @@ package eu.crushedpixel.replaymod.events;
import eu.crushedpixel.replaymod.ReplayMod; import eu.crushedpixel.replaymod.ReplayMod;
import eu.crushedpixel.replaymod.gui.GuiConstants; import eu.crushedpixel.replaymod.gui.GuiConstants;
import eu.crushedpixel.replaymod.gui.GuiReplaySaving;
import eu.crushedpixel.replaymod.gui.GuiReplaySettings; import eu.crushedpixel.replaymod.gui.GuiReplaySettings;
import eu.crushedpixel.replaymod.gui.online.GuiLoginPrompt; import eu.crushedpixel.replaymod.gui.online.GuiLoginPrompt;
import eu.crushedpixel.replaymod.gui.online.GuiReplayCenter; 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_RED = Color.decode("#DF0101");
private static final Color DARK_GREEN = Color.decode("#01DF01"); private static final Color DARK_GREEN = Color.decode("#01DF01");
private final Minecraft mc = Minecraft.getMinecraft(); private final Minecraft mc = Minecraft.getMinecraft();
private final List<Class> allowedGUIs = new ArrayList<Class>() {
{
add(GuiReplaySettings.class);
add(GuiReplaySaving.class);
add(GuiIngameMenu.class);
add(GuiOptions.class);
add(GuiVideoSettings.class);
}
};
public int replayCount = 0; public int replayCount = 0;
private GuiButton editorButton; private GuiButton editorButton;
@@ -68,11 +59,6 @@ public class GuiEventHandler {
if(ReplayHandler.isInReplay()) ReplayHandler.setInReplay(false); 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(!AuthenticationHandler.isAuthenticated()) return;
if(event.gui instanceof GuiChat || event.gui instanceof GuiInventory) { if(event.gui instanceof GuiChat || event.gui instanceof GuiInventory) {

View File

@@ -18,6 +18,12 @@ public class GuiReplaySaving extends GuiScreen {
ReplayMod.replayFileAppender.addFinishListener(this); ReplayMod.replayFileAppender.addFinishListener(this);
} }
@Override
public void setWorldAndResolution(Minecraft mc, int width, int height) {
super.setWorldAndResolution(mc, width, height);
ReplayMod.replayFileAppender.callListeners();
}
@Override @Override
public void drawScreen(int mouseX, int mouseY, float partialTicks) { public void drawScreen(int mouseX, int mouseY, float partialTicks) {
this.drawDefaultBackground(); this.drawDefaultBackground();

View File

@@ -164,7 +164,6 @@ public class GuiVideoRenderer extends GuiScreen {
drawString(fontRendererObj, leftString, width - 12 - fontRendererObj.getStringWidth(leftString), drawString(fontRendererObj, leftString, width - 12 - fontRendererObj.getStringWidth(leftString),
previewCheckBox.yPosition + 5 + 20, Color.WHITE.getRGB()); previewCheckBox.yPosition + 5 + 20, Color.WHITE.getRGB());
super.drawScreen(mouseX, mouseY, partialTicks); super.drawScreen(mouseX, mouseY, partialTicks);
} }
} }

View File

@@ -29,7 +29,6 @@ public class ReplayFileAppender extends Thread {
@Override @Override
public void run() { public void run() {
final GuiReplaySaving savingScreen = new GuiReplaySaving(null); final GuiReplaySaving savingScreen = new GuiReplaySaving(null);
Minecraft.getMinecraft().displayGuiScreen(savingScreen); Minecraft.getMinecraft().displayGuiScreen(savingScreen);
} }
}); });
@@ -96,7 +95,7 @@ public class ReplayFileAppender extends Thread {
} }
} }
private void callListeners() { public void callListeners() {
if(filesToMove.isEmpty() && !newReplayFileWriting) { if(filesToMove.isEmpty() && !newReplayFileWriting) {
for(final GuiReplaySaving gui : listeners) { for(final GuiReplaySaving gui : listeners) {
Minecraft.getMinecraft().addScheduledTask(new Runnable() { Minecraft.getMinecraft().addScheduledTask(new Runnable() {