/
EventRegistration.java
128 lines (119 loc) · 4.89 KB
/
EventRegistration.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
package mezz.jei.forge.startup;
import com.mojang.blaze3d.vertex.PoseStack;
import mezz.jei.common.gui.GuiEventHandler;
import mezz.jei.common.input.ClientInputHandler;
import mezz.jei.common.input.UserInput;
import mezz.jei.common.startup.JeiEventHandlers;
import mezz.jei.forge.events.RuntimeEventSubscriptions;
import mezz.jei.forge.input.ForgeUserInput;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
import net.minecraftforge.client.event.ContainerScreenEvent;
import net.minecraftforge.client.event.ScreenEvent;
import net.minecraftforge.event.TickEvent;
public class EventRegistration {
public static void registerEvents(RuntimeEventSubscriptions subscriptions, JeiEventHandlers eventHandlers) {
ClientInputHandler clientInputHandler = eventHandlers.clientInputHandler();
registerClientInputHandler(subscriptions, clientInputHandler);
GuiEventHandler guiEventHandler = eventHandlers.guiEventHandler();
registerGuiHandler(subscriptions, guiEventHandler);
}
private static void registerClientInputHandler(RuntimeEventSubscriptions subscriptions, ClientInputHandler handler) {
subscriptions.register(ScreenEvent.Init.Post.class, event -> handler.onInitGui());
subscriptions.register(ScreenEvent.KeyPressed.Pre.class, event -> {
Screen screen = event.getScreen();
UserInput input = ForgeUserInput.fromEvent(event);
if (handler.onKeyboardKeyPressedPre(screen, input)) {
event.setCanceled(true);
}
});
subscriptions.register(ScreenEvent.KeyPressed.Post.class, event -> {
Screen screen = event.getScreen();
UserInput input = ForgeUserInput.fromEvent(event);
if (handler.onKeyboardKeyPressedPost(screen, input)) {
event.setCanceled(true);
}
});
subscriptions.register(ScreenEvent.CharacterTyped.Pre.class, event -> {
Screen screen = event.getScreen();
char codePoint = event.getCodePoint();
int modifiers = event.getModifiers();
if (handler.onKeyboardCharTypedPre(screen, codePoint, modifiers)) {
event.setCanceled(true);
}
});
subscriptions.register(ScreenEvent.CharacterTyped.Post.class, event -> {
Screen screen = event.getScreen();
char codePoint = event.getCodePoint();
int modifiers = event.getModifiers();
handler.onKeyboardCharTypedPost(screen, codePoint, modifiers);
});
subscriptions.register(ScreenEvent.MouseButtonPressed.Pre.class, event ->
ForgeUserInput.fromEvent(event)
.ifPresent(input -> {
Screen screen = event.getScreen();
if (handler.onGuiMouseClicked(screen, input)) {
event.setCanceled(true);
}
})
);
subscriptions.register(ScreenEvent.MouseButtonReleased.Pre.class, event ->
ForgeUserInput.fromEvent(event)
.ifPresent(input -> {
Screen screen = event.getScreen();
if (handler.onGuiMouseReleased(screen, input)){
event.setCanceled(true);
}
})
);
subscriptions.register(ScreenEvent.MouseScrolled.Pre.class, event -> {
double mouseX = event.getMouseX();
double mouseY = event.getMouseY();
double scrollDelta = event.getScrollDelta();
if (handler.onGuiMouseScroll(mouseX, mouseY, scrollDelta)) {
event.setCanceled(true);
}
});
}
public static void registerGuiHandler(RuntimeEventSubscriptions subscriptions, GuiEventHandler guiEventHandler) {
subscriptions.register(ScreenEvent.Init.Post.class, event -> {
Screen screen = event.getScreen();
guiEventHandler.onGuiInit(screen);
});
subscriptions.register(ScreenEvent.Opening.class, event -> {
Screen screen = event.getScreen();
guiEventHandler.onGuiOpen(screen);
});
subscriptions.register(ScreenEvent.BackgroundRendered.class, event -> {
Screen screen = event.getScreen();
PoseStack poseStack = event.getPoseStack();
guiEventHandler.onDrawBackgroundPost(screen, poseStack);
});
subscriptions.register(ContainerScreenEvent.Render.Foreground.class, event -> {
AbstractContainerScreen<?> containerScreen = event.getContainerScreen();
PoseStack poseStack = event.getPoseStack();
int mouseX = event.getMouseX();
int mouseY = event.getMouseY();
guiEventHandler.onDrawForeground(containerScreen, poseStack, mouseX, mouseY);
});
subscriptions.register(ScreenEvent.Render.Post.class, event -> {
Screen screen = event.getScreen();
PoseStack poseStack = event.getPoseStack();
int mouseX = event.getMouseX();
int mouseY = event.getMouseY();
guiEventHandler.onDrawScreenPost(screen, poseStack, mouseX, mouseY);
});
subscriptions.register(TickEvent.ClientTickEvent.class, event -> {
if (event.phase == TickEvent.Phase.START) {
guiEventHandler.onClientTick();
}
});
subscriptions.register(ScreenEvent.RenderInventoryMobEffects.class, event -> {
if (guiEventHandler.renderCompactPotionIndicators()) {
// Forcibly renders the potion indicators in compact mode.
// This gives the ingredient list overlay more room to display ingredients.
event.setCompact(true);
}
});
}
}