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