diff options
| author | Linnea Gräf <nea@nea.moe> | 2025-09-06 17:48:07 +0200 |
|---|---|---|
| committer | Linnea Gräf <nea@nea.moe> | 2025-09-06 17:48:07 +0200 |
| commit | 67da8fd538070bcb652538741fcfe89252173abe (patch) | |
| tree | 24053cc0b409a15f562289b8b3effd13f6de4bd0 /src/main/java | |
| parent | d62ee562abe14cf06275b30411226e440a6ac3a7 (diff) | |
| download | Firmament-67da8fd538070bcb652538741fcfe89252173abe.tar.gz Firmament-67da8fd538070bcb652538741fcfe89252173abe.tar.bz2 Firmament-67da8fd538070bcb652538741fcfe89252173abe.zip | |
feat: add support for mouse button binds
Diffstat (limited to 'src/main/java')
3 files changed, 38 insertions, 8 deletions
diff --git a/src/main/java/moe/nea/firmament/mixins/KeyPressInWorldEventPatch.java b/src/main/java/moe/nea/firmament/mixins/KeyPressInWorldEventPatch.java index d2b3f91..afd3104 100644 --- a/src/main/java/moe/nea/firmament/mixins/KeyPressInWorldEventPatch.java +++ b/src/main/java/moe/nea/firmament/mixins/KeyPressInWorldEventPatch.java @@ -4,6 +4,8 @@ package moe.nea.firmament.mixins; import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; import moe.nea.firmament.events.WorldKeyboardEvent; +import moe.nea.firmament.keybindings.GenericInputAction; +import moe.nea.firmament.keybindings.InputModifiers; import net.minecraft.client.Keyboard; import net.minecraft.client.util.InputUtil; import org.spongepowered.asm.mixin.Mixin; @@ -12,9 +14,9 @@ import org.spongepowered.asm.mixin.injection.At; @Mixin(Keyboard.class) public class KeyPressInWorldEventPatch { - @WrapWithCondition(method = "onKey", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/option/KeyBinding;onKeyPressed(Lnet/minecraft/client/util/InputUtil$Key;)V")) - public boolean onKeyBoardInWorld(InputUtil.Key key, long window, int _key, int scancode, int action, int modifiers) { - var event = WorldKeyboardEvent.Companion.publish(new WorldKeyboardEvent(_key, scancode, modifiers)); + @WrapWithCondition(method = "onKey", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/option/KeyBinding;onKeyPressed(Lnet/minecraft/client/util/InputUtil$Key;)V")) + public boolean onKeyBoardInWorld(InputUtil.Key key, long window, int _key, int scancode, int action, int modifiers) { + var event = WorldKeyboardEvent.Companion.publish(new WorldKeyboardEvent(GenericInputAction.key(_key, scancode), InputModifiers.of(modifiers))); return !event.getCancelled(); } } diff --git a/src/main/java/moe/nea/firmament/mixins/MixinHandledScreen.java b/src/main/java/moe/nea/firmament/mixins/MixinHandledScreen.java index 38db0ba..13f20ce 100644 --- a/src/main/java/moe/nea/firmament/mixins/MixinHandledScreen.java +++ b/src/main/java/moe/nea/firmament/mixins/MixinHandledScreen.java @@ -4,11 +4,8 @@ package moe.nea.firmament.mixins; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import moe.nea.firmament.events.*; import moe.nea.firmament.events.HandledScreenClickEvent; -import moe.nea.firmament.events.HandledScreenForegroundEvent; -import moe.nea.firmament.events.HandledScreenKeyPressedEvent; -import moe.nea.firmament.events.IsSlotProtectedEvent; -import moe.nea.firmament.events.SlotRenderEvents; import moe.nea.firmament.keybindings.GenericInputAction; import moe.nea.firmament.keybindings.InputModifiers; import net.minecraft.client.gui.DrawContext; @@ -62,7 +59,19 @@ public abstract class MixinHandledScreen<T extends ScreenHandler> { @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true) public void onMouseClicked(double mouseX, double mouseY, int button, CallbackInfoReturnable<Boolean> cir) { - if (HandledScreenClickEvent.Companion.publish(new HandledScreenClickEvent((HandledScreen<?>) (Object) this, mouseX, mouseY, button)).getCancelled()) { + if (HandledScreenKeyPressedEvent.Companion.publish(new HandledScreenKeyPressedEvent((HandledScreen<?>) (Object) this, + GenericInputAction.mouse(button), InputModifiers.current())).getCancelled()) { + cir.setReturnValue(true); + } + } + + @Inject(method = "mouseReleased", at = @At("HEAD"), cancellable = true) + private void onMouseReleased(double mouseX, double mouseY, int button, CallbackInfoReturnable<Boolean> cir) { + var self = (HandledScreen<?>) (Object) this; + var clickEvent = new HandledScreenClickEvent(self, mouseX, mouseY, button); + var keyEvent = new HandledScreenKeyReleasedEvent(self, GenericInputAction.mouse(button), InputModifiers.current()); + if (HandledScreenClickEvent.Companion.publish(clickEvent).getCancelled() + || HandledScreenKeyReleasedEvent.Companion.publish(keyEvent).getCancelled()) { cir.setReturnValue(true); } } diff --git a/src/main/java/moe/nea/firmament/mixins/MousePressInWorldEventPatch.java b/src/main/java/moe/nea/firmament/mixins/MousePressInWorldEventPatch.java new file mode 100644 index 0000000..8bd489c --- /dev/null +++ b/src/main/java/moe/nea/firmament/mixins/MousePressInWorldEventPatch.java @@ -0,0 +1,19 @@ +package moe.nea.firmament.mixins; + +import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; +import moe.nea.firmament.events.WorldKeyboardEvent; +import moe.nea.firmament.keybindings.GenericInputAction; +import moe.nea.firmament.keybindings.InputModifiers; +import net.minecraft.client.Mouse; +import net.minecraft.client.util.InputUtil; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(Mouse.class) +public class MousePressInWorldEventPatch { + @WrapWithCondition(method = "onMouseButton", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/option/KeyBinding;onKeyPressed(Lnet/minecraft/client/util/InputUtil$Key;)V")) + public boolean onKeyBoardInWorld(InputUtil.Key key, long window, int button, int action, int mods) { + var event = WorldKeyboardEvent.Companion.publish(new WorldKeyboardEvent(GenericInputAction.mouse(button), InputModifiers.of(mods))); + return !event.getCancelled(); + } +} |
