From 15ab623edb5303f52b8a8b74a50856188fe15515 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Wed, 19 Nov 2025 21:33:47 +0100 Subject: [PATCH] stonecutter: support Fabric 1.20.1 --- build.gradle.kts | 4 ++ .../gui/mixin/MixinOptionsScreen.java | 49 ++++++++++++++---- .../screen/widget/PuzzleOptionListWidget.java | 6 +-- .../splashscreen/PuzzleSplashScreen.java | 4 +- src/main/resources/fabric.mod.json | 2 +- .../resources/assets/puzzle/icon/button.png | Bin 0 -> 152 bytes 6 files changed, 50 insertions(+), 15 deletions(-) create mode 100644 versions/1.20.1-fabric/src/main/resources/assets/puzzle/icon/button.png diff --git a/build.gradle.kts b/build.gradle.kts index 95ac9cf..4529269 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -262,4 +262,8 @@ stonecutter { direction = eval(current.version, ">=1.21.5") replace("SimpleTexture", "ReloadableTexture") } + replacements.string { + direction = eval(current.version, ">=1.21") + replace("new ResourceLocation", "ResourceLocation.fromNamespaceAndPath") + } } diff --git a/src/main/java/net/puzzlemc/gui/mixin/MixinOptionsScreen.java b/src/main/java/net/puzzlemc/gui/mixin/MixinOptionsScreen.java index 0b8a38a..abd4609 100644 --- a/src/main/java/net/puzzlemc/gui/mixin/MixinOptionsScreen.java +++ b/src/main/java/net/puzzlemc/gui/mixin/MixinOptionsScreen.java @@ -2,17 +2,14 @@ package net.puzzlemc.gui.mixin; import eu.midnightdust.core.config.MidnightLibConfig; import eu.midnightdust.lib.util.PlatformFunctions; -import net.minecraft.client.gui.components.SpriteIconButton; -import net.minecraft.client.gui.layouts.HeaderAndFooterLayout; + import net.minecraft.client.gui.screens.Screen; -import net.minecraft.client.gui.screens.options.OptionsScreen; import net.minecraft.network.chat.Component; + import net.puzzlemc.core.config.PuzzleConfig; -import net.puzzlemc.gui.PuzzleGui; import net.puzzlemc.gui.screen.PuzzleOptionsScreen; -import org.spongepowered.asm.mixin.Final; + import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -20,16 +17,32 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.Objects; +//? if >= 1.21 { +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Shadow; +import net.minecraft.client.gui.screens.options.OptionsScreen; +import net.minecraft.client.gui.components.SpriteIconButton; +import net.minecraft.client.gui.layouts.HeaderAndFooterLayout; +import net.puzzlemc.gui.PuzzleGui; +//?} else { +/*import net.minecraft.client.gui.screens.OptionsScreen; +import net.minecraft.client.gui.components.TextAndImageButton; +import net.minecraft.resources.ResourceLocation; + +import static net.puzzlemc.core.PuzzleCore.MOD_ID; +*///?} + @Mixin(OptionsScreen.class) public abstract class MixinOptionsScreen extends Screen { + private MixinOptionsScreen(Component title) {super(title);} + + //? if >= 1.21 { @Shadow @Final private HeaderAndFooterLayout layout; @Unique SpriteIconButton puzzle$button = SpriteIconButton.builder(Component.translatable("puzzle.screen.title"), (buttonWidget) -> - (Objects.requireNonNull(this.minecraft)).setScreen(new PuzzleOptionsScreen(this)), true) + (Objects.requireNonNull(this.minecraft)).setScreen(new PuzzleOptionsScreen(this)), true) .size(20, 20).sprite(PuzzleGui.PUZZLE_BUTTON, 20, 20).build(); - private MixinOptionsScreen(Component title) {super(title);} - @Inject(at = @At("HEAD"), method = "init") public void puzzle$onInit(CallbackInfo ci) { if (PuzzleConfig.enablePuzzleButton) { @@ -52,4 +65,22 @@ public abstract class MixinOptionsScreen extends Screen { } puzzle$button.setPosition(this.width / 2 - 178 + i, layout.getY() + layout.getFooterHeight() - 4); } + //?} else { + /*@Unique TextAndImageButton puzzle$button = TextAndImageButton.builder(Component.translatable("midnightlib.overview.title"), ResourceLocation.fromNamespaceAndPath(MOD_ID, "icon/button.png"), + button -> Objects.requireNonNull(minecraft).setScreen(new PuzzleOptionsScreen(this))).textureSize(19, 19).usedTextureSize(16, 16).offset(-2, 0).build(); + + @Inject(at = @At("HEAD"), method = "init") + private void midnightlib$init(CallbackInfo ci) { + if (PuzzleConfig.enablePuzzleButton) { + puzzle$button.setWidth(20); + int i = 0; + if (PlatformFunctions.isModLoaded("lod")) { + i = i + 358; + if (MidnightLibConfig.config_screen_list.equals(MidnightLibConfig.ConfigButton.FALSE)) i = i - 25; + } + puzzle$button.setPosition(this.width / 2 - 178 + i, this.height / 6 - 12); + this.addRenderableWidget(puzzle$button); + } + } + *///?} } diff --git a/src/main/java/net/puzzlemc/gui/screen/widget/PuzzleOptionListWidget.java b/src/main/java/net/puzzlemc/gui/screen/widget/PuzzleOptionListWidget.java index 7a4f706..648fe1f 100644 --- a/src/main/java/net/puzzlemc/gui/screen/widget/PuzzleOptionListWidget.java +++ b/src/main/java/net/puzzlemc/gui/screen/widget/PuzzleOptionListWidget.java @@ -63,8 +63,8 @@ public class PuzzleOptionListWidget extends MidnightConfigListWidget { var entry = new ButtonEntry(buttons, text, info); this.addEntry(entry); } - public void renderWidget(GuiGraphics context, int mouseX, int mouseY, float delta) { - super.renderWidget(context, mouseX, mouseY, delta); + public void /*? if >= 1.21 {*/ renderWidget /*?} else {*/ /*renderList*/ /*?}*/(GuiGraphics context, int mouseX, int mouseY, float delta) { + super./*? if >= 1.21 {*/ renderWidget /*?} else {*/ /*renderList*/ /*?}*/(context, mouseX, mouseY, delta); ButtonEntry e = this.getHovered(); if (minecraft.screen instanceof PuzzleOptionsScreen page && e != null && !e.buttons.isEmpty() && e.text.getContents() instanceof TranslatableContents content) { @@ -95,4 +95,4 @@ public class PuzzleOptionListWidget extends MidnightConfigListWidget { public ButtonEntry getHovered() { return super.getHovered(); } -} +} \ No newline at end of file diff --git a/src/main/java/net/puzzlemc/splashscreen/PuzzleSplashScreen.java b/src/main/java/net/puzzlemc/splashscreen/PuzzleSplashScreen.java index 04cde55..bd43b08 100644 --- a/src/main/java/net/puzzlemc/splashscreen/PuzzleSplashScreen.java +++ b/src/main/java/net/puzzlemc/splashscreen/PuzzleSplashScreen.java @@ -48,8 +48,8 @@ import static net.puzzlemc.core.PuzzleCore.LOGGER; import static net.puzzlemc.core.PuzzleCore.MOD_ID; public class PuzzleSplashScreen { - public static final ResourceLocation LOGO = ResourceLocation.withDefaultNamespace("textures/gui/title/mojangstudios.png"); - public static final ResourceLocation BACKGROUND = ResourceLocation.withDefaultNamespace("puzzle/splash_background.png"); + public static final ResourceLocation LOGO = ResourceLocation.fromNamespaceAndPath("minecraft", "textures/gui/title/mojangstudios.png"); + public static final ResourceLocation BACKGROUND = ResourceLocation.fromNamespaceAndPath("minecraft", "puzzle/splash_background.png"); public static File CONFIG_PATH = new File(String.valueOf(PlatformFunctions.getConfigDirectory().resolve(".puzzle_cache"))); public static Path LOGO_TEXTURE = Paths.get(CONFIG_PATH + "/mojangstudios.png"); public static Path BACKGROUND_TEXTURE = Paths.get(CONFIG_PATH + "/splash_background.png"); diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 22d10c7..ff5a82f 100755 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -37,6 +37,6 @@ "depends": { "fabric": "*", - "minecraft": ">=1.21" + "minecraft": ">=1.20" } } diff --git a/versions/1.20.1-fabric/src/main/resources/assets/puzzle/icon/button.png b/versions/1.20.1-fabric/src/main/resources/assets/puzzle/icon/button.png new file mode 100644 index 0000000000000000000000000000000000000000..d50691ff435780079419c38b4accd6b03408dd22 GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;Ayr+v}h{fsT1PRs>#{UZ&B)0Y( zk!V}gI8kuD+_Hr)Q=Mjgtenj`U#&)}aObRv5&FWflUBKN2`h>x7SCO}R5i@(=ESC) z6P?290cR2vuV=qtyQssnaaVw|bMh7jWjO|hOi6RK$?rek23p17>FVdQ&MBb@0BOK7 A)c^nh literal 0 HcmV?d00001