diff --git a/patches/minecraft/net/minecraft/client/gui/GuiScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/GuiScreen.java.patch index d6775a21a..1740dc735 100644 --- a/patches/minecraft/net/minecraft/client/gui/GuiScreen.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/GuiScreen.java.patch @@ -1,6 +1,17 @@ --- ../src-base/minecraft/net/minecraft/client/gui/GuiScreen.java +++ ../src-work/minecraft/net/minecraft/client/gui/GuiScreen.java -@@ -111,7 +111,9 @@ +@@ -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; +@@ -111,7 +115,9 @@ } } @@ -10,7 +21,7 @@ } protected void func_146279_a(String p_146279_1_, int p_146279_2_, int p_146279_3_) -@@ -121,6 +123,11 @@ +@@ -121,6 +127,11 @@ protected void func_146283_a(List p_146283_1_, int p_146283_2_, int p_146283_3_) { @@ -22,7 +33,7 @@ if (!p_146283_1_.isEmpty()) { GL11.glDisable(GL12.GL_RESCALE_NORMAL); -@@ -133,7 +140,7 @@ +@@ -133,7 +144,7 @@ while (iterator.hasNext()) { String s = (String)iterator.next(); @@ -31,7 +42,7 @@ if (l > k) { -@@ -178,7 +185,7 @@ +@@ -178,7 +189,7 @@ for (int i2 = 0; i2 < p_146283_1_.size(); ++i2) { String s1 = (String)p_146283_1_.get(i2); @@ -40,3 +51,36 @@ if (i2 == 0) { +@@ -207,9 +218,14 @@ + + if (guibutton.func_146116_c(this.field_146297_k, p_73864_1_, p_73864_2_)) + { +- this.field_146290_a = guibutton; +- guibutton.func_146113_a(this.field_146297_k.func_147118_V()); +- this.func_146284_a(guibutton); ++ ActionPerformedEvent.Pre event = new ActionPerformedEvent.Pre(this, guibutton, this.field_146292_n); ++ if (MinecraftForge.EVENT_BUS.post(event)) ++ break; ++ this.field_146290_a = event.button; ++ event.button.func_146113_a(this.field_146297_k.func_147118_V()); ++ this.func_146284_a(event.button); ++ if (this.field_146297_k.field_71462_r.equals(this)) ++ MinecraftForge.EVENT_BUS.post(new ActionPerformedEvent.Post(this, event.button, this.field_146292_n)); + } + } + } +@@ -234,8 +250,12 @@ + this.field_146289_q = p_146280_1_.field_71466_p; + this.field_146294_l = p_146280_2_; + this.field_146295_m = p_146280_3_; +- this.field_146292_n.clear(); +- this.func_73866_w_(); ++ if (!MinecraftForge.EVENT_BUS.post(new InitGuiEvent.Pre(this, this.field_146292_n))) ++ { ++ this.field_146292_n.clear(); ++ this.func_73866_w_(); ++ } ++ MinecraftForge.EVENT_BUS.post(new InitGuiEvent.Post(this, this.field_146292_n)); + } + + public void func_73866_w_() {} diff --git a/patches/minecraft/net/minecraft/client/renderer/EntityRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/EntityRenderer.java.patch index 09a97b88b..8559ac73f 100644 --- a/patches/minecraft/net/minecraft/client/renderer/EntityRenderer.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/EntityRenderer.java.patch @@ -1,18 +1,19 @@ --- ../src-base/minecraft/net/minecraft/client/renderer/EntityRenderer.java +++ ../src-work/minecraft/net/minecraft/client/renderer/EntityRenderer.java -@@ -51,6 +51,11 @@ +@@ -51,6 +51,12 @@ import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GLContext; import org.lwjgl.util.glu.Project; +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; @SideOnly(Side.CLIENT) public class EntityRenderer implements IResourceManagerReloadListener -@@ -358,7 +363,7 @@ +@@ -358,7 +364,7 @@ if (d3 < d2 || d2 == 0.0D) { @@ -21,7 +22,7 @@ { if (d2 == 0.0D) { -@@ -392,8 +397,15 @@ +@@ -392,8 +398,15 @@ private void func_78477_e() { @@ -39,7 +40,7 @@ this.field_78506_S = this.field_78507_R; this.field_78507_R += (this.field_78501_T - this.field_78507_R) * 0.5F; -@@ -416,7 +428,7 @@ +@@ -416,7 +429,7 @@ } else { @@ -48,7 +49,7 @@ float f1 = 70.0F; if (p_78481_2_) -@@ -497,15 +509,7 @@ +@@ -497,15 +510,7 @@ if (!this.field_78531_r.field_71474_y.field_74325_U) { @@ -65,7 +66,18 @@ GL11.glRotatef(entitylivingbase.field_70126_B + (entitylivingbase.field_70177_z - entitylivingbase.field_70126_B) * p_78467_1_ + 180.0F, 0.0F, -1.0F, 0.0F); GL11.glRotatef(entitylivingbase.field_70127_C + (entitylivingbase.field_70125_A - entitylivingbase.field_70127_C) * p_78467_1_, -1.0F, 0.0F, 0.0F); } -@@ -1203,7 +1207,10 @@ +@@ -1052,7 +1057,9 @@ + + try + { +- this.field_78531_r.field_71462_r.func_73863_a(k, l, p_78480_1_); ++ if (!MinecraftForge.EVENT_BUS.post(new DrawScreenEvent.Pre(this.field_78531_r.field_71462_r, k, l, p_78480_1_))) ++ this.field_78531_r.field_71462_r.func_73863_a(k, l, p_78480_1_); ++ MinecraftForge.EVENT_BUS.post(new DrawScreenEvent.Post(this.field_78531_r.field_71462_r, k, l, p_78480_1_)); + } + catch (Throwable throwable) + { +@@ -1203,7 +1210,10 @@ GL11.glPushMatrix(); RenderHelper.func_74519_b(); this.field_78531_r.field_71424_I.func_76318_c("entities"); @@ -76,7 +88,7 @@ this.func_78463_b((double)p_78471_1_); this.field_78531_r.field_71424_I.func_76318_c("litParticles"); effectrenderer.func_78872_b(entitylivingbase, p_78471_1_); -@@ -1221,7 +1228,10 @@ +@@ -1221,7 +1231,10 @@ entityplayer = (EntityPlayer)entitylivingbase; GL11.glDisable(GL11.GL_ALPHA_TEST); this.field_78531_r.field_71424_I.func_76318_c("outline"); @@ -88,7 +100,7 @@ GL11.glEnable(GL11.GL_ALPHA_TEST); } } -@@ -1234,14 +1244,17 @@ +@@ -1234,14 +1247,17 @@ entityplayer = (EntityPlayer)entitylivingbase; GL11.glDisable(GL11.GL_ALPHA_TEST); this.field_78531_r.field_71424_I.func_76318_c("outline"); @@ -108,7 +120,7 @@ GL11.glDisable(GL11.GL_BLEND); GL11.glDepthMask(false); GL11.glEnable(GL11.GL_CULL_FACE); -@@ -1296,6 +1309,16 @@ +@@ -1296,6 +1312,16 @@ renderglobal.func_72719_a(entitylivingbase, 1, (double)p_78471_1_); } @@ -125,7 +137,7 @@ GL11.glDepthMask(true); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_BLEND); -@@ -1307,9 +1330,12 @@ +@@ -1307,9 +1333,12 @@ this.func_82829_a(renderglobal, p_78471_1_); } @@ -139,7 +151,7 @@ { GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); this.func_78476_b(p_78471_1_, j); -@@ -1425,6 +1451,13 @@ +@@ -1425,6 +1454,13 @@ protected void func_78474_d(float p_78474_1_) { diff --git a/src/main/java/net/minecraftforge/client/GuiIngameForge.java b/src/main/java/net/minecraftforge/client/GuiIngameForge.java index df997ab1d..75f9cb1ab 100644 --- a/src/main/java/net/minecraftforge/client/GuiIngameForge.java +++ b/src/main/java/net/minecraftforge/client/GuiIngameForge.java @@ -630,7 +630,7 @@ public class GuiIngameForge extends GuiIngame } - if (this.mc.gameSettings.showDebugInfo) + if (this.mc.gameSettings.showDebugInfo && !pre(DEBUG)) { mc.mcProfiler.startSection("debug"); GL11.glPushMatrix(); @@ -688,6 +688,7 @@ public class GuiIngameForge extends GuiIngame } 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 000000000..fc7a78fb8 --- /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 a6dd86554..a452ccdf4 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 @@ public class RenderGameOverlayEvent extends Event HEALTHMOUNT, JUMPBAR, CHAT, - PLAYER_LIST + PLAYER_LIST, + DEBUG } public final float partialTicks;