diff --git a/README.md b/README.md index 15b2377..ee76c38 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Roundaround's Armor Stands - + Place, pose, and dress armor stands with an easy-to-use UI. diff --git a/build.gradle.kts b/build.gradle.kts index facab2c..2895d60 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,4 +9,5 @@ repositories { dependencies { implementation("com.github.LlamaLad7:MixinExtras:0.1.1") annotationProcessor("com.github.LlamaLad7:MixinExtras:0.1.1") + include("com.github.LlamaLad7:MixinExtras:0.1.1") } diff --git a/src/main/java/me/roundaround/armorstands/ArmorStandsPreLaunch.java b/src/main/java/me/roundaround/armorstands/ArmorStandsPreLaunch.java new file mode 100644 index 0000000..2e0a8e6 --- /dev/null +++ b/src/main/java/me/roundaround/armorstands/ArmorStandsPreLaunch.java @@ -0,0 +1,10 @@ +package me.roundaround.armorstands; + +import com.llamalad7.mixinextras.MixinExtrasBootstrap; +import net.fabricmc.loader.api.entrypoint.PreLaunchEntrypoint; + +public class ArmorStandsPreLaunch implements PreLaunchEntrypoint { + public void onPreLaunch() { + MixinExtrasBootstrap.init(); + } +} diff --git a/src/main/java/me/roundaround/armorstands/client/gui/screen/AbstractArmorStandScreen.java b/src/main/java/me/roundaround/armorstands/client/gui/screen/AbstractArmorStandScreen.java index 5a11980..969e35d 100644 --- a/src/main/java/me/roundaround/armorstands/client/gui/screen/AbstractArmorStandScreen.java +++ b/src/main/java/me/roundaround/armorstands/client/gui/screen/AbstractArmorStandScreen.java @@ -259,15 +259,14 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { lockCursor(); return true; case GLFW.GLFW_KEY_LEFT: - if (this.client.options.leftKey.matchesKey(keyCode, scanCode) && !Screen.hasControlDown()) { + if (!Screen.hasControlDown()) { break; } playClickSound(); goToPreviousScreen(); return true; case GLFW.GLFW_KEY_RIGHT: - if (this.client.options.rightKey.matchesKey(keyCode, scanCode) && - !Screen.hasControlDown()) { + if (!Screen.hasControlDown()) { break; } playClickSound(); diff --git a/src/main/java/me/roundaround/armorstands/mixin/HandledScreenMixin.java b/src/main/java/me/roundaround/armorstands/mixin/HandledScreenMixin.java new file mode 100644 index 0000000..859a157 --- /dev/null +++ b/src/main/java/me/roundaround/armorstands/mixin/HandledScreenMixin.java @@ -0,0 +1,25 @@ +package me.roundaround.armorstands.mixin; + +import me.roundaround.armorstands.client.gui.screen.PassesEventsThrough; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.ingame.HandledScreen; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(HandledScreen.class) +public abstract class HandledScreenMixin extends Screen { + protected HandledScreenMixin() { + super(null); + } + + @Inject(method = "keyPressed", at = @At(value = "HEAD"), cancellable = true) + public void keyPressed( + int keyCode, int scanCode, int modifiers, CallbackInfoReturnable info) { + if (this instanceof PassesEventsThrough passesEventsThrough && + passesEventsThrough.shouldPassEvents()) { + info.setReturnValue(super.keyPressed(keyCode, scanCode, modifiers)); + } + } +} diff --git a/src/main/java/me/roundaround/armorstands/mixin/KeyboardMixin.java b/src/main/java/me/roundaround/armorstands/mixin/KeyboardMixin.java index dc40b91..6f13bf7 100644 --- a/src/main/java/me/roundaround/armorstands/mixin/KeyboardMixin.java +++ b/src/main/java/me/roundaround/armorstands/mixin/KeyboardMixin.java @@ -1,41 +1,23 @@ package me.roundaround.armorstands.mixin; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; -import me.roundaround.armorstands.ArmorStandsMod; -import me.roundaround.armorstands.client.gui.screen.AbstractArmorStandScreen; import me.roundaround.armorstands.client.gui.screen.PassesEventsThrough; import net.minecraft.client.Keyboard; import net.minecraft.client.gui.screen.Screen; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(Keyboard.class) public class KeyboardMixin { @ModifyExpressionValue( - method = "onKey", - at = @At( - value = "FIELD", - target = "Lnet/minecraft/client/MinecraftClient;currentScreen:Lnet/minecraft/client/gui/screen/Screen;", - ordinal = 2 - ) + method = "onKey", at = @At( + value = "FIELD", + target = "Lnet/minecraft/client/MinecraftClient;currentScreen:Lnet/minecraft/client/gui/screen/Screen;", + ordinal = 2 + ) ) private Screen modifyCurrentScreen(Screen screen) { - if (screen instanceof AbstractArmorStandScreen) { - ArmorStandsMod.LOGGER.info("We're in the armor stand screen!"); - } - if (screen instanceof PassesEventsThrough && ((PassesEventsThrough) screen).shouldPassEvents()) { - ArmorStandsMod.LOGGER.info("We're in a screen that passes events through!"); - } - return - screen instanceof PassesEventsThrough && ((PassesEventsThrough) screen).shouldPassEvents() - ? null - : screen; - } - - @Inject(method = "onKey", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/InputUtil;fromKeyCode(II)Lnet/minecraft/client/util/InputUtil$Key;", shift = At.Shift.AFTER)) - private void afterScreenCheck(long window, int key, int scancode, int action, int modifiers, CallbackInfo info) { - ArmorStandsMod.LOGGER.info("We've made it!"); + return screen instanceof PassesEventsThrough passesEventsThrough && + passesEventsThrough.shouldPassEvents() ? null : screen; } } diff --git a/src/main/resources/armorstands.mixins.json b/src/main/resources/armorstands.mixins.json index cfd61e3..3fc5e8d 100644 --- a/src/main/resources/armorstands.mixins.json +++ b/src/main/resources/armorstands.mixins.json @@ -12,6 +12,7 @@ ], "client": [ "ArmorStandEntityClientMixin", + "HandledScreenMixin", "InGameHudAccessor", "InGameHudMixin", "KeyBindingAccessor", diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 4a98100..76da07a 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -3,7 +3,7 @@ "id": "armorstands", "version": "${version}", "name": "Armor Stands", - "description": "Place, pose, and dress armor stands with an easy-to-use UI.", + "description": "Place, pose, and dress armor stands with an easy-to-use UI.\n${library}", "authors": [ "Roundaround" ], @@ -16,6 +16,9 @@ "icon": "assets/armorstands/icon.png", "environment": "*", "entrypoints": { + "preLaunch": [ + "me.roundaround.armorstands.ArmorStandsPreLaunch" + ], "client": [ "me.roundaround.armorstands.client.ArmorStandsClientMod" ],