1
0
mirror of https://github.com/chylex/Better-Controls.git synced 2025-05-12 13:34:04 +02:00

Disable toggle sprint/sneak buttons in vanilla accessibility options screen

This commit is contained in:
chylex 2020-10-18 08:14:29 +02:00
parent 85f86b52ed
commit 572e1f16c8
2 changed files with 33 additions and 6 deletions
src/main/java/chylex/bettercontrols

View File

@ -2,17 +2,19 @@ package chylex.bettercontrols.gui;
import chylex.bettercontrols.mixin.AccessScreenButtons;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.Element;
import net.minecraft.client.gui.screen.options.AccessibilityOptionsScreen;
import net.minecraft.client.gui.screen.options.ControlsOptionsScreen;
import net.minecraft.client.gui.widget.AbstractButtonWidget;
import net.minecraft.client.gui.widget.ButtonListWidget;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.gui.widget.OptionButtonWidget;
import net.minecraft.client.options.Option;
import java.util.List;
public final class ControlsScreenPatcher{
private ControlsScreenPatcher(){}
public final class ScreenPatcher{
private ScreenPatcher(){}
public static void onOpened(final ControlsOptionsScreen screen){
public static void onControlsScreenOpened(final ControlsOptionsScreen screen){
final AccessScreenButtons accessor = (AccessScreenButtons)screen;
final List<? extends Element> children = screen.children();
@ -33,4 +35,23 @@ public final class ControlsScreenPatcher{
}));
}
}
public static void onAccessibilityScreenOpened(final AccessibilityOptionsScreen screen){
final AccessScreenButtons accessor = (AccessScreenButtons)screen;
screen.children()
.stream()
.filter(it -> it instanceof ButtonListWidget)
.flatMap(it -> ((ButtonListWidget)it).children().stream())
.flatMap(it -> it.children().stream())
.filter(it -> it instanceof OptionButtonWidget)
.forEach(it -> {
final OptionButtonWidget button = (OptionButtonWidget)it;
final Option option = button.getOption();
if (option == Option.SPRINT_TOGGLED || option == Option.SNEAK_TOGGLED){
button.active = false;
}
});
}
}

View File

@ -1,7 +1,8 @@
package chylex.bettercontrols.mixin;
import chylex.bettercontrols.gui.ControlsScreenPatcher;
import chylex.bettercontrols.gui.ScreenPatcher;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.options.AccessibilityOptionsScreen;
import net.minecraft.client.gui.screen.options.ControlsOptionsScreen;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
@ -15,8 +16,13 @@ public abstract class HookOpenScreen{
final MinecraftClient mc = MinecraftClient.getInstance();
final Screen screen = mc.currentScreen;
if (screen != null && screen.getClass() == ControlsOptionsScreen.class && !Screen.hasAltDown()){
ControlsScreenPatcher.onOpened((ControlsOptionsScreen)screen);
if (screen != null && !Screen.hasAltDown()){
if (screen.getClass() == ControlsOptionsScreen.class){
ScreenPatcher.onControlsScreenOpened((ControlsOptionsScreen)screen);
}
else if (screen.getClass() == AccessibilityOptionsScreen.class){
ScreenPatcher.onAccessibilityScreenOpened((AccessibilityOptionsScreen)screen);
}
}
}
}