From 75c7862e7804883ff360d54862d91155c0e9d2f8 Mon Sep 17 00:00:00 2001 From: mezz Date: Sat, 22 Nov 2014 17:44:54 -0800 Subject: [PATCH] Add GuiScreenEvents for keyboard and mouse input --- .../minecraft/client/gui/GuiScreen.java.patch | 20 ++++++ .../gui/inventory/GuiContainer.java.patch | 17 +++++ .../client/event/GuiScreenEvent.java | 66 +++++++++++++++++++ 3 files changed, 103 insertions(+) diff --git a/patches/minecraft/net/minecraft/client/gui/GuiScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/GuiScreen.java.patch index 986a5b8f10..120578ecfc 100644 --- a/patches/minecraft/net/minecraft/client/gui/GuiScreen.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/GuiScreen.java.patch @@ -84,3 +84,23 @@ } public void func_73866_w_() {} +@@ -246,7 +265,9 @@ + { + while (Mouse.next()) + { ++ if (MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.GuiScreenEvent.MouseInputEvent.Pre(this))) continue; + this.func_146274_d(); ++ if (this.equals(this.field_146297_k.field_71462_r)) MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.GuiScreenEvent.MouseInputEvent.Post(this)); + } + } + +@@ -254,7 +275,9 @@ + { + while (Keyboard.next()) + { ++ if (MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.GuiScreenEvent.KeyboardInputEvent.Pre(this))) continue; + this.func_146282_l(); ++ if (this.equals(this.field_146297_k.field_71462_r)) MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.GuiScreenEvent.KeyboardInputEvent.Post(this)); + } + } + } diff --git a/patches/minecraft/net/minecraft/client/gui/inventory/GuiContainer.java.patch b/patches/minecraft/net/minecraft/client/gui/inventory/GuiContainer.java.patch index 955cd8412d..c21ff7d64b 100644 --- a/patches/minecraft/net/minecraft/client/gui/inventory/GuiContainer.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/inventory/GuiContainer.java.patch @@ -53,3 +53,20 @@ Slot slot = this.func_146975_c(p_146286_1_, p_146286_2_); int l = this.field_147003_i; int i1 = this.field_147009_r; +@@ -691,4 +702,16 @@ + this.field_146297_k.field_71439_g.func_71053_j(); + } + } ++ ++ /* ======================================== FORGE START =====================================*/ ++ ++ /** ++ * Returns the slot that is currently displayed under the mouse. ++ */ ++ public Slot getSlotUnderMouse() ++ { ++ return this.field_147006_u; ++ } ++ ++ /* ======================================== FORGE END =====================================*/ + } diff --git a/src/main/java/net/minecraftforge/client/event/GuiScreenEvent.java b/src/main/java/net/minecraftforge/client/event/GuiScreenEvent.java index fc7a78fb8d..7e7e9d3956 100644 --- a/src/main/java/net/minecraftforge/client/event/GuiScreenEvent.java +++ b/src/main/java/net/minecraftforge/client/event/GuiScreenEvent.java @@ -176,4 +176,70 @@ public class GuiScreenEvent extends Event } } } + + public static class MouseInputEvent extends GuiScreenEvent + { + public MouseInputEvent(GuiScreen gui) + { + super(gui); + } + + /** + * This event fires when mouse input is detected by a GuiScreen. + * Cancel this event to bypass {@code GuiScreen.handleMouseInput()}. + */ + @Cancelable + public static class Pre extends MouseInputEvent + { + public Pre(GuiScreen gui) + { + super(gui); + } + } + + /** + * This event fires after {@code GuiScreen.handleMouseInput()} provided that the active + * screen has not been changed as a result of {@code GuiScreen.handleMouseInput()}. + */ + public static class Post extends MouseInputEvent + { + public Post(GuiScreen gui) + { + super(gui); + } + } + } + + public static class KeyboardInputEvent extends GuiScreenEvent + { + public KeyboardInputEvent(GuiScreen gui) + { + super(gui); + } + + /** + * This event fires when keyboard input is detected by a GuiScreen. + * Cancel this event to bypass {@code GuiScreen.handleKeyboardInput()}. + */ + @Cancelable + public static class Pre extends KeyboardInputEvent + { + public Pre(GuiScreen gui) + { + super(gui); + } + } + + /** + * This event fires after {@code GuiScreen.handleKeyboardInput()} provided that the active + * screen has not been changed as a result of {@code GuiScreen.handleKeyboardInput()}. + */ + public static class Post extends KeyboardInputEvent + { + public Post(GuiScreen gui) + { + super(gui); + } + } + } }