diff --git a/src/main/java/com/replaymod/core/ReplayMod.java b/src/main/java/com/replaymod/core/ReplayMod.java index 43cca831..98b9c438 100755 --- a/src/main/java/com/replaymod/core/ReplayMod.java +++ b/src/main/java/com/replaymod/core/ReplayMod.java @@ -3,12 +3,12 @@ package com.replaymod.core; import com.google.common.io.Files; import com.google.common.util.concurrent.ListenableFutureTask; import com.replaymod.core.gui.RestoreReplayGui; +import com.replaymod.core.handler.MainMenuHandler; import com.replaymod.replay.ReplaySender; import com.replaymod.replaystudio.util.I18n; import de.johni0702.minecraft.gui.container.GuiScreen; import eu.crushedpixel.replaymod.chat.ChatMessageHandler; import eu.crushedpixel.replaymod.events.handlers.CrosshairRenderHandler; -import eu.crushedpixel.replaymod.events.handlers.GuiEventHandler; import eu.crushedpixel.replaymod.events.handlers.MouseInputHandler; import eu.crushedpixel.replaymod.events.handlers.TickAndRenderListener; import eu.crushedpixel.replaymod.events.handlers.keyboard.KeyInputHandler; @@ -46,7 +46,9 @@ import java.io.IOException; import java.util.List; import java.util.Queue; -@Mod(modid = ReplayMod.MOD_ID, useMetadata = true) +@Mod(modid = ReplayMod.MOD_ID, + useMetadata = true, + guiFactory = "com.replaymod.core.gui.GuiFactory") public class ReplayMod { public static ModContainer getContainer() { @@ -74,8 +76,6 @@ public class ReplayMod { private static final Minecraft mc = Minecraft.getMinecraft(); - @Deprecated - public static GuiEventHandler guiEventHandler; @Deprecated public static ReplaySettings replaySettings; @Deprecated @@ -150,7 +150,7 @@ public class ReplayMod { @EventHandler public void init(FMLInitializationEvent event) { - MinecraftForge.EVENT_BUS.register(guiEventHandler = new GuiEventHandler()); + new MainMenuHandler().register(); FMLCommonHandler.instance().bus().register(keyInputHandler); FMLCommonHandler.instance().bus().register(keyBindingRegistry); diff --git a/src/main/java/com/replaymod/core/gui/GuiFactory.java b/src/main/java/com/replaymod/core/gui/GuiFactory.java new file mode 100644 index 00000000..ca770c82 --- /dev/null +++ b/src/main/java/com/replaymod/core/gui/GuiFactory.java @@ -0,0 +1,44 @@ +package com.replaymod.core.gui; + +import com.replaymod.core.ReplayMod; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; +import net.minecraftforge.fml.client.IModGuiFactory; + +import java.util.Set; + +@SuppressWarnings("unused") +public class GuiFactory implements IModGuiFactory { + @Override + public void initialize(Minecraft minecraftInstance) { + + } + + @Override + public Class mainConfigGuiClass() { + return ConfigGuiWrapper.class; + } + + @Override + public Set runtimeGuiCategories() { + return null; + } + + @Override + public RuntimeOptionGuiHandler getHandlerFor(RuntimeOptionCategoryElement element) { + return null; + } + + public static class ConfigGuiWrapper extends GuiScreen { + private final GuiScreen parent; + + public ConfigGuiWrapper(GuiScreen parent) { + this.parent = parent; + } + + @Override + public void initGui() { + new GuiReplaySettings(parent, ReplayMod.instance.getSettingsRegistry()).display(); + } + } +} diff --git a/src/main/java/com/replaymod/core/handler/MainMenuHandler.java b/src/main/java/com/replaymod/core/handler/MainMenuHandler.java new file mode 100644 index 00000000..d12bbeaa --- /dev/null +++ b/src/main/java/com/replaymod/core/handler/MainMenuHandler.java @@ -0,0 +1,35 @@ +package com.replaymod.core.handler; + +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiMainMenu; +import net.minecraftforge.client.event.GuiScreenEvent; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +import java.util.List; + +/** + * Moves certain buttons on the main menu upwards so we can inject our own. + */ +public class MainMenuHandler { + public void register() { + MinecraftForge.EVENT_BUS.register(this); + } + + @SubscribeEvent + public void onInit(GuiScreenEvent.InitGuiEvent.Post event) { + if (event.gui instanceof GuiMainMenu) { + @SuppressWarnings("unchecked") + List buttonList = event.buttonList; + for (GuiButton button : buttonList) { + // Buttons that aren't in a rectangle directly above our space don't need moving + if (button.xPosition + button.width < event.gui.width / 2 - 100 + || button.xPosition > event.gui.width / 2 + 100 + || button.yPosition > event.gui.height / 4 + 10 + 4 * 24) continue; + // Move button up to make space for two rows of buttons + // and then move back down by 10 to compensate for the space to the exit button that was already there + button.yPosition -= 2 * 24 - 10; + } + } + } +} diff --git a/src/main/java/eu/crushedpixel/replaymod/events/handlers/GuiEventHandler.java b/src/main/java/eu/crushedpixel/replaymod/events/handlers/GuiEventHandler.java deleted file mode 100755 index 8709579a..00000000 --- a/src/main/java/eu/crushedpixel/replaymod/events/handlers/GuiEventHandler.java +++ /dev/null @@ -1,103 +0,0 @@ -package eu.crushedpixel.replaymod.events.handlers; - -import com.replaymod.core.ReplayMod; -import com.replaymod.core.gui.GuiReplaySettings; -import eu.crushedpixel.replaymod.gui.GuiConstants; -import eu.crushedpixel.replaymod.gui.replayeditor.GuiReplayEditor; -import eu.crushedpixel.replaymod.studio.VersionValidator; -import eu.crushedpixel.replaymod.utils.MouseUtils; -import eu.crushedpixel.replaymod.utils.ReplayFileIO; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiButton; -import net.minecraft.client.gui.GuiMainMenu; -import net.minecraft.client.gui.GuiOptions; -import net.minecraft.client.resources.I18n; -import net.minecraftforge.client.event.GuiScreenEvent.ActionPerformedEvent; -import net.minecraftforge.client.event.GuiScreenEvent.DrawScreenEvent; -import net.minecraftforge.client.event.GuiScreenEvent.InitGuiEvent; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import org.lwjgl.util.Point; - -import java.awt.*; -import java.util.List; - -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(); - - public int replayCount = 0; - private GuiButton editorButton; - - @SubscribeEvent - public void onDraw(DrawScreenEvent e) { - if(e.gui instanceof GuiMainMenu) { - // TODO Do we need this? -// e.gui.drawString(mc.fontRendererObj, I18n.format("replaymod.title")+":", 5, 5, Color.WHITE.getRGB()); -// if(ReplayMod.apiClient.isLoggedIn()) { -// e.gui.drawString(mc.fontRendererObj, I18n.format("replaymod.gui.loggedin").toUpperCase(), 5, 15, DARK_GREEN.getRGB()); -// } else { -// e.gui.drawString(mc.fontRendererObj, I18n.format("replaymod.gui.loggedout").toUpperCase(), 5, 15, DARK_RED.getRGB()); -// } - - if(replayCount == 0) { - if(editorButton.isMouseOver()) { - Point mouse = MouseUtils.getMousePos(); - ReplayMod.tooltipRenderer.drawTooltip(mouse.getX(), mouse.getY(), I18n.format("replaymod.gui.morereplays"), e.gui, Color.RED); - } - } else if(!VersionValidator.isValid) { - if(editorButton.isMouseOver()) { - Point mouse = MouseUtils.getMousePos(); - ReplayMod.tooltipRenderer.drawTooltip(mouse.getX(), mouse.getY(), I18n.format("replaymod.gui.java"), e.gui, Color.RED); - } - } - } - } - - @SubscribeEvent - public void onInit(InitGuiEvent event) { - @SuppressWarnings("unchecked") - List buttonList = event.buttonList; - if(event.gui instanceof GuiMainMenu) { - int i1 = event.gui.height / 4 + 24 + 10; - - for(GuiButton b : buttonList) { - if(b.id != 0 && b.id != 4 && b.id != 5) { - b.yPosition = b.yPosition - 2 * 24 + 10; - } - } - - GuiButton rm = new GuiButton(GuiConstants.REPLAY_MANAGER_BUTTON_ID, event.gui.width / 2 - 100, i1 + 2 * 24, I18n.format("replaymod.gui.replayviewer")); - rm.width = rm.width / 2 - 2; - //rm.enabled = AuthenticationHandler.isAuthenticated(); - buttonList.add(rm); - - replayCount = ReplayFileIO.getAllReplayFiles().size(); - - GuiButton re = new GuiButton(GuiConstants.REPLAY_EDITOR_BUTTON_ID, event.gui.width / 2 + 2, i1 + 2 * 24, I18n.format("replaymod.gui.replayeditor")); - re.width = re.width / 2 - 2; - re.enabled = VersionValidator.isValid && replayCount > 0; - buttonList.add(re); - - editorButton = re; - - } else if(event.gui instanceof GuiOptions) { - buttonList.add(new GuiButton(GuiConstants.REPLAY_OPTIONS_BUTTON_ID, - event.gui.width / 2 - 155, event.gui.height / 6 + 48 - 6 - 24, 310, 20, I18n.format("replaymod.gui.settings.title"))); - } - } - - @SubscribeEvent - public void onButton(ActionPerformedEvent event) { - if(!event.button.enabled) return; - if(event.gui instanceof GuiMainMenu) { - if(event.button.id == GuiConstants.REPLAY_EDITOR_BUTTON_ID) { - mc.displayGuiScreen(new GuiReplayEditor()); - } - } else if(event.gui instanceof GuiOptions && event.button.id == GuiConstants.REPLAY_OPTIONS_BUTTON_ID) { - new GuiReplaySettings(event.gui, ReplayMod.instance.getSettingsRegistry()).display(); - } - } - -} diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/replayeditor/GuiReplayEditor.java b/src/main/java/eu/crushedpixel/replaymod/gui/replayeditor/GuiReplayEditor.java index ab7d93ad..1caaff8d 100755 --- a/src/main/java/eu/crushedpixel/replaymod/gui/replayeditor/GuiReplayEditor.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/replayeditor/GuiReplayEditor.java @@ -1,6 +1,5 @@ package eu.crushedpixel.replaymod.gui.replayeditor; -import com.replaymod.core.ReplayMod; import eu.crushedpixel.replaymod.gui.GuiConstants; import eu.crushedpixel.replaymod.gui.elements.GuiDropdown; import eu.crushedpixel.replaymod.holders.GuiEntryListStringEntry; @@ -48,7 +47,6 @@ public class GuiReplayEditor extends GuiScreen { replayFiles = ReplayFileIO.getAllReplayFiles(); if(replayFiles.size() == 0) { mc.displayGuiScreen(null); - ReplayMod.guiEventHandler.replayCount = 0; return; } for(File file : replayFiles) {