From e3e5ce1760f96e8571eb907516bb3fc342f90146 Mon Sep 17 00:00:00 2001 From: Fitch <347134644+FitchWorks@users.noreply.github.com> Date: Wed, 4 Nov 2026 19:12:04 -0800 Subject: [PATCH] Prevent crash from @Redirect in the Mixin Switching to @ModifyExpressionValue -- MixinExtras 0.5.4 (bundled in Fabric Loader 0.19.2), has a bug when parsing target annotations (like array targets). We can use @ModifyExpressionValue which also doesn't check its children twice unnecessarily. --- .../yacl3/mixin/ContainerEventHandlerMixin.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/dev/isxander/yacl3/mixin/ContainerEventHandlerMixin.java b/src/main/java/dev/isxander/yacl3/mixin/ContainerEventHandlerMixin.java index 56175914..d6146d32 100644 --- a/src/main/java/dev/isxander/yacl3/mixin/ContainerEventHandlerMixin.java +++ b/src/main/java/dev/isxander/yacl3/mixin/ContainerEventHandlerMixin.java @@ -1,5 +1,6 @@ package dev.isxander.yacl3.mixin; +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import com.llamalad7.mixinextras.sugar.Local; import net.minecraft.client.gui.components.events.ContainerEventHandler; import org.spongepowered.asm.mixin.Mixin; @@ -11,7 +12,6 @@ import net.minecraft.client.gui.navigation.ScreenRectangle; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; import java.util.List; @@ -21,16 +21,16 @@ public interface ContainerEventHandlerMixin { // through the YACL options screen. This can also apply to vanilla as navigating left or right // should never result in focusing the always-at-the-top tab bar. // Without this, navigating right from the option list focuses the tab bar, not the action buttons/description. - @Redirect( + @ModifyExpressionValue( method = {"nextFocusPathVaguelyInDirection", "nextFocusPathInDirection"}, at = @At( value = "INVOKE", target = "Lnet/minecraft/client/gui/components/events/ContainerEventHandler;children()Ljava/util/List;" ) ) - default List modifyFocusCandidates(ContainerEventHandler instance, @Local(argsOnly = true) ScreenDirection direction) { + default List modifyFocusCandidates(List original, @Local(argsOnly = true) ScreenDirection direction) { if (direction.getAxis() == ScreenAxis.HORIZONTAL) - return instance.children().stream().filter(child -> !(child instanceof TabNavigationBar)).toList(); - return instance.children(); + return original.stream().filter(child -> !(child instanceof TabNavigationBar)).toList(); + return original; } }