From 2d5b713fb005b9aa184437950386d0bdee1fba2a Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Sat, 3 May 2025 13:13:25 +0200 Subject: [PATCH] port: 1.21.4 - Also features some cleanup work --- build.gradle | 4 +- .../picturesign/PictureSignClient.java | 4 +- .../picturesign/config/PictureSignConfig.java | 71 +++++++++++-------- ...MixinAbstractSignBlockEntityRenderer.java} | 14 ++-- .../mixin/MixinSignBlockEntityRenderer.java | 22 +++--- .../mixin/MixinSignEditScreen.java | 10 +-- .../picturesign/render/PictureRenderer.java | 16 +---- .../screen/PictureSignHelperScreen.java | 24 +++---- .../picturesign/util/PictureDownloader.java | 25 +++---- .../assets/picturesign/lang/de_de.json | 4 +- .../assets/picturesign/lang/en_us.json | 4 +- .../main/resources/picturesign.mixins.json | 2 +- gradle.properties | 16 ++--- 13 files changed, 107 insertions(+), 109 deletions(-) rename common/src/main/java/eu/midnightdust/picturesign/mixin/{MixinHangingSignBlockEntityRenderer.java => MixinAbstractSignBlockEntityRenderer.java} (66%) diff --git a/build.gradle b/build.gradle index 00ffda0..fb87458 100755 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ plugins { id "architectury-plugin" version "3.4-SNAPSHOT" - id "dev.architectury.loom" version "1.6-SNAPSHOT" apply false + id "dev.architectury.loom" version "1.7-SNAPSHOT" apply false id "me.shedaniel.unified-publishing" version "0.1.+" apply false id 'com.github.johnrengelman.shadow' version '8.1.1' apply false } @@ -27,7 +27,7 @@ subprojects { dependencies { minecraft "com.mojang:minecraft:${rootProject.minecraft_version}" - implementation "com.github.SrRapero720.watermedia:build:${rootProject.watermedia_version}" + implementation "maven.modrinth:watermedia:${rootProject.watermedia_version}" // The following line declares the mojmap mappings, you may use other mappings as well //mappings loom.officialMojangMappings() // The following line declares the yarn mappings you may select this one as well. diff --git a/common/src/main/java/eu/midnightdust/picturesign/PictureSignClient.java b/common/src/main/java/eu/midnightdust/picturesign/PictureSignClient.java index 6a95356..67cbac7 100755 --- a/common/src/main/java/eu/midnightdust/picturesign/PictureSignClient.java +++ b/common/src/main/java/eu/midnightdust/picturesign/PictureSignClient.java @@ -19,8 +19,8 @@ public class PictureSignClient { public static final String MOD_ID = "picturesign"; public static String[] clipboard = new String[4]; public static final MinecraftClient client = MinecraftClient.getInstance(); - public static final KeyBinding BINDING_COPY_SIGN = new KeyBinding("key."+MOD_ID+".copy_sign", - InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_U, "key.categories."+MOD_ID); + public static final KeyBinding BINDING_COPY_SIGN = new KeyBinding("key.%s.copy_sign".formatted(MOD_ID), + InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_U, "key.categories.%s".formatted(MOD_ID)); public static void init() { PictureSignConfig.init(MOD_ID, PictureSignConfig.class); diff --git a/common/src/main/java/eu/midnightdust/picturesign/config/PictureSignConfig.java b/common/src/main/java/eu/midnightdust/picturesign/config/PictureSignConfig.java index 6b176d8..dacad34 100755 --- a/common/src/main/java/eu/midnightdust/picturesign/config/PictureSignConfig.java +++ b/common/src/main/java/eu/midnightdust/picturesign/config/PictureSignConfig.java @@ -2,47 +2,58 @@ package eu.midnightdust.picturesign.config; import com.google.common.collect.Lists; import eu.midnightdust.lib.config.MidnightConfig; -import net.minecraft.client.gl.ShaderProgram; -import net.minecraft.client.render.GameRenderer; +import net.minecraft.client.gl.ShaderProgramKey; +import net.minecraft.client.gl.ShaderProgramKeys; +import net.minecraft.client.texture.TextureManager; +import net.minecraft.util.Identifier; +import org.jetbrains.annotations.Nullable; import java.util.List; -import java.util.function.Supplier; + +import static eu.midnightdust.picturesign.PictureSignClient.id; public class PictureSignConfig extends MidnightConfig { - private static final String general = "1general"; - private static final String advanced = "advanced"; + private static final String GENERAL = "general"; + private static final String ADVANCED = "advanced"; - @Entry(category = general) public static boolean enabled = true; - @Entry(category = general) public static boolean enableMultimediaSigns = true; - @Entry(min = 0, max = 1000, isSlider = true, category = general) public static int audioDistanceMultiplier = 30; - @Entry(category = general) public static boolean translucency = false; - @Entry(category = general) public static boolean fullBrightPicture = false; - @Entry(category = general) public static boolean helperUi = true; - @Entry(category = general) public static boolean exceedVanillaLineLength = true; - @Entry(category = advanced) public static boolean debug = false; - @Entry(min = 1, max = 10, isSlider = true, category = advanced) public static int maxThreads = 4; - @Entry(min = 0, max = 2048, isSlider = true, category = general) public static int signRenderDistance = 64; - @Entry(category = advanced) public static boolean safeMode = true; - @Entry(category = advanced) public static List safeProviders = Lists.newArrayList("https://i.imgur.com/", "https://i.ibb.co/", "https://pictshare.net/", "https://iili.io/"); - @Entry(category = advanced) public static List safeGifProviders = Lists.newArrayList("https://i.imgur.com/", "https://media1.tenor.com/"); - @Entry(category = advanced) public static List safeMultimediaProviders = Lists.newArrayList("https://youtube.com/", "https://www.youtube.com/", "https://youtu.be/","https://vimeo.com/"); - @Entry(category = advanced) public static List safeJsonProviders = Lists.newArrayList("https://github.com/", "https://gist.github.com/", "https://www.jsonkeeper.com/", "https://api.npoint.io/", "https://api.jsonsilo.com/"); - @Comment(category = general) public static Comment ebeWarning; - @Entry(category = advanced) public static MissingImageMode missingImageMode = MissingImageMode.BLACK; - @Entry(category = advanced) public static PictureShader pictureShader = PictureShader.PosColTexLight; + @Entry(category = GENERAL) public static boolean enabled = true; + @Entry(category = GENERAL) public static boolean enableMultimediaSigns = true; + @Entry(min = 0, max = 1000, isSlider = true, category = GENERAL) public static int audioDistanceMultiplier = 30; + @Entry(category = GENERAL) public static boolean translucency = false; + @Entry(category = GENERAL) public static boolean fullBrightPicture = false; + @Entry(category = GENERAL) public static boolean helperUi = true; + @Entry(category = GENERAL) public static boolean exceedVanillaLineLength = true; + @Entry(category = ADVANCED) public static boolean debug = false; + @Entry(min = 1, max = 10, isSlider = true, category = ADVANCED) public static int maxThreads = 4; + @Entry(min = 0, max = 2048, isSlider = true, category = GENERAL) public static int signRenderDistance = 64; + @Entry(category = ADVANCED) public static boolean safeMode = true; + @Entry(category = ADVANCED) public static List safeProviders = Lists.newArrayList("https://i.imgur.com/", "https://i.ibb.co/", "https://pictshare.net/", "https://iili.io/"); + @Entry(category = ADVANCED) public static List safeGifProviders = Lists.newArrayList("https://i.imgur.com/", "https://media1.tenor.com/"); + @Entry(category = ADVANCED) public static List safeMultimediaProviders = Lists.newArrayList("https://youtube.com/", "https://www.youtube.com/", "https://youtu.be/","https://vimeo.com/"); + @Entry(category = ADVANCED) public static List safeJsonProviders = Lists.newArrayList("https://github.com/", "https://gist.github.com/", "https://www.jsonkeeper.com/", "https://api.npoint.io/", "https://api.jsonsilo.com/"); + @Comment(category = GENERAL) @Condition(requiredModId = "enhancedblockentities") public static Comment ebeWarning; + @Entry(category = ADVANCED) public static MissingImageMode missingImageMode = MissingImageMode.BLACK; + @Entry(category = ADVANCED) public static PictureShader pictureShader = PictureShader.PosColTexLight; public enum MissingImageMode { - BLACK, MISSING_TEXTURE, TRANSPARENT + BLACK(id("textures/black.png")), + MISSING_TEXTURE(TextureManager.MISSING_IDENTIFIER), + TRANSPARENT(null); + + MissingImageMode(@Nullable Identifier missingTextureId) { + this.missingTextureId = missingTextureId; + } + @Nullable public final Identifier missingTextureId; } public enum PictureShader { - PosColTexLight(GameRenderer::getPositionColorTexLightmapProgram), - RenderTypeCutout(GameRenderer::getRenderTypeCutoutProgram), - PosTex(GameRenderer::getPositionTexProgram), - PosTexCol(GameRenderer::getPositionTexColorProgram); + PosColTexLight(ShaderProgramKeys.POSITION_COLOR_TEX_LIGHTMAP), + RenderTypeCutout(ShaderProgramKeys.RENDERTYPE_CUTOUT), + PosTex(ShaderProgramKeys.POSITION_TEX), + PosTexCol(ShaderProgramKeys.POSITION_TEX_COLOR); - PictureShader(Supplier program) { + PictureShader(ShaderProgramKey program) { this.program = program; } - public final Supplier program; + public final ShaderProgramKey program; } } diff --git a/common/src/main/java/eu/midnightdust/picturesign/mixin/MixinHangingSignBlockEntityRenderer.java b/common/src/main/java/eu/midnightdust/picturesign/mixin/MixinAbstractSignBlockEntityRenderer.java similarity index 66% rename from common/src/main/java/eu/midnightdust/picturesign/mixin/MixinHangingSignBlockEntityRenderer.java rename to common/src/main/java/eu/midnightdust/picturesign/mixin/MixinAbstractSignBlockEntityRenderer.java index d54228a..2edcf2d 100755 --- a/common/src/main/java/eu/midnightdust/picturesign/mixin/MixinHangingSignBlockEntityRenderer.java +++ b/common/src/main/java/eu/midnightdust/picturesign/mixin/MixinAbstractSignBlockEntityRenderer.java @@ -5,8 +5,8 @@ import eu.midnightdust.picturesign.render.PictureSignRenderer; import eu.midnightdust.picturesign.util.PictureSignType; import net.minecraft.block.entity.SignBlockEntity; import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.block.entity.AbstractSignBlockEntityRenderer; import net.minecraft.client.render.block.entity.BlockEntityRenderer; -import net.minecraft.client.render.block.entity.HangingSignBlockEntityRenderer; import net.minecraft.client.util.math.MatrixStack; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; @@ -17,15 +17,15 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import static eu.midnightdust.picturesign.util.PictureSignType.isCandidate; import static eu.midnightdust.picturesign.util.PictureSignType.isNotOfType; -@Mixin(HangingSignBlockEntityRenderer.class) -public abstract class MixinHangingSignBlockEntityRenderer implements BlockEntityRenderer { - @Unique PictureSignRenderer psRenderer = new PictureSignRenderer(); +@Mixin(AbstractSignBlockEntityRenderer.class) +public abstract class MixinAbstractSignBlockEntityRenderer implements BlockEntityRenderer { + @Unique PictureSignRenderer picturesign$psRenderer = new PictureSignRenderer(); - @Inject(at = @At("HEAD"), method = "render") + @Inject(at = @At("HEAD"), method = "render(Lnet/minecraft/block/entity/SignBlockEntity;FLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;II)V") public void ps$onRender(SignBlockEntity sign, float f, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int light, int overlay, CallbackInfo ci) { if (PictureSignConfig.enabled) { - if (isCandidate(sign, true) && isNotOfType(sign, PictureSignType.NONE, true)) psRenderer.render(sign, matrixStack, vertexConsumerProvider, light, overlay, true); - if (isCandidate(sign, false) && isNotOfType(sign, PictureSignType.NONE, false)) psRenderer.render(sign, matrixStack, vertexConsumerProvider, light, overlay, false); + if (isCandidate(sign, true) && isNotOfType(sign, PictureSignType.NONE, true)) picturesign$psRenderer.render(sign, matrixStack, vertexConsumerProvider, light, overlay, true); + if (isCandidate(sign, false) && isNotOfType(sign, PictureSignType.NONE, false)) picturesign$psRenderer.render(sign, matrixStack, vertexConsumerProvider, light, overlay, false); } } @Unique diff --git a/common/src/main/java/eu/midnightdust/picturesign/mixin/MixinSignBlockEntityRenderer.java b/common/src/main/java/eu/midnightdust/picturesign/mixin/MixinSignBlockEntityRenderer.java index c2e33e9..b6f0f1c 100755 --- a/common/src/main/java/eu/midnightdust/picturesign/mixin/MixinSignBlockEntityRenderer.java +++ b/common/src/main/java/eu/midnightdust/picturesign/mixin/MixinSignBlockEntityRenderer.java @@ -31,17 +31,17 @@ public abstract class MixinSignBlockEntityRenderer implements BlockEntityRendere psRenderer = new PictureSignRenderer(); } - @Inject(at = @At("HEAD"), method = "render") - public void ps$onRender(SignBlockEntity sign, float f, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int light, int overlay, CallbackInfo ci) { - if (PictureSignConfig.enabled && psRenderer != null) { - if (isCandidate(sign, true) && isNotOfType(sign, PictureSignType.NONE, true)) psRenderer.render(sign, matrixStack, vertexConsumerProvider, light, overlay, true); - if (isCandidate(sign, false) && isNotOfType(sign, PictureSignType.NONE, false)) psRenderer.render(sign, matrixStack, vertexConsumerProvider, light, overlay, false); - } - } - @Inject(at = @At("HEAD"), method = "shouldRender", cancellable = true) - private static void shouldRender(BlockPos pos, int signColor, CallbackInfoReturnable cir) { - if (PictureSignConfig.enabled && client.world != null && hasPicture((SignBlockEntity) client.world.getBlockEntity(pos))) cir.setReturnValue(true); - } +// @Inject(at = @At("HEAD"), method = "render") +// public void ps$onRender(SignBlockEntity sign, float f, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int light, int overlay, CallbackInfo ci) { +// if (PictureSignConfig.enabled && psRenderer != null) { +// if (isCandidate(sign, true) && isNotOfType(sign, PictureSignType.NONE, true)) psRenderer.render(sign, matrixStack, vertexConsumerProvider, light, overlay, true); +// if (isCandidate(sign, false) && isNotOfType(sign, PictureSignType.NONE, false)) psRenderer.render(sign, matrixStack, vertexConsumerProvider, light, overlay, false); +// } +// } +// @Inject(at = @At("HEAD"), method = "shouldRender", cancellable = true) +// private static void shouldRender(BlockPos pos, int signColor, CallbackInfoReturnable cir) { +// if (PictureSignConfig.enabled && client.world != null && hasPicture((SignBlockEntity) client.world.getBlockEntity(pos))) cir.setReturnValue(true); +// } @Unique @Override public int getRenderDistance() { diff --git a/common/src/main/java/eu/midnightdust/picturesign/mixin/MixinSignEditScreen.java b/common/src/main/java/eu/midnightdust/picturesign/mixin/MixinSignEditScreen.java index 31207ec..395b80d 100644 --- a/common/src/main/java/eu/midnightdust/picturesign/mixin/MixinSignEditScreen.java +++ b/common/src/main/java/eu/midnightdust/picturesign/mixin/MixinSignEditScreen.java @@ -23,14 +23,14 @@ import static eu.midnightdust.picturesign.PictureSignClient.id; @Mixin(AbstractSignEditScreen.class) public abstract class MixinSignEditScreen extends Screen { - @Shadow @Final private SignBlockEntity blockEntity; + @Shadow @Final protected SignBlockEntity blockEntity; @Shadow @Final private String[] messages; @Shadow @Final private boolean front; @Unique private static final Identifier PICTURESIGN_ICON_TEXTURE = id("icon/picturesign"); @Unique private static final Identifier CLIPBOARD_ICON_TEXTURE = id("icon/clipboard"); @Unique private static final Identifier TRASHBIN_ICON_TEXTURE = id("icon/trashbin"); - @Unique private static boolean switchScreen = false; + @Unique private static boolean picturesign$switchScreen = false; protected MixinSignEditScreen(Text title) { super(title); @@ -61,7 +61,7 @@ public abstract class MixinSignEditScreen extends Screen { this.addDrawableChild(trashbinBuilder); TextIconButtonWidget picturesignBuilder = TextIconButtonWidget.builder(Text.empty(), (buttonWidget) -> { - switchScreen = true; + picturesign$switchScreen = true; Objects.requireNonNull(client).setScreen(new PictureSignHelperScreen(this.blockEntity, front, false)); }, true).texture(PICTURESIGN_ICON_TEXTURE, 16, 16).dimension(20, 20).build(); picturesignBuilder.setPosition(this.width - 40, this.height - 40); @@ -70,8 +70,8 @@ public abstract class MixinSignEditScreen extends Screen { } @Inject(at = @At("HEAD"), method = "removed", cancellable = true) private void picturesign$removed(CallbackInfo ci) { - if (switchScreen) { - switchScreen = false; + if (picturesign$switchScreen) { + picturesign$switchScreen = false; ci.cancel(); } } diff --git a/common/src/main/java/eu/midnightdust/picturesign/render/PictureRenderer.java b/common/src/main/java/eu/midnightdust/picturesign/render/PictureRenderer.java index 5d62421..6c45d48 100755 --- a/common/src/main/java/eu/midnightdust/picturesign/render/PictureRenderer.java +++ b/common/src/main/java/eu/midnightdust/picturesign/render/PictureRenderer.java @@ -15,9 +15,9 @@ import eu.midnightdust.picturesign.util.records.PictureOffset; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gl.ShaderProgramKeys; import net.minecraft.client.render.BufferBuilder; import net.minecraft.client.render.BufferRenderer; -import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.VertexFormat; @@ -32,7 +32,6 @@ import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.RotationAxis; import net.minecraft.world.World; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import org.joml.Matrix4f; import java.util.Iterator; @@ -41,7 +40,6 @@ import static eu.midnightdust.picturesign.PictureSignClient.client; import static eu.midnightdust.picturesign.PictureSignClient.id; import static eu.midnightdust.picturesign.util.PictureSignType.GIF; import static eu.midnightdust.picturesign.util.PictureSignType.PICTURE; -import static net.minecraft.client.texture.TextureManager.MISSING_IDENTIFIER; public class PictureRenderer { private boolean isSafeUrl; @@ -150,9 +148,9 @@ public class PictureRenderer { int l = PictureSignConfig.fullBrightPicture ? 15728880 : light; if (PlatformFunctions.isModLoaded("iris") && IrisCompat.isShaderPackInUse()) RenderSystem.setShader(PictureSignConfig.pictureShader.program); - else RenderSystem.setShader(GameRenderer::getPositionColorTexLightmapProgram); + else RenderSystem.setShader(ShaderProgramKeys.POSITION_COLOR_TEX_LIGHTMAP); - Identifier texture = getMissingTexture(); + Identifier texture = PictureSignConfig.missingImageMode.missingTextureId; if (errorMessage == null) { if (type == PICTURE) { assert data != null; @@ -223,14 +221,6 @@ public class PictureRenderer { textRenderer.draw(text, 1, wrappedY + 1, 0x555555, false, matrix, vertices, TextRenderer.TextLayerType.POLYGON_OFFSET, 0, 15728880); matrix.translate(0, 0, -0.025f); } - private static final Identifier BLACK_TEXTURE = id("textures/black.png"); - public @Nullable Identifier getMissingTexture() { - return switch (PictureSignConfig.missingImageMode) { - case BLACK -> BLACK_TEXTURE; - case MISSING_TEXTURE -> MISSING_IDENTIFIER; - default -> null; - }; - } public void checkJsonUrlSafety(String jsonUrl) { isSafeJsonUrl = false; PictureSignConfig.safeJsonProviders.forEach(safe -> { diff --git a/common/src/main/java/eu/midnightdust/picturesign/screen/PictureSignHelperScreen.java b/common/src/main/java/eu/midnightdust/picturesign/screen/PictureSignHelperScreen.java index f17d01e..960a3f4 100644 --- a/common/src/main/java/eu/midnightdust/picturesign/screen/PictureSignHelperScreen.java +++ b/common/src/main/java/eu/midnightdust/picturesign/screen/PictureSignHelperScreen.java @@ -22,11 +22,9 @@ import net.minecraft.client.gui.widget.ClickableWidget; import net.minecraft.client.gui.widget.SliderWidget; import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.client.gui.widget.TextIconButtonWidget; -import net.minecraft.client.render.DiffuseLighting; -import net.minecraft.client.render.OverlayTexture; -import net.minecraft.client.render.TexturedRenderLayers; -import net.minecraft.client.render.VertexConsumer; -import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.model.Model; +import net.minecraft.client.render.*; +import net.minecraft.client.render.block.entity.AbstractSignBlockEntityRenderer; import net.minecraft.client.render.block.entity.SignBlockEntityRenderer; import net.minecraft.client.util.SpriteIdentifier; import net.minecraft.client.util.math.MatrixStack; @@ -51,7 +49,7 @@ public class PictureSignHelperScreen extends Screen { private static final Identifier CLIPBOARD_ICON_TEXTURE = id("icon/clipboard"); private static final Identifier TRASHBIN_ICON_TEXTURE = id("icon/trashbin"); private final SignBlockEntity sign; - private SignBlockEntityRenderer.SignModel model; + private Model model; protected String[] text; private final boolean front; private final boolean isHanging; @@ -166,7 +164,7 @@ public class PictureSignHelperScreen extends Screen { pictureWidgets.add(posYWidget); pictureWidgets.add(posZWidget); if (text[2].matches("(.*\\d:.*\\d:.*\\d)")) addRotationWidgets(); - this.model = SignBlockEntityRenderer.createSignModel(this.client.getEntityModelLoader(), AbstractSignBlock.getWoodType(sign.getCachedState().getBlock())); + this.model = SignBlockEntityRenderer.createSignModel(this.client.getLoadedEntityModels(), this.signType, !isHanging); } public void applyPosition(String position, int index) { String[] dimensions = new String[5]; @@ -338,7 +336,7 @@ public class PictureSignHelperScreen extends Screen { } float n = (float)(-this.client.textRenderer.getWidth(string) / 2); - this.client.textRenderer.draw(string, n, (float)(m * 10 - this.text.length * 5), i, false, matrix4f, immediate, TextRenderer.TextLayerType.NORMAL, 0, 15728880, false); + this.client.textRenderer.draw(Text.of(string), n, (float)(m * 10 - this.text.length * 5), i, false, matrix4f, immediate, TextRenderer.TextLayerType.NORMAL, 0, 15728880, false); } } @@ -373,11 +371,9 @@ public class PictureSignHelperScreen extends Screen { matrices.scale(0.6666667F, -0.6666667F, -0.6666667F); SpriteIdentifier spriteIdentifier = TexturedRenderLayers.getSignTextureId(AbstractSignBlock.getWoodType(state.getBlock())); - SignBlockEntityRenderer.SignModel var10002 = this.model; - Objects.requireNonNull(var10002); - VertexConsumer vertexConsumer = spriteIdentifier.getVertexConsumer(immediate, var10002::getLayer); - this.model.stick.visible = bl; - this.model.root.render(matrices, vertexConsumer, 15728880, OverlayTexture.DEFAULT_UV); + Objects.requireNonNull(model); + VertexConsumer vertexConsumer = spriteIdentifier.getVertexConsumer(immediate, model::getLayer); + this.model.render(matrices, vertexConsumer, 15728880, OverlayTexture.DEFAULT_UV); matrices.pop(); matrices.translate(0.0, 0.3333333432674408, 0.046666666865348816); matrices.scale(0.010416667F, -0.010416667F, 0.010416667F); @@ -385,7 +381,7 @@ public class PictureSignHelperScreen extends Screen { else { MatrixStack matrices = context.getMatrices(); matrices.scale(4.5F, 4.5F, 1.0F); - context.drawTexture(Identifier.ofVanilla("textures/gui/hanging_signs/" + this.signType.name() + ".png"), -8, -8, 0.0F, 0.0F, 16, 16, 16, 16); + context.drawTexture(RenderLayer::getGuiTextured, Identifier.ofVanilla("textures/gui/hanging_signs/" + this.signType.name() + ".png"), -8, -8, 0.0F, 0.0F, 16, 16, 16, 16); } } diff --git a/common/src/main/java/eu/midnightdust/picturesign/util/PictureDownloader.java b/common/src/main/java/eu/midnightdust/picturesign/util/PictureDownloader.java index 8c5d8c9..3cfaa59 100755 --- a/common/src/main/java/eu/midnightdust/picturesign/util/PictureDownloader.java +++ b/common/src/main/java/eu/midnightdust/picturesign/util/PictureDownloader.java @@ -2,7 +2,6 @@ package eu.midnightdust.picturesign.util; import eu.midnightdust.picturesign.PictureSignClient; import eu.midnightdust.picturesign.config.PictureSignConfig; -import net.minecraft.client.MinecraftClient; import net.minecraft.client.texture.NativeImage; import net.minecraft.client.texture.NativeImageBackedTexture; import net.minecraft.util.Identifier; @@ -10,11 +9,12 @@ import net.minecraft.util.Identifier; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.*; -import java.net.URL; +import java.net.URI; import java.util.Hashtable; import java.util.concurrent.ExecutorService; import static eu.midnightdust.picturesign.PictureSignClient.MOD_ID; +import static eu.midnightdust.picturesign.PictureSignClient.client; import static java.util.concurrent.Executors.newFixedThreadPool; public class PictureDownloader { @@ -71,8 +71,8 @@ public class PictureDownloader { service.submit(() -> { try { - BufferedInputStream in = new BufferedInputStream(new URL(url).openStream()); - File file = File.createTempFile("."+MOD_ID, "temp"); + BufferedInputStream in = new BufferedInputStream(URI.create(url).toURL().openStream()); + File file = File.createTempFile(".%s".formatted(MOD_ID), "temp"); file.deleteOnExit(); BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file)); @@ -93,7 +93,7 @@ public class PictureDownloader { data.identifier = texture; } - if (PictureSignConfig.debug) PictureSignClient.LOGGER.info("Finished downloading picture: " + url); + if (PictureSignConfig.debug) PictureSignClient.LOGGER.info("Finished downloading picture: {}", url); } catch (IOException error) { PictureSignClient.LOGGER.error("Error downloading picture: " + error); @@ -102,7 +102,7 @@ public class PictureDownloader { } private void loadLocalPicture(String url) { String realPath = url.replace("file:", ""); - if (PictureSignConfig.debug) PictureSignClient.LOGGER.info("Started loading local picture: " + url); + if (PictureSignConfig.debug) PictureSignClient.LOGGER.info("Started loading local picture: {}", url); this.cache.put(url, new PictureData(url)); service.submit(() -> { @@ -115,11 +115,11 @@ public class PictureDownloader { } } catch (IOException error) { - PictureSignClient.LOGGER.error("Error loading local picture: " + error); + PictureSignClient.LOGGER.error("Error loading local picture: {}", String.valueOf(error)); } }); - if (PictureSignConfig.debug) PictureSignClient.LOGGER.info("Finished loading local picture: " + url); + if (PictureSignConfig.debug) PictureSignClient.LOGGER.info("Finished loading local picture: {}", url); } private void loadResourcePackTexture(String url) { String realIdentifierPath = url.replace("rp:", ""); @@ -128,7 +128,7 @@ public class PictureDownloader { if (PictureSignConfig.debug) PictureSignClient.LOGGER.info("Started loading resource pack picture: " + url); Identifier id = Identifier.tryParse(realIdentifierPath); if (id == null) { - PictureSignClient.LOGGER.error("Unable to locate resource texture: " + url); + PictureSignClient.LOGGER.error("Unable to locate resource texture: {}", url); return; } @@ -140,7 +140,7 @@ public class PictureDownloader { } }); - if (PictureSignConfig.debug) PictureSignClient.LOGGER.info("Finished loading resource pack picture: " + url); + if (PictureSignConfig.debug) PictureSignClient.LOGGER.info("Finished loading resource pack picture: {}", url); } private static Identifier convert2png(File file) throws IOException { @@ -154,8 +154,9 @@ public class PictureDownloader { NativeImage nativeImage = NativeImage.read(inputStream); NativeImageBackedTexture nativeImageBackedTexture = new NativeImageBackedTexture(nativeImage); - return MinecraftClient.getInstance().getTextureManager().registerDynamicTexture("picturesign/image", - nativeImageBackedTexture); + Identifier textureId = PictureSignClient.id("picturesign/image_%s".formatted(file.hashCode())); + client.getTextureManager().registerTexture(textureId, nativeImageBackedTexture); + return textureId; } } diff --git a/common/src/main/resources/assets/picturesign/lang/de_de.json b/common/src/main/resources/assets/picturesign/lang/de_de.json index 1b37e26..b028a28 100755 --- a/common/src/main/resources/assets/picturesign/lang/de_de.json +++ b/common/src/main/resources/assets/picturesign/lang/de_de.json @@ -13,7 +13,7 @@ "picturesign.midnightconfig.signRenderDistance":"Schildsichtweite", "picturesign.midnightconfig.safeMode":"Sicherer Modus", "picturesign.midnightconfig.safeMode.tooltip":"Lädt nur Bilder von vertrauten Seiten", - "picturesign.midnightconfig.ebeWarning":"§cWenn du die Mod 'Enhanced Block Entities' benutzt, stelle sicher, dass du alles in Relation zu Schildern in der EBE Config deaktiviert hast!", + "picturesign.midnightconfig.ebeWarning":"§cDu benutzt die Mod 'Enhanced Block Entities' – stelle sicher, dass du alles in Relation zu Schildern in der EBE Config deaktiviert hast!", "picturesign.midnightconfig.safeProviders":"Sichere Bildanbieter", "picturesign.midnightconfig.safeGifProviders":"Sichere GIF-Anbieter", "picturesign.midnightconfig.safeMultimediaProviders":"Sichere Multimedia-Anbieter", @@ -26,7 +26,7 @@ "key.picturesign.copy_sign": "Text eines Schildes kopieren", "key.picturesign.edit_sign":"Schild bearbeiten", - "picturesign.midnightconfig.category.1general": "Generell", + "picturesign.midnightconfig.category.general": "Generell", "picturesign.midnightconfig.category.advanced": "Fortgeschritten", "picturesign.midnightconfig.fullBrightPicture": "Höchste Helligkeit", "picturesign.midnightconfig.fullBrightPicture.tooltip": "Sorgt dafür, dass Bilder immer vollkommen beleuchtet dargestellt werden", diff --git a/common/src/main/resources/assets/picturesign/lang/en_us.json b/common/src/main/resources/assets/picturesign/lang/en_us.json index 71ddee7..ee3f087 100755 --- a/common/src/main/resources/assets/picturesign/lang/en_us.json +++ b/common/src/main/resources/assets/picturesign/lang/en_us.json @@ -1,6 +1,6 @@ { "picturesign.midnightconfig.title":"PictureSign Config", - "picturesign.midnightconfig.category.1general":"General", + "picturesign.midnightconfig.category.general":"General", "picturesign.midnightconfig.category.advanced":"Advanced", "picturesign.midnightconfig.enabled":"Enable Pictures", @@ -17,7 +17,7 @@ "picturesign.midnightconfig.signRenderDistance":"Sign render distance", "picturesign.midnightconfig.safeMode":"Safe mode", "picturesign.midnightconfig.safeMode.tooltip":"Only load images from trusted providers", - "picturesign.midnightconfig.ebeWarning":"§cIf you are using the mod 'Enhanced Block Entities' make sure to disable anything sign-related in it's config!", + "picturesign.midnightconfig.ebeWarning":"§cYou are using the mod 'Enhanced Block Entities' – make sure to disable anything sign-related in it's config!", "picturesign.midnightconfig.safeProviders":"Safe Image Providers", "picturesign.midnightconfig.safeGifProviders":"Safe GIF Providers", "picturesign.midnightconfig.safeMultimediaProviders":"Safe Multimedia Providers", diff --git a/common/src/main/resources/picturesign.mixins.json b/common/src/main/resources/picturesign.mixins.json index b599655..a42960c 100755 --- a/common/src/main/resources/picturesign.mixins.json +++ b/common/src/main/resources/picturesign.mixins.json @@ -4,7 +4,7 @@ "compatibilityLevel": "JAVA_17", "client": [ "MixinSignBlockEntityRenderer", - "MixinHangingSignBlockEntityRenderer", + "MixinAbstractSignBlockEntityRenderer", "MixinSignEditScreen", "MixinSignBlockEntity" ], diff --git a/gradle.properties b/gradle.properties index 6e967f4..b2e3ce2 100755 --- a/gradle.properties +++ b/gradle.properties @@ -1,26 +1,26 @@ org.gradle.jvmargs=-Xmx2048M -minecraft_version=1.21 -yarn_mappings=1.21+build.2 +minecraft_version=1.21.4 +yarn_mappings=1.21.4+build.1 enabled_platforms=fabric,neoforge archives_base_name=picturesign -mod_version=2.0.1 +mod_version=2.1.0 maven_group=eu.midnightdust release_type=release curseforge_id=533897 modrinth_id=9WP2dmkk -midnightlib_version=1.6.3 -watermedia_version=2.1.2 +midnightlib_version=1.7.2+1.21.4 +watermedia_version=2.1.24 iris_version=1.6.17+1.20.4 # The latest Iris version causes the build to fail, but we don't need that anyway -fabric_loader_version=0.15.11 -fabric_api_version=0.100.1+1.21 +fabric_loader_version=0.16.9 +fabric_api_version=0.111.0+1.21.4 -neoforge_version=21.0.14-beta +neoforge_version=21.4.10-beta yarn_mappings_patch_neoforge_version = 1.21+build.4 quilt_loader_version=0.19.0-beta.18