/
GuiEventHandler.java
149 lines (129 loc) · 4.67 KB
/
GuiEventHandler.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
package mezz.jei.gui;
import javax.annotation.Nullable;
import mezz.jei.Internal;
import mezz.jei.config.Config;
import mezz.jei.config.OverlayToggleEvent;
import mezz.jei.gui.overlay.IngredientListOverlay;
import mezz.jei.input.InputHandler;
import mezz.jei.recipes.RecipeRegistry;
import mezz.jei.runtime.JeiRuntime;
import mezz.jei.util.Translator;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraftforge.client.event.GuiOpenEvent;
import net.minecraftforge.client.event.GuiScreenEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;
import org.lwjgl.input.Mouse;
public class GuiEventHandler {
private static final String showRecipesText = Translator.translateToLocal("jei.tooltip.show.recipes");
private final JeiRuntime runtime;
@Nullable
private InputHandler inputHandler;
public GuiEventHandler(JeiRuntime runtime) {
this.runtime = runtime;
}
@SubscribeEvent
public void onOverlayToggle(OverlayToggleEvent event) {
GuiScreen currentScreen = Minecraft.getMinecraft().currentScreen;
onNewScreen(currentScreen);
}
@SubscribeEvent
public void onGuiInit(GuiScreenEvent.InitGuiEvent.Post event) {
GuiScreen gui = event.getGui();
onNewScreen(gui);
}
private void onNewScreen(@Nullable GuiScreen screen) {
IngredientListOverlay ingredientListOverlay = runtime.getItemListOverlay();
ingredientListOverlay.updateScreen(screen);
if (inputHandler == null) {
inputHandler = new InputHandler(runtime, ingredientListOverlay);
}
}
@SubscribeEvent
public void onGuiOpen(GuiOpenEvent event) {
IngredientListOverlay ingredientListOverlay = runtime.getItemListOverlay();
final boolean wasEnabled = ingredientListOverlay.isEnabled();
GuiScreen gui = event.getGui();
ingredientListOverlay.updateScreen(gui);
if (wasEnabled && !ingredientListOverlay.isEnabled()) {
Config.saveFilterText();
Internal.getIngredientLookupMemory().saveToFile();
}
}
@SubscribeEvent
public void onDrawBackgroundEventPost(GuiScreenEvent.BackgroundDrawnEvent event) {
IngredientListOverlay ingredientListOverlay = runtime.getItemListOverlay();
GuiScreen gui = event.getGui();
ingredientListOverlay.updateScreen(gui);
if (ingredientListOverlay.isEnabled()) {
ingredientListOverlay.drawScreen(gui.mc, event.getMouseX(), event.getMouseY());
}
}
@SubscribeEvent
public void onDrawScreenEventPost(GuiScreenEvent.DrawScreenEvent.Post event) {
GuiScreen gui = event.getGui();
if (gui instanceof GuiContainer) {
GuiContainer guiContainer = (GuiContainer) gui;
RecipeRegistry recipeRegistry = runtime.getRecipeRegistry();
if (recipeRegistry.getRecipeClickableArea(guiContainer, event.getMouseX() - guiContainer.getGuiLeft(), event.getMouseY() - guiContainer.getGuiTop()) != null) {
TooltipRenderer.drawHoveringText(guiContainer.mc, showRecipesText, event.getMouseX(), event.getMouseY());
}
}
IngredientListOverlay ingredientListOverlay = runtime.getItemListOverlay();
ingredientListOverlay.updateScreen(gui);
if (ingredientListOverlay.isEnabled()) {
ingredientListOverlay.drawTooltips(gui.mc, event.getMouseX(), event.getMouseY());
}
}
@SubscribeEvent
public void onClientTick(TickEvent.ClientTickEvent event) {
if (event.phase == TickEvent.Phase.END) {
return;
}
IngredientListOverlay ingredientListOverlay = runtime.getItemListOverlay();
if (ingredientListOverlay.isEnabled()) {
ingredientListOverlay.handleTick();
}
}
/**
* When we have keyboard focus, use Pre
*/
@SubscribeEvent
public void onGuiKeyboardEvent(GuiScreenEvent.KeyboardInputEvent.Pre event) {
if (inputHandler != null && inputHandler.hasKeyboardFocus()) {
if (inputHandler.handleKeyEvent()) {
event.setCanceled(true);
}
}
}
/**
* Without focus, use Post
*/
@SubscribeEvent
public void onGuiKeyboardEvent(GuiScreenEvent.KeyboardInputEvent.Post event) {
if (inputHandler != null && !inputHandler.hasKeyboardFocus()) {
if (inputHandler.handleKeyEvent()) {
event.setCanceled(true);
}
}
}
@SubscribeEvent
public void onGuiMouseEvent(GuiScreenEvent.MouseInputEvent.Pre event) {
GuiScreen guiScreen = event.getGui();
if (inputHandler != null) {
int x = Mouse.getEventX() * guiScreen.width / guiScreen.mc.displayWidth;
int y = guiScreen.height - Mouse.getEventY() * guiScreen.height / guiScreen.mc.displayHeight - 1;
if (inputHandler.handleMouseEvent(guiScreen, x, y)) {
event.setCanceled(true);
}
}
}
@SubscribeEvent
public void onPotionShiftEvent(GuiScreenEvent.PotionShiftEvent event) {
if (Config.isOverlayEnabled()) {
event.setCanceled(true);
}
}
}