blob: 9fe8c58a7bd34495c8122fe2c11964c679b86ede (
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
|
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();
}
}
|