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 {
}
*//*?}*/
|