/
GuiEventHandler.java
141 lines (124 loc) · 4.75 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
package mezz.jei;
import javax.annotation.Nullable;
import mezz.jei.api.ingredients.IIngredientRegistry;
import mezz.jei.config.Config;
import mezz.jei.gui.ItemListOverlay;
import mezz.jei.gui.ItemListOverlayInternal;
import mezz.jei.gui.TooltipRenderer;
import mezz.jei.gui.recipes.RecipesGui;
import mezz.jei.input.InputHandler;
import mezz.jei.util.Translator;
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;
@Nullable
private GuiContainer previousGui = null;
public GuiEventHandler(JeiRuntime runtime) {
this.runtime = runtime;
}
@SubscribeEvent
public void onGuiInit(GuiScreenEvent.InitGuiEvent.Post event) {
ItemListOverlay itemListOverlay = runtime.getItemListOverlay();
GuiScreen gui = event.getGui();
if (gui instanceof GuiContainer || gui instanceof RecipesGui) {
ItemListOverlayInternal itemListOverlayInternal = itemListOverlay.create(gui);
inputHandler = new InputHandler(runtime, itemListOverlayInternal);
} else {
inputHandler = null;
}
}
@SubscribeEvent
public void onGuiOpen(GuiOpenEvent event) {
ItemListOverlay itemListOverlay = runtime.getItemListOverlay();
GuiScreen gui = event.getGui();
if (gui instanceof GuiContainer) {
GuiContainer guiContainer = (GuiContainer) gui;
if (previousGui != guiContainer) {
previousGui = guiContainer;
if (itemListOverlay.isOpen()) {
itemListOverlay.close();
}
}
} else if (!(gui instanceof RecipesGui)) {
if (itemListOverlay.isOpen()) {
itemListOverlay.close();
}
}
}
@SubscribeEvent
public void onDrawBackgroundEventPost(GuiScreenEvent.BackgroundDrawnEvent event) {
ItemListOverlay itemListOverlay = runtime.getItemListOverlay();
ItemListOverlayInternal itemListOverlayInternal = itemListOverlay.getInternal();
if (itemListOverlayInternal != null) {
GuiScreen gui = event.getGui();
if (itemListOverlayInternal.hasScreenChanged(gui)) {
itemListOverlayInternal = itemListOverlay.create(gui);
inputHandler = new InputHandler(runtime, itemListOverlayInternal);
}
if (itemListOverlayInternal != null) {
itemListOverlayInternal.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.guiLeft, event.getMouseY() - guiContainer.guiTop) != null) {
TooltipRenderer.drawHoveringText(guiContainer.mc, showRecipesText, event.getMouseX(), event.getMouseY());
}
}
ItemListOverlay itemListOverlay = runtime.getItemListOverlay();
ItemListOverlayInternal itemListOverlayInternal = itemListOverlay.getInternal();
if (itemListOverlayInternal != null) {
itemListOverlayInternal.drawTooltips(gui.mc, event.getMouseX(), event.getMouseY());
}
}
@SubscribeEvent
public void onClientTick(TickEvent.ClientTickEvent event) {
if (event.phase == TickEvent.Phase.END) {
return;
}
ItemListOverlay itemListOverlay = runtime.getItemListOverlay();
ItemListOverlayInternal itemListOverlayInternal = itemListOverlay.getInternal();
if (itemListOverlayInternal != null) {
itemListOverlayInternal.handleTick();
}
}
@SubscribeEvent
public void onGuiKeyboardEvent(GuiScreenEvent.KeyboardInputEvent.Pre event) {
if (inputHandler != null) {
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);
}
}
}