Sfoglia il codice sorgente

Disable toggle sprint/sneak buttons in vanilla accessibility options screen

chylex 4 anni fa
parent
commit
572e1f16c8

+ 24 - 3
src/main/java/chylex/bettercontrols/gui/ControlsScreenPatcher.java → src/main/java/chylex/bettercontrols/gui/ScreenPatcher.java

@@ -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;
+				}
+			});
+	}
 }

+ 9 - 3
src/main/java/chylex/bettercontrols/mixin/HookOpenScreen.java

@@ -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);
+			}
 		}
 	}
 }