aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/dev/isxander/yacl3/mixin/ContainerEventHandlerMixin.java
blob: bd5ada0d9c934154aaaae32a7389eff8ffbf7046 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/*? if !forge {*/
package dev.isxander.yacl3.mixin;

import net.minecraft.client.gui.components.events.ContainerEventHandler;
import net.minecraft.client.gui.components.events.GuiEventListener;
import net.minecraft.client.gui.components.tabs.TabNavigationBar;
import net.minecraft.client.gui.navigation.FocusNavigationEvent;
import net.minecraft.client.gui.navigation.ScreenAxis;
import net.minecraft.client.gui.navigation.ScreenDirection;
import net.minecraft.client.gui.navigation.ScreenRectangle;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;

import java.util.List;


@Mixin(ContainerEventHandler.class)
public interface ContainerEventHandlerMixin {
     // This mixin is used to prevent the tab bar from being focused when navigating left or right
     // 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(method = {"nextFocusPathVaguelyInDirection", "nextFocusPathInDirection"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/events/ContainerEventHandler;children()Ljava/util/List;"))
    default List<?> modifyFocusCandidates(ContainerEventHandler instance, ScreenRectangle screenArea, ScreenDirection direction, @Nullable GuiEventListener focused, FocusNavigationEvent event) {
        if (direction.getAxis() == ScreenAxis.HORIZONTAL)
            return instance.children().stream().filter(child -> !(child instanceof TabNavigationBar)).toList();
        return instance.children();
    }
}
/*?} else {*//*
@Mixin(targets = {})
public class ContainerEventHandlerMixin {

}
*//*?}*/