Skip to content

Commit 76814eb

Browse files
authored
26.2 Snapshot 2 (#335)
* 26.2 Snapshot 1 * Requested Changes & Snapshot 2
1 parent e7fcc32 commit 76814eb

12 files changed

Lines changed: 82 additions & 16 deletions

File tree

settings.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ stonecutter {
2424
}
2525

2626
mc("26.1", loaders = listOf("fabric", "neoforge"))
27+
mc("26.2", loaders = listOf("fabric"))
2728
}
2829
}
2930
rootProject.name = "YetAnotherConfigLib"

src/main/java/dev/isxander/yacl3/api/OptionFlag.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dev.isxander.yacl3.api;
22

33
import dev.isxander.yacl3.gui.RequireRestartScreen;
4+
import dev.isxander.yacl3.gui.utils.GuiUtils;
45
import net.minecraft.client.Minecraft;
56

67
import java.util.function.Consumer;
@@ -12,7 +13,7 @@
1213
@FunctionalInterface
1314
public interface OptionFlag extends Consumer<Minecraft> {
1415
/** Warns the user that a game restart is required for the changes to take effect */
15-
OptionFlag GAME_RESTART = client -> client.setScreen(new RequireRestartScreen(client.screen));
16+
OptionFlag GAME_RESTART = client -> GuiUtils.setScreen(new RequireRestartScreen(GuiUtils.getCurrentScreen()));
1617

1718
/** Reloads chunks upon applying (F3+A) */
1819
OptionFlag RELOAD_CHUNKS = client -> client.levelRenderer.allChanged();

src/main/java/dev/isxander/yacl3/gui/RequireRestartScreen.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dev.isxander.yacl3.gui;
22

3+
import dev.isxander.yacl3.gui.utils.GuiUtils;
34
import net.minecraft.ChatFormatting;
45
import net.minecraft.client.Minecraft;
56
import net.minecraft.client.gui.screens.ConfirmScreen;
@@ -10,7 +11,7 @@ public class RequireRestartScreen extends ConfirmScreen {
1011
public RequireRestartScreen(Screen parent) {
1112
super(option -> {
1213
if (option) Minecraft.getInstance().stop();
13-
else Minecraft.getInstance().setScreen(parent);
14+
else GuiUtils.setScreen(parent);
1415
},
1516
Component.translatable("yacl.restart.title").withStyle(ChatFormatting.RED, ChatFormatting.BOLD),
1617
Component.translatable("yacl.restart.message"),

src/main/java/dev/isxander/yacl3/gui/YACLScreen.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import dev.isxander.yacl3.impl.utils.YACLConstants;
1414
import dev.isxander.yacl3.platform.YACLPlatform;
1515
import net.minecraft.ChatFormatting;
16-
import net.minecraft.client.Minecraft;
1716
import net.minecraft.client.gui.Font;
1817
import net.minecraft.client.gui.GuiGraphicsExtractor;
1918
import net.minecraft.client.gui.components.AbstractWidget;
@@ -110,12 +109,12 @@ public void addPopupControllerWidget(ControllerPopupWidget<?> controllerPopupWid
110109
optionListWidget = categoryTab.optionList.getType();
111110
}
112111
if(optionListWidget != null) {
113-
this.minecraft.setScreen(new PopupControllerScreen(this, controllerPopupWidget));
112+
GuiUtils.setScreen(new PopupControllerScreen(this, controllerPopupWidget));
114113
}
115114
}
116115

117116
public void clearPopupControllerWidget() {
118-
if(Minecraft.getInstance().screen instanceof PopupControllerScreen popupControllerScreen) {
117+
if (GuiUtils.getCurrentScreen() instanceof PopupControllerScreen popupControllerScreen) {
119118
popupControllerScreen.onClose();
120119
}
121120
popupControllerVisible = false;
@@ -247,7 +246,7 @@ public boolean shouldCloseOnEsc() {
247246

248247
@Override
249248
public void onClose() {
250-
minecraft.setScreen(parent);
249+
GuiUtils.setScreen(parent);
251250
}
252251

253252
public static void renderMultilineTooltip(GuiGraphicsExtractor graphics, Font font, MultiLineLabel text, int centerX, int yAbove, int yBelow, int screenWidth, int screenHeight) {
@@ -469,7 +468,7 @@ public void visitChildren(Consumer<AbstractWidget> consumer) {
469468

470469
@Override
471470
public void doLayout(ScreenRectangle screenRectangle) {
472-
screen.minecraft.setScreen(category.screen().apply(screen.minecraft, screen));
471+
GuiUtils.setScreen(category.screen().apply(screen.minecraft, screen));
473472
}
474473

475474
@Override

src/main/java/dev/isxander/yacl3/gui/controllers/PopupControllerScreen.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dev.isxander.yacl3.gui.controllers;
22

33
import dev.isxander.yacl3.gui.YACLScreen;
4+
import dev.isxander.yacl3.gui.utils.GuiUtils;
45
import net.minecraft.client.gui.GuiGraphicsExtractor;
56
import net.minecraft.client.gui.screens.Screen;
67

@@ -90,7 +91,7 @@ public void tick() {
9091

9192
@Override
9293
public void onClose() {
93-
this.minecraft.screen = backgroundYaclScreen;
94+
GuiUtils.setScreen(backgroundYaclScreen, true);
9495
this.controllerPopup.close();
9596
}
9697

src/main/java/dev/isxander/yacl3/gui/utils/GuiUtils.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package dev.isxander.yacl3.gui.utils;
22

3+
import dev.isxander.yacl3.mixin.GuiAccessor;
34
import dev.isxander.yacl3.platform.YACLPlatform;
5+
import net.minecraft.client.Minecraft;
46
import net.minecraft.client.gui.Font;
57
import net.minecraft.client.gui.components.WidgetSprites;
8+
import net.minecraft.client.gui.screens.Screen;
69
import net.minecraft.locale.Language;
710
import net.minecraft.network.chat.Component;
811
import net.minecraft.network.chat.MutableComponent;
@@ -45,4 +48,32 @@ public static String shortenString(String string, Font font, int maxWidth, Strin
4548
public static FormattedCharSequence overrideStyle(FormattedCharSequence seq, Style style) {
4649
return output -> seq.accept((c, s, t) -> output.accept(c, style, t));
4750
}
51+
52+
public static void setScreen(Screen screen, boolean ignoreVanilla) {
53+
if (ignoreVanilla) {
54+
//? >=26.2 {
55+
/*((GuiAccessor) Minecraft.getInstance().gui).yacl$setScreen(screen);
56+
*///? } else {
57+
Minecraft.getInstance().screen = screen;
58+
//? }
59+
} else {
60+
//? >=26.2 {
61+
/*Minecraft.getInstance().gui.setScreen(screen);
62+
*///? } else {
63+
Minecraft.getInstance().setScreen(screen);
64+
//? }
65+
}
66+
}
67+
68+
public static void setScreen(Screen screen) {
69+
setScreen(screen, false);
70+
}
71+
72+
public static Screen getCurrentScreen() {
73+
//? >=26.2 {
74+
/*return Minecraft.getInstance().gui.screen();
75+
*///? } else {
76+
return Minecraft.getInstance().screen;
77+
//? }
78+
}
4879
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package dev.isxander.yacl3.mixin;
2+
3+
import net.minecraft.client.gui.Gui;
4+
import net.minecraft.client.gui.screens.Screen;
5+
import org.spongepowered.asm.mixin.Mixin;
6+
import org.spongepowered.asm.mixin.gen.Accessor;
7+
8+
@Mixin(Gui.class)
9+
public interface GuiAccessor {
10+
//? >=26.2 {
11+
/*@Accessor("screen")
12+
void yacl$setScreen(Screen screen);
13+
*///? }
14+
}

src/main/java/dev/isxander/yacl3/mixin/MinecraftMixin.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,14 @@
99

1010
@Mixin(Minecraft.class)
1111
public class MinecraftMixin {
12-
@Inject(method = "destroy", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;close()V"))
12+
@Inject(
13+
//? >=26.2 {
14+
/*method = "exitWorldAndClose",
15+
*///? } else {
16+
method = "destroy",
17+
//? }
18+
at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;close()V")
19+
)
1320
private void closeImages(CallbackInfo ci) {
1421
ImageRendererManager.closeAll();
1522
}

src/main/resources/yacl.mixins.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
"client": [
1010
"AbstractSelectionListAccessor",
1111
"AbstractSelectionListMixin",
12+
"GuiAccessor",
1213
"MinecraftMixin",
1314
"OptionInstanceAccessor",
1415
"TabNavigationBarAccessor",

src/testmod/java/dev/isxander/yacl3/test/GuiTest.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@
1414
import dev.isxander.yacl3.gui.controllers.string.number.FloatFieldController;
1515
import dev.isxander.yacl3.gui.controllers.string.number.IntegerFieldController;
1616
import dev.isxander.yacl3.gui.controllers.string.number.LongFieldController;
17+
import dev.isxander.yacl3.gui.utils.GuiUtils;
1718
import dev.isxander.yacl3.impl.SelfContainedBinding;
1819
import dev.isxander.yacl3.platform.YACLPlatform;
1920
import net.minecraft.ChatFormatting;
2021
import net.minecraft.util.Util;
2122
import net.minecraft.client.Minecraft;
22-
import net.minecraft.client.gui.components.toasts.SystemToast;
2323
import net.minecraft.client.gui.screens.Screen;
2424
import net.minecraft.network.chat.ClickEvent;
2525
import net.minecraft.network.chat.Component;
@@ -30,7 +30,6 @@
3030

3131
import java.awt.Color;
3232
import java.net.URI;
33-
import java.nio.file.Path;
3433
import java.util.List;
3534
import java.util.concurrent.atomic.AtomicReference;
3635

@@ -42,26 +41,26 @@ public static Screen getModConfigScreenFactory(Screen parent) {
4241
.name(Component.literal("Suites"))
4342
.option(ButtonOption.createBuilder()
4443
.name(Component.literal("Full Test Suite"))
45-
.action((screen, opt) -> Minecraft.getInstance().setScreen(getFullTestSuite(screen)))
44+
.action((screen, opt) -> GuiUtils.setScreen(getFullTestSuite(screen)))
4645
.build())
4746
.option(ButtonOption.createBuilder()
4847
.name(Component.literal("Auto-gen test"))
4948
.action((screen, opt) -> {
5049
AutogenConfigTest.INSTANCE.load();
51-
Minecraft.getInstance().setScreen(AutogenConfigTest.INSTANCE.generateGui().generateScreen(screen));
50+
GuiUtils.setScreen(AutogenConfigTest.INSTANCE.generateGui().generateScreen(screen));
5251
})
5352
.build())
5453
.option(ButtonOption.createBuilder()
5554
.name(Component.literal("Kotlin DSL Test"))
5655
.action((screen, opt) -> {
57-
Minecraft.getInstance().setScreen(CodecConfigKt.INSTANCE.generateConfigScreen(screen));
56+
GuiUtils.setScreen(CodecConfigKt.INSTANCE.generateConfigScreen(screen));
5857
})
5958
.build())
6059
.group(OptionGroup.createBuilder()
6160
.name(Component.literal("Wiki"))
6261
.option(ButtonOption.createBuilder()
6362
.name(Component.literal("Get Started"))
64-
.action((screen, opt) -> Minecraft.getInstance().setScreen(getWikiGetStarted(screen)))
63+
.action((screen, opt) -> GuiUtils.setScreen(getWikiGetStarted(screen)))
6564
.build())
6665
.build())
6766
.build())

0 commit comments

Comments
 (0)