diff --git a/build.gradle.kts b/build.gradle.kts index a484da2..facab2c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,3 +1,12 @@ plugins { id("roundalib") version "0.3.6" } + +repositories { + maven("https://jitpack.io") +} + +dependencies { + implementation("com.github.LlamaLad7:MixinExtras:0.1.1") + annotationProcessor("com.github.LlamaLad7:MixinExtras:0.1.1") +} 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 f9f98f8..5a11980 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 @@ -39,7 +39,7 @@ import java.util.Optional; public abstract class AbstractArmorStandScreen extends HandledScreen - implements HasArmorStand, HasMessageRenderer { + implements HasArmorStand, HasMessageRenderer, PassesEventsThrough { protected static final int SCREEN_EDGE_PAD = 4; protected static final int BETWEEN_PAD = 2; protected static final int NAV_BUTTON_BOTTOM_PADDING = 1; @@ -55,6 +55,7 @@ public abstract class AbstractArmorStandScreen extends HandledScreen info) { info.setReturnValue(((AbstractArmorStandScreen) currentScreen).shouldHighlight(entity)); } + + // @formatter:off + @ModifyExpressionValue( + method = "tick", + at = @At( + value = "FIELD", + target = "Lnet/minecraft/client/MinecraftClient;currentScreen:Lnet/minecraft/client/gui/screen/Screen;" + ), + slice = @Slice( + from = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/gui/hud/InGameHud;resetDebugHudChunk()V" + ), + to = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/MinecraftClient;handleInputEvents()V" + ) + ) + ) + // @formatter:on + private Screen modifyCurrentScreen(Screen screen) { + return + screen instanceof PassesEventsThrough && ((PassesEventsThrough) screen).shouldPassEvents() + ? null + : screen; + } } diff --git a/src/main/java/me/roundaround/armorstands/mixin/MouseMixin.java b/src/main/java/me/roundaround/armorstands/mixin/MouseMixin.java index 461ff61..ef2c69b 100644 --- a/src/main/java/me/roundaround/armorstands/mixin/MouseMixin.java +++ b/src/main/java/me/roundaround/armorstands/mixin/MouseMixin.java @@ -1,15 +1,17 @@ package me.roundaround.armorstands.mixin; +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import me.roundaround.armorstands.client.gui.screen.AbstractArmorStandScreen; +import me.roundaround.armorstands.client.gui.screen.PassesEventsThrough; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.Mouse; +import net.minecraft.client.gui.screen.Screen; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import me.roundaround.armorstands.client.gui.screen.AbstractArmorStandScreen; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.Mouse; - @Mixin(Mouse.class) public abstract class MouseMixin { @Shadow @@ -21,4 +23,19 @@ public void isCursorLocked(CallbackInfoReturnable info) { info.setReturnValue(((AbstractArmorStandScreen) client.currentScreen).isCursorLocked()); } } + + @ModifyExpressionValue( + method = "onMouseButton", + at = @At( + value = "FIELD", + target = "Lnet/minecraft/client/MinecraftClient;currentScreen:Lnet/minecraft/client/gui/screen/Screen;", + ordinal = 3 + ) + ) + private Screen modifyCurrentScreen(Screen screen) { + return + screen instanceof PassesEventsThrough && ((PassesEventsThrough) screen).shouldPassEvents() + ? null + : screen; + } } diff --git a/src/main/java/me/roundaround/armorstands/mixin/SliderWidgetMixin.java b/src/main/java/me/roundaround/armorstands/mixin/SliderWidgetMixin.java index 8e915a3..0839c7b 100644 --- a/src/main/java/me/roundaround/armorstands/mixin/SliderWidgetMixin.java +++ b/src/main/java/me/roundaround/armorstands/mixin/SliderWidgetMixin.java @@ -10,7 +10,7 @@ public abstract class SliderWidgetMixin { @ModifyArg( method = "renderButton", at = @At( value = "INVOKE", - target = "Lnet/minecraft/client/gui/widget/SliderWidget;drawNineSlicedTexture(Lnet/minecraft/client/util/math/MatrixStack;IIIIIIIIII)V", + target = "Lnet/minecraft/client/gui/DrawContext;drawNineSlicedTexture(Lnet/minecraft/util/Identifier;IIIIIIIIII)V", ordinal = 1 ), index = 4 ) diff --git a/src/main/resources/armorstands.mixins.json b/src/main/resources/armorstands.mixins.json index 85eee59..cfd61e3 100644 --- a/src/main/resources/armorstands.mixins.json +++ b/src/main/resources/armorstands.mixins.json @@ -15,6 +15,7 @@ "InGameHudAccessor", "InGameHudMixin", "KeyBindingAccessor", + "KeyboardMixin", "LivingEntityMixin", "MinecraftClientMixin", "MouseAccessor", diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 7260993..4a98100 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -28,8 +28,8 @@ ], "depends": { "fabricloader": ">=0.13.3", - "fabric": "*", - "minecraft": "1.19.x", + "fabric-api": "*", + "minecraft": ">=1.20-beta.1 <1.21", "java": ">=17" } }