1
1
package se .icus .mag .modsettings .gui ;
2
2
3
+ import java .util .Optional ;
3
4
import net .fabricmc .fabric .api .client .screen .v1 .Screens ;
4
5
import net .minecraft .client .MinecraftClient ;
5
6
import net .minecraft .client .gui .screen .GameMenuScreen ;
6
7
import net .minecraft .client .gui .screen .Screen ;
7
8
import net .minecraft .client .gui .screen .TitleScreen ;
8
- import net .minecraft .client .gui .widget .ButtonWidget ;
9
9
import net .minecraft .client .gui .widget .ClickableWidget ;
10
+ import net .minecraft .client .gui .widget .GridWidget ;
10
11
import net .minecraft .text .MutableText ;
11
12
import net .minecraft .text .Text ;
12
13
import net .minecraft .text .TranslatableTextContent ;
13
14
14
15
import java .util .List ;
16
+ import se .icus .mag .modsettings .mixin .GridWidgetAccessor ;
15
17
16
18
public abstract class MenuScreensChanger {
17
19
private static final int TITLE_FULL_BUTTON_WIDTH = 200 ;
@@ -21,16 +23,20 @@ public abstract class MenuScreensChanger {
21
23
private static final int BUTTON_VERICAL_SPACING = 24 ;
22
24
23
25
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 );
25
28
}
26
29
27
30
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 );
29
36
}
30
37
31
- private static void injectModSettingsButton (Screen screen , int fullButtonWidth ,
38
+ private static void injectModSettingsButton (Screen screen , List < ClickableWidget > buttons , int fullButtonWidth ,
32
39
int halfButtonSpacer , int verticalOffset ) {
33
- List <ClickableWidget > buttons = Screens .getButtons (screen );
34
40
boolean shortenModMenu = false ;
35
41
ClickableWidget savedButton = null ;
36
42
0 commit comments