11package zadudoder .spmhelper .mixin ;
22
3-
43import net .minecraft .client .gui .DrawContext ;
54import net .minecraft .client .gui .Element ;
65import net .minecraft .client .gui .screen .GameMenuScreen ;
76import net .minecraft .client .gui .screen .Screen ;
87import net .minecraft .client .gui .tooltip .Tooltip ;
98import net .minecraft .client .gui .widget .ButtonWidget ;
10- import net .minecraft .text .MutableText ;
119import net .minecraft .text .Text ;
1210import net .minecraft .text .TranslatableTextContent ;
1311import net .minecraft .util .Identifier ;
@@ -31,40 +29,54 @@ public abstract class GameMenuScreenMixin extends ScreenMixin {
3129
3230 @ Inject (at = @ At ("TAIL" ), method = "init()V" )
3331 private void init (CallbackInfo info ) {
34- if (SPmHelperConfig .get ().enableMenuButton ) {
35- int buttonWidth = 20 ;
36- int buttonHeight = 20 ;
37-
38- for (Element widget : ((GameMenuScreen ) (Object ) this ).children ()) {
39- if (widget instanceof ButtonWidget button ) {
40- Text buttonText = button .getMessage ();
41- if (buttonText .getContent () instanceof TranslatableTextContent translatableText &&
42- translatableText .getKey ().equals ("menu.modded" )) {
43-
44- int buttonX = button .getX () - buttonWidth - 4 ;
45- int buttonY = button .getY ();
46-
47- Text tooltipText = Text .translatable ("text.spmhelper.current_screen" )
48- .append (Text .translatable ("text.spmhelper.screen_type." + SPmHelperConfig .get ().defaultScreen .name ().toLowerCase ()));
49-
50- this .menuButton = ButtonWidget .builder (
51- Text .literal ("" ),
52- btn -> openSelectedScreen ())
53- .dimensions (buttonX , buttonY , buttonWidth , buttonHeight )
54- .tooltip (Tooltip .of (tooltipText ))
55- .build ();
56-
57- this .addDrawableChild (menuButton );
58- break ;
59- }
32+ if (!SPmHelperConfig .get ().enableMenuButton ) return ;
33+
34+ int buttonWidth = 20 ;
35+ int buttonHeight = 20 ;
36+
37+ for (Element widget : ((GameMenuScreen ) (Object ) this ).children ()) {
38+ if (widget instanceof ButtonWidget button ) {
39+ if (isModsButton (button )) {
40+ createMenuButton (button , buttonWidth , buttonHeight );
41+ break ;
6042 }
6143 }
6244 }
6345 }
6446
6547 @ Unique
66- private void openSelectedScreen () {
67- if (client == null ) return ;
48+ private boolean isModsButton (ButtonWidget button ) {
49+ Text buttonText = button .getMessage ();
50+ if (buttonText .getContent () instanceof TranslatableTextContent translatableText ) {
51+ return translatableText .getKey ().equals ("menu.modded" );
52+ }
53+ // Резервная проверка для нестандартных серверов
54+ String text = buttonText .getString ();
55+ return text .equals ("Моды" ) || text .equals ("Mods" );
56+ }
57+
58+ @ Unique
59+ private void createMenuButton (ButtonWidget referenceButton , int width , int height ) {
60+ int buttonX = referenceButton .getX () - width - 4 ;
61+ int buttonY = referenceButton .getY ();
62+
63+ Text tooltipText = Text .translatable ("text.spmhelper.current_screen" )
64+ .append (Text .translatable ("text.spmhelper.screen_type."
65+ + SPmHelperConfig .get ().defaultScreen .name ().toLowerCase ()));
66+
67+ this .menuButton = ButtonWidget .builder (
68+ Text .literal ("" ),
69+ openSelectedScreen ())
70+ .dimensions (buttonX , buttonY , width , height )
71+ .tooltip (Tooltip .of (tooltipText ))
72+ .build ();
73+
74+ this .addDrawableChild (menuButton );
75+ }
76+
77+ @ Unique
78+ private ButtonWidget .PressAction openSelectedScreen () {
79+ if (this .client == null ) return null ;
6880
6981 Screen screenToOpen = switch (SPmHelperConfig .get ().defaultScreen ) {
7082 case SETTINGS -> new Settings ();
@@ -75,23 +87,24 @@ private void openSelectedScreen() {
7587 default -> new MainScreen ();
7688 };
7789
78- client .setScreen (screenToOpen );
90+ this .client .setScreen (screenToOpen );
91+ return null ;
7992 }
8093
8194 @ Inject (method = "render" , at = @ At ("TAIL" ))
8295 private void onRender (DrawContext context , int mouseX , int mouseY , float delta , CallbackInfo ci ) {
83- if (SPmHelperConfig .get ().enableMenuButton ) {
84- int iconSize = 16 ;
85- int x = menuButton . getX () + ( menuButton . getWidth () - iconSize ) / 2 ;
86- int y = menuButton .getY () + (menuButton .getHeight () - iconSize ) / 2 ;
87- Identifier BUTTON_ICON = Identifier . of ( "spmhelper" , "gui/bookwithfeather.png" ) ;
88- context . drawTexture (
89- BUTTON_ICON ,
90- x , y ,
91- 0 , 0 ,
92- iconSize , iconSize ,
93- iconSize , iconSize
94- );
95- }
96+ if (! SPmHelperConfig .get ().enableMenuButton || this . menuButton == null ) return ;
97+
98+ int iconSize = 16 ;
99+ int x = menuButton .getX () + (menuButton .getWidth () - iconSize ) / 2 ;
100+ int y = menuButton . getY () + ( menuButton . getHeight () - iconSize ) / 2 ;
101+
102+ context . drawTexture (
103+ Identifier . of ( "spmhelper" , "gui/bookwithfeather.png" ) ,
104+ x , y ,
105+ 0 , 0 ,
106+ iconSize , iconSize ,
107+ iconSize , iconSize
108+ );
96109 }
97110}
0 commit comments