Skip to content

Commit 6335e1f

Browse files
committed
fix: fix crush
1 parent 640e93d commit 6335e1f

2 files changed

Lines changed: 60 additions & 45 deletions

File tree

Lines changed: 57 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
package zadudoder.spmhelper.mixin;
22

3-
43
import net.minecraft.client.gui.DrawContext;
54
import net.minecraft.client.gui.Element;
65
import net.minecraft.client.gui.screen.GameMenuScreen;
76
import net.minecraft.client.gui.screen.Screen;
87
import net.minecraft.client.gui.tooltip.Tooltip;
98
import net.minecraft.client.gui.widget.ButtonWidget;
10-
import net.minecraft.text.MutableText;
119
import net.minecraft.text.Text;
1210
import net.minecraft.text.TranslatableTextContent;
1311
import 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
}

src/main/java/zadudoder/spmhelper/tutorial/TutorialManager.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ public static void startTutorial() {
2222

2323
public static void stopTutorial() {
2424
isEnabled = false;
25-
checkpoints.clear();
25+
if (checkpoints != null) {
26+
checkpoints.clear();
27+
}
2628
}
2729

2830
public static void skipTutorial() {

0 commit comments

Comments
 (0)