Skip to content

Commit 0643f46

Browse files
committed
fix selectable button order
1 parent 87d58e5 commit 0643f46

File tree

1 file changed

+22
-5
lines changed

1 file changed

+22
-5
lines changed

src/main/java/fast_reset/client/mixin/GameMenuMixin.java

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package fast_reset.client.mixin;
22

3+
import com.llamalad7.mixinextras.sugar.Share;
4+
import com.llamalad7.mixinextras.sugar.ref.LocalRef;
35
import fast_reset.client.Client;
46
import net.minecraft.client.gui.*;
57
import net.minecraft.client.gui.screen.*;
68
import net.minecraft.client.gui.widget.*;
79
import net.minecraft.text.Text;
10+
import org.jetbrains.annotations.Nullable;
811
import org.spongepowered.asm.mixin.*;
912
import org.spongepowered.asm.mixin.injection.*;
13+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
1014

1115
@Mixin(GameMenuScreen.class)
1216
public abstract class GameMenuMixin extends Screen {
@@ -20,8 +24,11 @@ protected GameMenuMixin(Text title) {
2024
@Unique
2125
private static final int bottomRightWidth = 102;
2226

27+
@Shadow
28+
private @Nullable ButtonWidget exitButton;
29+
2330
@Redirect(method = "initWidgets", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/widget/GridWidget$Adder;add(Lnet/minecraft/client/gui/widget/Widget;I)Lnet/minecraft/client/gui/widget/Widget;"))
24-
private <T extends Widget> T addButtons(GridWidget.Adder instance, T widget, int occupiedColumns) {
31+
private <T extends Widget> T addButtons(GridWidget.Adder instance, T widget, int occupiedColumns, @Share("saveButton") LocalRef<ButtonWidget.Builder> saveButtonStore, @Share("quitButton") LocalRef<T> quitButton) {
2532
final ButtonWidget.Builder saveButton = ButtonWidget.builder(Text.translatable("menu.quitWorld"), (buttonWidgetX) -> {
2633
Client.saveOnQuit = false;
2734
this.disconnect();
@@ -30,7 +37,19 @@ private <T extends Widget> T addButtons(GridWidget.Adder instance, T widget, int
3037
if (Client.buttonLocation == 2) {
3138
// add menu.quitWorld button instead of save button
3239
instance.add(saveButton.width(204).build(), occupiedColumns);
33-
return (T) this.addDrawableChild((ButtonWidget) widget);
40+
quitButton.set(widget);
41+
return null; // warning: GameMenu#exitButton is null here, needs to be set later
42+
}
43+
44+
saveButtonStore.set(saveButton);
45+
return instance.add(widget, occupiedColumns);
46+
}
47+
48+
@Inject(method = "initWidgets", at = @At("TAIL"))
49+
private <T extends Element & Drawable & Selectable> void addFastResetWidget(CallbackInfo ci, @Share("saveButton") LocalRef<ButtonWidget.Builder> saveButtonStore, @Share("quitButton") LocalRef<T> quitButton) {
50+
if (Client.buttonLocation == 2) {
51+
this.exitButton = (ButtonWidget) this.addDrawableChild(quitButton.get());
52+
return;
3453
}
3554

3655
int height = 20;
@@ -52,9 +71,7 @@ private <T extends Widget> T addButtons(GridWidget.Adder instance, T widget, int
5271
}
5372
}
5473

55-
56-
this.addDrawableChild(saveButton.dimensions(x, y, width, height).build());
57-
return instance.add(widget, occupiedColumns);
74+
this.addDrawableChild(saveButtonStore.get().dimensions(x, y, width, height).build());
5875
}
5976

6077
@Redirect(method = "initWidgets", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/widget/ButtonWidget$Builder;width(I)Lnet/minecraft/client/gui/widget/ButtonWidget$Builder;", ordinal = 1))

0 commit comments

Comments
 (0)