Skip to content

Commit d6a16c0

Browse files
committed
Handle the new GridWidget in the pause menu properly
1 parent 5cc73a3 commit d6a16c0

File tree

3 files changed

+25
-5
lines changed

3 files changed

+25
-5
lines changed

src/main/java/se/icus/mag/modsettings/gui/MenuScreensChanger.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
package se.icus.mag.modsettings.gui;
22

3+
import java.util.Optional;
34
import net.fabricmc.fabric.api.client.screen.v1.Screens;
45
import net.minecraft.client.MinecraftClient;
56
import net.minecraft.client.gui.screen.GameMenuScreen;
67
import net.minecraft.client.gui.screen.Screen;
78
import net.minecraft.client.gui.screen.TitleScreen;
8-
import net.minecraft.client.gui.widget.ButtonWidget;
99
import net.minecraft.client.gui.widget.ClickableWidget;
10+
import net.minecraft.client.gui.widget.GridWidget;
1011
import net.minecraft.text.MutableText;
1112
import net.minecraft.text.Text;
1213
import net.minecraft.text.TranslatableTextContent;
1314

1415
import java.util.List;
16+
import se.icus.mag.modsettings.mixin.GridWidgetAccessor;
1517

1618
public abstract class MenuScreensChanger {
1719
private static final int TITLE_FULL_BUTTON_WIDTH = 200;
@@ -21,16 +23,20 @@ public abstract class MenuScreensChanger {
2123
private static final int BUTTON_VERICAL_SPACING = 24;
2224

2325
public static void postTitleScreenInit(TitleScreen screen) {
24-
injectModSettingsButton(screen, TITLE_FULL_BUTTON_WIDTH, 2, BUTTON_VERICAL_SPACING / 2);
26+
List<ClickableWidget> buttons = Screens.getButtons(screen);
27+
injectModSettingsButton(screen, buttons, TITLE_FULL_BUTTON_WIDTH, 2, BUTTON_VERICAL_SPACING / 2);
2528
}
2629

2730
public static void postGameMenuScreenInit(GameMenuScreen screen) {
28-
injectModSettingsButton(screen, INGAME_FULL_BUTTON_WIDTH, 4, 0);
31+
Optional<ClickableWidget> gridWidgetOpt = Screens.getButtons(screen).stream().filter(w -> w instanceof GridWidget).findFirst();
32+
if (gridWidgetOpt.isEmpty()) return;
33+
34+
List<ClickableWidget> buttons = ((GridWidgetAccessor) gridWidgetOpt.get()).getChildren();
35+
injectModSettingsButton(screen, buttons, INGAME_FULL_BUTTON_WIDTH, 4, 0);
2936
}
3037

31-
private static void injectModSettingsButton(Screen screen, int fullButtonWidth,
38+
private static void injectModSettingsButton(Screen screen, List<ClickableWidget> buttons, int fullButtonWidth,
3239
int halfButtonSpacer, int verticalOffset) {
33-
List<ClickableWidget> buttons = Screens.getButtons(screen);
3440
boolean shortenModMenu = false;
3541
ClickableWidget savedButton = null;
3642

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package se.icus.mag.modsettings.mixin;
2+
3+
import java.util.List;
4+
import net.minecraft.client.gui.widget.ClickableWidget;
5+
import net.minecraft.client.gui.widget.GridWidget;
6+
import org.spongepowered.asm.mixin.Mixin;
7+
import org.spongepowered.asm.mixin.gen.Accessor;
8+
9+
@Mixin(GridWidget.class)
10+
public interface GridWidgetAccessor {
11+
@Accessor
12+
List<ClickableWidget> getChildren();
13+
}

src/main/resources/modsettings.mixins.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
"package": "se.icus.mag.modsettings.mixin",
55
"compatibilityLevel": "JAVA_16",
66
"client": [
7+
"GridWidgetAccessor",
78
"ScreenMixin"
89
],
910
"injectors": {

0 commit comments

Comments
 (0)