Skip to content
This repository was archived by the owner on Jun 3, 2024. It is now read-only.

Commit 08952fc

Browse files
committed
redirect and inject
Signed-off-by: shedaniel <daniel@shedaniel.me>
1 parent 73ec3d8 commit 08952fc

1 file changed

Lines changed: 19 additions & 13 deletions

File tree

patchwork-gui/src/main/java/com/patchworkmc/mixin/gui/MixinKeyboard.java

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@
2222
import net.minecraftforge.client.event.GuiScreenEvent;
2323
import net.minecraftforge.common.MinecraftForge;
2424
import org.spongepowered.asm.mixin.Mixin;
25-
import org.spongepowered.asm.mixin.Overwrite;
2625
import org.spongepowered.asm.mixin.Shadow;
2726
import org.spongepowered.asm.mixin.injection.At;
2827
import org.spongepowered.asm.mixin.injection.Inject;
28+
import org.spongepowered.asm.mixin.injection.Redirect;
2929
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
3030

3131
import net.minecraft.client.Keyboard;
@@ -74,21 +74,27 @@ private void postKeyEvent(int i, boolean[] bls, ParentElement element, int key,
7474
}
7575
}
7676

77-
@Overwrite
78-
private static void method_1458(Element element, int character, int mods) {
79-
if (!MinecraftForge.EVENT_BUS.post(new GuiScreenEvent.KeyboardCharTypedEvent.Pre((Screen) element, (char) character, mods))) {
80-
if (!element.charTyped((char) character, mods)) {
81-
MinecraftForge.EVENT_BUS.post(new GuiScreenEvent.KeyboardCharTypedEvent.Post((Screen) element, (char) character, mods));
82-
}
77+
@Inject(method = "method_1458", at = @At("HEAD"), cancellable = true)
78+
private static void method_1458(Element element, int character, int mods, CallbackInfo info) {
79+
if (MinecraftForge.EVENT_BUS.post(new GuiScreenEvent.KeyboardCharTypedEvent.Pre((Screen) element, (char) character, mods))) {
80+
info.cancel();
8381
}
8482
}
8583

86-
@Overwrite
87-
private static void method_1473(Element element, char character, int mods) {
88-
if (MinecraftForge.EVENT_BUS.post(new GuiScreenEvent.KeyboardCharTypedEvent.Pre((Screen) element, character, mods))) {
89-
if (!element.charTyped(character, mods)) {
90-
MinecraftForge.EVENT_BUS.post(new GuiScreenEvent.KeyboardCharTypedEvent.Post((Screen) element, character, mods));
91-
}
84+
@Redirect(method = "method_1458", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/Element;charTyped(CI)Z"))
85+
private static boolean method_1458(Element element, char character, int mods) {
86+
return element.charTyped(character, mods) || MinecraftForge.EVENT_BUS.post(new GuiScreenEvent.KeyboardCharTypedEvent.Post((Screen) element, character, mods));
87+
}
88+
89+
@Inject(method = "method_1473", at = @At("HEAD"), cancellable = true)
90+
private static void method_1473(Element element, char character, int mods, CallbackInfo info) {
91+
if (MinecraftForge.EVENT_BUS.post(new GuiScreenEvent.KeyboardCharTypedEvent.Pre((Screen) element, (char) character, mods))) {
92+
info.cancel();
9293
}
9394
}
95+
96+
@Redirect(method = "method_1473", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/Element;charTyped(CI)Z"))
97+
private static boolean method_1473(Element element, char character, int mods) {
98+
return element.charTyped(character, mods) || MinecraftForge.EVENT_BUS.post(new GuiScreenEvent.KeyboardCharTypedEvent.Post((Screen) element, character, mods));
99+
}
94100
}

0 commit comments

Comments
 (0)