package net.minecraftforge.client.event; import java.util.ArrayList; import java.util.List; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; import cpw.mods.fml.common.eventhandler.Cancelable; import cpw.mods.fml.common.eventhandler.Event; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; /** * Event classes for GuiScreen events. * * @author bspkrs */ @SideOnly(Side.CLIENT) public class GuiScreenEvent extends Event { /** * The GuiScreen object generating this event. */ public final GuiScreen gui; public GuiScreenEvent(GuiScreen gui) { this.gui = gui; } public static class InitGuiEvent extends GuiScreenEvent { /** * The {@code buttonList} field from the GuiScreen object referenced by {@code gui}. */ public List buttonList; public InitGuiEvent(GuiScreen gui, List buttonList) { super(gui); this.buttonList = buttonList; } /** * This event fires just after initializing {@code GuiScreen.mc}, {@code GuiScreen.fontRendererObj}, * {@code GuiScreen.width}, and {@code GuiScreen.height}, and just before calling {@code GuiScreen.buttonList.clear()} * and {@code GuiScreen.initGui()}. To skip or override a screen's initGui() method cancel the event.<br/><br/> * * If canceled the following lines are skipped in {@code GuiScreen.setWorldAndResolution()}:<br/> * {@code this.buttonList.clear();}<br/> * {@code this.initGui();}<br/> * * @author bspkrs */ @Cancelable public static class Pre extends InitGuiEvent { public Pre(GuiScreen gui, List buttonList) { super(gui, buttonList); } } /** * This event fires right after {@code GuiScreen.initGui()}. * This is a good place to alter a GuiScreen's component layout if desired. * * @author bspkrs */ public static class Post extends InitGuiEvent { public Post(GuiScreen gui, List buttonList) { super(gui, buttonList); } } } public static class DrawScreenEvent extends GuiScreenEvent { /** * The x coordinate of the mouse pointer on the screen. */ public final int mouseX; /** * The y coordinate of the mouse pointer on the screen. */ public final int mouseY; /** * Partial render ticks elapsed. */ public final float renderPartialTicks; public DrawScreenEvent(GuiScreen gui, int mouseX, int mouseY, float renderPartialTicks) { super(gui); this.mouseX = mouseX; this.mouseY = mouseY; this.renderPartialTicks = renderPartialTicks; } /** * This event fires just before {@code GuiScreen.drawScreen()} is called. * Cancel this event to skip {@code GuiScreen.drawScreen()}. * * @author bspkrs */ @Cancelable public static class Pre extends DrawScreenEvent { public Pre(GuiScreen gui, int mouseX, int mouseY, float renderPartialTicks) { super(gui, mouseX, mouseY, renderPartialTicks); } } /** * This event fires just after {@code GuiScreen.drawScreen()} is called. * * @author bspkrs */ public static class Post extends DrawScreenEvent { public Post(GuiScreen gui, int mouseX, int mouseY, float renderPartialTicks) { super(gui, mouseX, mouseY, renderPartialTicks); } } } public static class ActionPerformedEvent extends GuiScreenEvent { /** * The button that was clicked. */ public GuiButton button; /** * A COPY of the {@code buttonList} field from the GuiScreen referenced by {@code gui}. */ public List buttonList; public ActionPerformedEvent(GuiScreen gui, GuiButton button, List buttonList) { super(gui); this.button = button; this.buttonList = new ArrayList(buttonList); } /** * This event fires once it has been determined that a GuiButton object has been clicked. * Cancel this event to bypass {@code GuiScreen.actionPerformed()}. * Replace button with a different button from buttonList to have that button's action executed. * * @author bspkrs */ @Cancelable public static class Pre extends ActionPerformedEvent { public Pre(GuiScreen gui, GuiButton button, List buttonList) { super(gui, button, buttonList); } } /** * This event fires after {@code GuiScreen.actionPerformed()} provided that the active * screen has not been changed as a result of {@code GuiScreen.actionPerformed()}. * * @author bspkrs */ public static class Post extends ActionPerformedEvent { public Post(GuiScreen gui, GuiButton button, List buttonList) { super(gui, button, buttonList); } } } }