/
GuiEventHandler.java
135 lines (118 loc) · 4.38 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
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.RecipesGui;
import mezz.jei.gui.TooltipRenderer;
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) {
itemListOverlay.initGui(gui);
RecipeRegistry recipeRegistry = runtime.getRecipeRegistry();
IIngredientRegistry ingredientRegistry = runtime.getIngredientRegistry();
RecipesGui recipesGui = runtime.getRecipesGui();
inputHandler = new InputHandler(recipeRegistry, ingredientRegistry, recipesGui, itemListOverlay);
} 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();
if (itemListOverlay.isOpen()) {
GuiScreen gui = event.getGui();
itemListOverlay.updateGui(gui);
itemListOverlay.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();
if (itemListOverlay.isOpen()) {
itemListOverlay.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();
if (itemListOverlay.isOpen()) {
itemListOverlay.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);
}
}
}