diff --git a/src/main/java/chylex/bettercontrols/gui/BetterControlsScreen.java b/src/main/java/chylex/bettercontrols/gui/BetterControlsScreen.java index c0cb658..d4212e7 100644 --- a/src/main/java/chylex/bettercontrols/gui/BetterControlsScreen.java +++ b/src/main/java/chylex/bettercontrols/gui/BetterControlsScreen.java @@ -16,8 +16,8 @@ import net.minecraft.client.KeyMapping; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.components.CycleButton; import net.minecraft.client.gui.components.events.GuiEventListener; -import net.minecraft.client.gui.screens.OptionsSubScreen; import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.options.OptionsSubScreen; import net.minecraft.network.chat.Component; import org.jetbrains.annotations.Nullable; import org.lwjgl.glfw.GLFW; @@ -211,9 +211,7 @@ public class BetterControlsScreen extends OptionsSubScreen { } @Override - public void init() { - super.init(); - + protected void addContents() { allKeyBindings.clear(); final List<GuiEventListener> elements = new ArrayList<>(); @@ -234,6 +232,9 @@ public class BetterControlsScreen extends OptionsSubScreen { optionsWidget = addRenderableWidget(new OptionListWidget(width, layout.getContentHeight(), layout.getHeaderHeight(), y - TITLE_MARGIN_TOP + BOTTOM_PADDING, elements)); } + @Override + protected void addOptions() {} + @Override protected void repositionElements() { super.repositionElements(); diff --git a/src/main/java/chylex/bettercontrols/mixin/HookControlsListWidget.java b/src/main/java/chylex/bettercontrols/mixin/HookControlsListWidget.java index 517da14..2dd0ec3 100644 --- a/src/main/java/chylex/bettercontrols/mixin/HookControlsListWidget.java +++ b/src/main/java/chylex/bettercontrols/mixin/HookControlsListWidget.java @@ -5,8 +5,8 @@ import net.minecraft.client.KeyMapping; import net.minecraft.client.Minecraft; import net.minecraft.client.Options; import net.minecraft.client.gui.components.ContainerObjectSelectionList; -import net.minecraft.client.gui.screens.controls.KeyBindsList; -import net.minecraft.client.gui.screens.controls.KeyBindsList.Entry; +import net.minecraft.client.gui.screens.options.controls.KeyBindsList; +import net.minecraft.client.gui.screens.options.controls.KeyBindsList.Entry; import org.apache.commons.lang3.ArrayUtils; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; diff --git a/src/main/java/chylex/bettercontrols/mixin/HookControlsScreen.java b/src/main/java/chylex/bettercontrols/mixin/HookControlsScreen.java index 007979c..5958589 100644 --- a/src/main/java/chylex/bettercontrols/mixin/HookControlsScreen.java +++ b/src/main/java/chylex/bettercontrols/mixin/HookControlsScreen.java @@ -4,14 +4,13 @@ import chylex.bettercontrols.gui.BetterControlsScreen; import net.minecraft.client.Minecraft; import net.minecraft.client.Options; import net.minecraft.client.gui.components.Button; -import net.minecraft.client.gui.components.OptionsList; -import net.minecraft.client.gui.components.events.GuiEventListener; -import net.minecraft.client.gui.screens.OptionsSubScreen; import net.minecraft.client.gui.screens.Screen; -import net.minecraft.client.gui.screens.controls.ControlsScreen; +import net.minecraft.client.gui.screens.options.OptionsSubScreen; +import net.minecraft.client.gui.screens.options.controls.ControlsScreen; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -24,20 +23,18 @@ public abstract class HookControlsScreen extends OptionsSubScreen { super(parentScreen, options, title); } - @Inject(method = "init", at = @At("RETURN")) - public void afterInit(final CallbackInfo ci) { + @Inject(method = "addOptions", at = @At("RETURN")) + public void afterAddOptions(final CallbackInfo ci) { @SuppressWarnings("ConstantConditions") final ControlsScreen screen = (ControlsScreen)(Object)this; - for (final GuiEventListener child : children()) { - if (child instanceof final OptionsList optionsList) { - final MutableComponent buttonTitle = BetterControlsScreen.TITLE.plainCopy().append("..."); - optionsList.addSmall(List.of(Button.builder(buttonTitle, btn -> showOptionsScreen(screen)).build())); - break; - } + if (list != null) { + final MutableComponent buttonTitle = BetterControlsScreen.TITLE.plainCopy().append("..."); + list.addSmall(List.of(Button.builder(buttonTitle, btn -> showOptionsScreen(screen)).build())); } } + @Unique private static void showOptionsScreen(final ControlsScreen screen) { final Minecraft mc = Minecraft.getInstance(); mc.setScreen(new BetterControlsScreen(mc, screen)); diff --git a/src/main/java/chylex/bettercontrols/mixin/HookLoadGameOptions.java b/src/main/java/chylex/bettercontrols/mixin/HookLoadGameOptions.java index 9c6fa27..8a3dce1 100644 --- a/src/main/java/chylex/bettercontrols/mixin/HookLoadGameOptions.java +++ b/src/main/java/chylex/bettercontrols/mixin/HookLoadGameOptions.java @@ -10,12 +10,14 @@ import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mutable; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(Options.class) public abstract class HookLoadGameOptions { + @Unique private boolean hasLoaded = false; @Mutable