From 77b7b35f6dc67916db11e5d04aaa1a2fe96d0c63 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Fri, 6 Dec 2024 20:33:15 +0100 Subject: [PATCH] Port to 1.21.4 - Improved error handling - Update LambDynamicLights - Fix splash screen background blending once again --- .../net/puzzlemc/gui/compat/LDLCompat.java | 1 - .../gui/screen/PuzzleOptionsScreen.java | 2 +- .../screen/widget/PuzzleOptionListWidget.java | 26 ++++++++++++------- .../splashscreen/PuzzleSplashScreen.java | 21 ++++++++++----- .../splashscreen/mixin/MixinSplashScreen.java | 10 ++++--- fabric/build.gradle | 6 +++-- gradle.properties | 18 ++++++------- neoforge/build.gradle | 6 +++-- 8 files changed, 54 insertions(+), 36 deletions(-) diff --git a/common/src/main/java/net/puzzlemc/gui/compat/LDLCompat.java b/common/src/main/java/net/puzzlemc/gui/compat/LDLCompat.java index 09a20e9..1428c40 100644 --- a/common/src/main/java/net/puzzlemc/gui/compat/LDLCompat.java +++ b/common/src/main/java/net/puzzlemc/gui/compat/LDLCompat.java @@ -16,7 +16,6 @@ public class LDLCompat { PuzzleApi.addToGraphicsOptions(new PuzzleWidget(Text.of("LambDynamicLights"))); PuzzleApi.addToGraphicsOptions(new PuzzleWidget(Text.translatable("lambdynlights.option.mode"), (button) -> button.setMessage(ldlConfig.getDynamicLightsMode().getTranslatedText()), (button) -> ldlConfig.setDynamicLightsMode(ldlConfig.getDynamicLightsMode().next()))); PuzzleApi.addToGraphicsOptions(new PuzzleWidget(Text.empty().append("DynLights: ").append(Text.translatable("lambdynlights.option.light_sources.entities")), (button) -> button.setMessage(ldlConfig.getEntitiesLightSource().get() ? YES : NO), (button) -> ldlConfig.getEntitiesLightSource().set(!ldlConfig.getEntitiesLightSource().get()))); - PuzzleApi.addToGraphicsOptions(new PuzzleWidget(Text.empty().append("DynLights: ").append(Text.translatable("lambdynlights.option.light_sources.block_entities")), (button) -> button.setMessage(ldlConfig.getBlockEntitiesLightSource().get() ? YES : NO), (button) -> ldlConfig.getBlockEntitiesLightSource().set(!ldlConfig.getBlockEntitiesLightSource().get()))); PuzzleApi.addToGraphicsOptions(new PuzzleWidget(Text.empty().append("DynLights: ").append(Text.translatable("entity.minecraft.creeper")), (button) -> button.setMessage(ldlConfig.getCreeperLightingMode().getTranslatedText()), (button) -> ldlConfig.setCreeperLightingMode(ldlConfig.getCreeperLightingMode().next()))); PuzzleApi.addToGraphicsOptions(new PuzzleWidget(Text.empty().append("DynLights: ").append(Text.translatable("block.minecraft.tnt")), (button) -> button.setMessage(ldlConfig.getTntLightingMode().getTranslatedText()), (button) -> ldlConfig.setTntLightingMode(ldlConfig.getTntLightingMode().next()))); PuzzleApi.addToGraphicsOptions(new PuzzleWidget(Text.empty().append("DynLights: ").append(Text.translatable("lambdynlights.option.light_sources.water_sensitive_check")), (button) -> button.setMessage(ldlConfig.getWaterSensitiveCheck().get() ? YES : NO), (button) -> ldlConfig.getWaterSensitiveCheck().set(!ldlConfig.getWaterSensitiveCheck().get()))); diff --git a/common/src/main/java/net/puzzlemc/gui/screen/PuzzleOptionsScreen.java b/common/src/main/java/net/puzzlemc/gui/screen/PuzzleOptionsScreen.java index d0016e1..9be0c10 100755 --- a/common/src/main/java/net/puzzlemc/gui/screen/PuzzleOptionsScreen.java +++ b/common/src/main/java/net/puzzlemc/gui/screen/PuzzleOptionsScreen.java @@ -86,7 +86,7 @@ public class PuzzleOptionsScreen extends Screen { prevTab = tabManager.getCurrentTab(); this.list.clear(); fillList(); - list.setScrollAmount(0); + list.setScrollY(0); } } } diff --git a/common/src/main/java/net/puzzlemc/gui/screen/widget/PuzzleOptionListWidget.java b/common/src/main/java/net/puzzlemc/gui/screen/widget/PuzzleOptionListWidget.java index d629196..6a8bf00 100755 --- a/common/src/main/java/net/puzzlemc/gui/screen/widget/PuzzleOptionListWidget.java +++ b/common/src/main/java/net/puzzlemc/gui/screen/widget/PuzzleOptionListWidget.java @@ -31,16 +31,22 @@ public class PuzzleOptionListWidget extends MidnightConfig.MidnightConfigListWid public void addAll(List buttons) { int buttonX = this.width - 160; for (PuzzleWidget button : buttons) { - if (button.buttonType == ButtonType.TEXT) - this.addButton(List.of(), Text.literal(" ").append(button.descriptionText).formatted(Formatting.BOLD)); - else if (button.buttonType == ButtonType.BUTTON) - this.addButton(List.of(new PuzzleButtonWidget(buttonX, 0, 150, 20, button.buttonTextAction, button.onPress)), button.descriptionText); - else if (button.buttonType == ButtonType.SLIDER) - this.addButton(List.of(new PuzzleSliderWidget(button.min, button.max, buttonX, 0, 150, 20, button.defaultSliderValue.getAsInt(), button.buttonTextAction, button.changeSliderValue)), button.descriptionText); - else if (button.buttonType == ButtonType.TEXT_FIELD) - this.addButton(List.of(new PuzzleTextFieldWidget(textRenderer, buttonX, 0, 150, 20, button.setTextValue, button.changeTextValue)), button.descriptionText); - else - LOGGER.warn("Button {} is missing the buttonType variable. This shouldn't happen!", button); + try { + if (button.buttonType == ButtonType.TEXT) + this.addButton(List.of(), Text.literal(" ").append(button.descriptionText).formatted(Formatting.BOLD)); + else if (button.buttonType == ButtonType.BUTTON) + this.addButton(List.of(new PuzzleButtonWidget(buttonX, 0, 150, 20, button.buttonTextAction, button.onPress)), button.descriptionText); + else if (button.buttonType == ButtonType.SLIDER) + this.addButton(List.of(new PuzzleSliderWidget(button.min, button.max, buttonX, 0, 150, 20, button.defaultSliderValue.getAsInt(), button.buttonTextAction, button.changeSliderValue)), button.descriptionText); + else if (button.buttonType == ButtonType.TEXT_FIELD) + this.addButton(List.of(new PuzzleTextFieldWidget(textRenderer, buttonX, 0, 150, 20, button.setTextValue, button.changeTextValue)), button.descriptionText); + else + LOGGER.warn("Button {} is missing the buttonType variable. This shouldn't happen!", button); + } + catch (Exception e) { + LOGGER.error("Failed to add button {}. Likely caused by an update of the specific mod.", button.descriptionText); + } + } } public void addButton(List buttons, Text text) { diff --git a/common/src/main/java/net/puzzlemc/splashscreen/PuzzleSplashScreen.java b/common/src/main/java/net/puzzlemc/splashscreen/PuzzleSplashScreen.java index 8504f3b..8645765 100755 --- a/common/src/main/java/net/puzzlemc/splashscreen/PuzzleSplashScreen.java +++ b/common/src/main/java/net/puzzlemc/splashscreen/PuzzleSplashScreen.java @@ -3,6 +3,7 @@ package net.puzzlemc.splashscreen; import eu.midnightdust.lib.util.MidnightColorUtil; import eu.midnightdust.lib.util.PlatformFunctions; import net.minecraft.client.texture.NativeImageBackedTexture; +import net.minecraft.client.texture.TextureContents; import net.minecraft.resource.*; import net.minecraft.util.Util; import net.puzzlemc.core.config.PuzzleConfig; @@ -137,14 +138,15 @@ public class PuzzleSplashScreen { public static class LogoTexture extends ResourceTexture { public LogoTexture(Identifier logo) { super(logo); } - protected TextureData loadTextureData(ResourceManager resourceManager) { + @Override + public TextureContents loadContents(ResourceManager resourceManager) { MinecraftClient minecraftClient = MinecraftClient.getInstance(); DefaultResourcePack defaultResourcePack = minecraftClient.getDefaultResourcePack(); try { InputStream inputStream = Objects.requireNonNull(defaultResourcePack.open(ResourceType.CLIENT_RESOURCES, LOGO)).get(); - TextureData var6; + TextureContents var6; try { - var6 = new TextureData(new TextureResourceMetadata(true, true), NativeImage.read(inputStream)); + var6 = new TextureContents(NativeImage.read(inputStream), new TextureResourceMetadata(true, true)); } finally { if (inputStream != null) { inputStream.close(); @@ -152,7 +154,7 @@ public class PuzzleSplashScreen { } return var6; } catch (IOException var18) { - return new TextureData(var18); + return TextureContents.createMissing(); } } } @@ -161,13 +163,18 @@ public class PuzzleSplashScreen { public DynamicLogoTexture() { super(LOGO); } - protected TextureData loadTextureData(ResourceManager resourceManager) { + @Override + public TextureContents loadContents(ResourceManager resourceManager) { try { InputStream input = new FileInputStream(String.valueOf(PuzzleSplashScreen.LOGO_TEXTURE)); - return new TextureData(new TextureResourceMetadata(true, true), NativeImage.read(input)); + return new TextureContents(NativeImage.read(input), new TextureResourceMetadata(true, true)); } catch (IOException e) { LOGGER.error("Encountered an error during logo loading: ", e); - return TextureData.load(resourceManager, LOGO); + try { + return TextureContents.load(resourceManager, LOGO); + } catch (IOException ex) { + return TextureContents.createMissing(); + } } } } diff --git a/common/src/main/java/net/puzzlemc/splashscreen/mixin/MixinSplashScreen.java b/common/src/main/java/net/puzzlemc/splashscreen/mixin/MixinSplashScreen.java index fb84cb9..3a56c1b 100755 --- a/common/src/main/java/net/puzzlemc/splashscreen/mixin/MixinSplashScreen.java +++ b/common/src/main/java/net/puzzlemc/splashscreen/mixin/MixinSplashScreen.java @@ -9,6 +9,7 @@ import net.minecraft.client.gui.screen.SplashOverlay; import net.minecraft.client.render.*; import net.minecraft.client.texture.NativeImage; import net.minecraft.client.texture.NativeImageBackedTexture; +import net.minecraft.client.texture.TextureManager; import net.minecraft.util.Identifier; import net.minecraft.util.Util; import net.minecraft.util.math.ColorHelper; @@ -42,16 +43,16 @@ public abstract class MixinSplashScreen extends Overlay { return 0; } - @Inject(method = "init(Lnet/minecraft/client/MinecraftClient;)V", at = @At("TAIL")) - private static void puzzle$initSplashscreen(MinecraftClient client, CallbackInfo ci) { // Load our custom textures at game start // + @Inject(method = "init", at = @At("TAIL")) + private static void puzzle$initSplashscreen(TextureManager textureManager, CallbackInfo ci) { // Load our custom textures at game start // if (PuzzleConfig.resourcepackSplashScreen) { if (PuzzleSplashScreen.LOGO_TEXTURE.toFile().exists()) { - client.getTextureManager().registerTexture(LOGO, new PuzzleSplashScreen.DynamicLogoTexture()); + textureManager.registerTexture(LOGO, new PuzzleSplashScreen.DynamicLogoTexture()); } if (PuzzleSplashScreen.BACKGROUND_TEXTURE.toFile().exists()) { try { InputStream input = new FileInputStream(String.valueOf(PuzzleSplashScreen.BACKGROUND_TEXTURE)); - client.getTextureManager().registerTexture(BACKGROUND, new NativeImageBackedTexture(NativeImage.read(input))); + textureManager.registerTexture(BACKGROUND, new NativeImageBackedTexture(NativeImage.read(input))); } catch (IOException ignored) {} } } @@ -93,6 +94,7 @@ public abstract class MixinSplashScreen extends Overlay { RenderSystem.enableBlend(); RenderSystem.blendEquation(32774); RenderSystem.defaultBlendFunc(); + context.getMatrices().translate(0, 0, 1f); context.drawTexture(RenderLayer::getGuiTextured, BACKGROUND, 0, 0, 0, 0, width, height, width, height, ColorHelper.getWhite(s)); RenderSystem.defaultBlendFunc(); RenderSystem.disableBlend(); diff --git a/fabric/build.gradle b/fabric/build.gradle index d2ffc12..95d8052 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -90,7 +90,8 @@ unifiedPublishing { curseforge { token = CURSEFORGE_TOKEN id = rootProject.curseforge_id - gameVersions.addAll "Java 21", project.minecraft_version, project.supported_versions + gameVersions.addAll "Java 21", project.minecraft_version + if (project.supported_versions != "") gameVersions.addAll project.supported_versions } } @@ -100,7 +101,8 @@ unifiedPublishing { token = MODRINTH_TOKEN id = rootProject.modrinth_id version = "$rootProject.version-$project.name" - gameVersions.addAll project.minecraft_version, project.supported_versions + gameVersions.addAll project.minecraft_version + if (project.supported_versions != "") gameVersions.addAll project.supported_versions } } } diff --git a/gradle.properties b/gradle.properties index 558f1a7..8f75d6e 100755 --- a/gradle.properties +++ b/gradle.properties @@ -1,13 +1,13 @@ # Done to increase the memory available to gradle. org.gradle.jvmargs=-Xmx2G -minecraft_version=1.21.3 -supported_versions=1.21.2 -yarn_mappings=1.21.3+build.2 +minecraft_version=1.21.4 +supported_versions= +yarn_mappings=1.21.4+build.1 enabled_platforms=fabric,neoforge # Mod Properties -mod_version = 2.0.3 +mod_version = 2.0.4 maven_group = net.puzzlemc archives_base_name = puzzle release_type=release @@ -16,18 +16,18 @@ modrinth_id=3IuO68q1 # Modloaders fabric_loader_version=0.16.9 -fabric_api_version=0.107.0+1.21.3 +fabric_api_version=0.110.5+1.21.4 -neoforge_version=21.3.11-beta +neoforge_version=21.4.9-beta yarn_mappings_patch_neoforge_version = 1.21+build.4 # Libraries -midnightlib_version = 1.6.4 -modmenu_version = 12.0.0-beta.1 +midnightlib_version = 1.6.6 +modmenu_version = 13.0.0-beta.1 # Mod Integrations cull_leaves_version = 3.0.2-fabric -ldl_version = 2.3.2+1.20.1 +ldl_version = 4.0.0+1.21.4 lbg_version = 1.5.2+1.20.1 iris_version = 1.8.0-beta.3+1.21-fabric continuity_version = 3.0.0-beta.5+1.21 diff --git a/neoforge/build.gradle b/neoforge/build.gradle index 744cd9b..33ada1d 100644 --- a/neoforge/build.gradle +++ b/neoforge/build.gradle @@ -96,7 +96,8 @@ unifiedPublishing { curseforge { token = CURSEFORGE_TOKEN id = rootProject.curseforge_id - gameVersions.addAll "Java 21", project.minecraft_version, project.supported_versions + gameVersions.addAll "Java 21", project.minecraft_version + if (project.supported_versions != "") gameVersions.addAll project.supported_versions } } @@ -106,7 +107,8 @@ unifiedPublishing { token = MODRINTH_TOKEN id = rootProject.modrinth_id version = "$rootProject.version-$project.name" - gameVersions.addAll project.minecraft_version, project.supported_versions + gameVersions.addAll project.minecraft_version + if (project.supported_versions != "") gameVersions.addAll project.supported_versions } } }