diff --git a/src/main/java/net/minecraft/client/gui/GuiScreen.java b/src/main/java/net/minecraft/client/gui/GuiScreen.java index 8e095a7..0f4fe3a 100644 --- a/src/main/java/net/minecraft/client/gui/GuiScreen.java +++ b/src/main/java/net/minecraft/client/gui/GuiScreen.java @@ -17,6 +17,10 @@ import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.client.event.GuiScreenEvent.ActionPerformedEvent; +import net.minecraftforge.client.event.GuiScreenEvent.InitGuiEvent; +import net.minecraftforge.common.MinecraftForge; + import org.lwjgl.input.Keyboard; import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; @@ -214,9 +218,14 @@ if (guibutton.mousePressed(this.mc, par1, par2)) { - this.selectedButton = guibutton; - guibutton.func_146113_a(this.mc.getSoundHandler()); - this.actionPerformed(guibutton); + ActionPerformedEvent.Pre event = new ActionPerformedEvent.Pre(this, guibutton, this.buttonList); + if (MinecraftForge.EVENT_BUS.post(event)) + break; + this.selectedButton = event.button; + event.button.func_146113_a(this.mc.getSoundHandler()); + this.actionPerformed(event.button); + if (this.mc.currentScreen.equals(this)) + MinecraftForge.EVENT_BUS.post(new ActionPerformedEvent.Post(this, event.button, this.buttonList)); } } } @@ -241,8 +250,12 @@ this.fontRendererObj = p_146280_1_.fontRenderer; this.width = p_146280_2_; this.height = p_146280_3_; - this.buttonList.clear(); - this.initGui(); + if (!MinecraftForge.EVENT_BUS.post(new InitGuiEvent.Pre(this, this.buttonList))) + { + this.buttonList.clear(); + this.initGui(); + } + MinecraftForge.EVENT_BUS.post(new InitGuiEvent.Post(this, this.buttonList)); } public void initGui() {} diff --git a/src/main/java/net/minecraft/client/renderer/EntityRenderer.java b/src/main/java/net/minecraft/client/renderer/EntityRenderer.java index 38c9f18..b6530ca 100644 --- a/src/main/java/net/minecraft/client/renderer/EntityRenderer.java +++ b/src/main/java/net/minecraft/client/renderer/EntityRenderer.java @@ -54,6 +54,7 @@ import net.minecraftforge.client.ForgeHooksClient; import net.minecraftforge.client.IRenderHandler; import net.minecraftforge.client.event.DrawBlockHighlightEvent; +import net.minecraftforge.client.event.GuiScreenEvent.DrawScreenEvent; import net.minecraftforge.client.event.RenderWorldLastEvent; import net.minecraftforge.common.MinecraftForge; @@ -1056,7 +1057,9 @@ try { - this.mc.currentScreen.drawScreen(k, l, par1); + if (!MinecraftForge.EVENT_BUS.post(new DrawScreenEvent.Pre(this.mc.currentScreen, k, l, par1))) + this.mc.currentScreen.drawScreen(k, l, par1); + MinecraftForge.EVENT_BUS.post(new DrawScreenEvent.Post(this.mc.currentScreen, k, l, par1)); } catch (Throwable throwable) { diff --git a/src/main/java/net/minecraftforge/client/GuiIngameForge.java b/src/main/java/net/minecraftforge/client/GuiIngameForge.java index d82c02e..5e03bab 100644 --- a/src/main/java/net/minecraftforge/client/GuiIngameForge.java +++ b/src/main/java/net/minecraftforge/client/GuiIngameForge.java @@ -630,7 +630,7 @@ } - if (this.mc.gameSettings.showDebugInfo) + if (this.mc.gameSettings.showDebugInfo && !pre(DEBUG)) { mc.mcProfiler.startSection("debug"); GL11.glPushMatrix(); @@ -688,6 +688,7 @@ } GL11.glPopMatrix(); mc.mcProfiler.endSection(); + post(DEBUG); } RenderGameOverlayEvent.Text event = new RenderGameOverlayEvent.Text(eventParent, left, right); diff --git a/src/main/java/net/minecraftforge/client/event/GuiScreenEvent.java b/src/main/java/net/minecraftforge/client/event/GuiScreenEvent.java new file mode 100644 index 0000000..d475a98 --- /dev/null +++ b/src/main/java/net/minecraftforge/client/event/GuiScreenEvent.java @@ -0,0 +1,179 @@ +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.

+ * + * If canceled the following lines are skipped in {@code GuiScreen.setWorldAndResolution()}:
+ * {@code this.buttonList.clear();}
+ * {@code this.initGui();}
+ * + * @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); + } + } + } +} diff --git a/src/main/java/net/minecraftforge/client/event/RenderGameOverlayEvent.java b/src/main/java/net/minecraftforge/client/event/RenderGameOverlayEvent.java index e083d32..79a2df0 100644 --- a/src/main/java/net/minecraftforge/client/event/RenderGameOverlayEvent.java +++ b/src/main/java/net/minecraftforge/client/event/RenderGameOverlayEvent.java @@ -27,7 +27,8 @@ HEALTHMOUNT, JUMPBAR, CHAT, - PLAYER_LIST + PLAYER_LIST, + DEBUG } public final float partialTicks; diff --git a/src/main/resources/fmlversion.properties b/src/main/resources/fmlversion.properties index 76fe9d1..9912d88 100644 --- a/src/main/resources/fmlversion.properties +++ b/src/main/resources/fmlversion.properties @@ -1,6 +1,6 @@ fmlbuild.major.number=7 fmlbuild.minor.number=2 fmlbuild.revision.number=172 -fmlbuild.build.number=28 +fmlbuild.build.number=29 fmlbuild.mcversion=1.7.2 fmlbuild.mcpversion=9.03