From 10fb88df4b3ec8547991e78df04d047b3b859c70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gerber=20L=C3=B3r=C3=A1nt=20Viktor?= <17655680+glorantq@users.noreply.github.com> Date: Sun, 17 Mar 2024 14:56:32 +0100 Subject: [PATCH] Make TextureVariable references align with game behaviour (#525) While the current implementation of reference handling in this class was the correct way to go (only handling texture names starting with # as references), the game is happy to accept references without a leading hashtag, since it just chops it off and continues on the same code path regardless. This commit makes the reference handling in BlueMap align with this behaviour, potentially allowing "broken" models to render as they do in game. This method works for reference resolving, since if a string passed into the texture field contains a ':' then it must be a namespaced key, and if it contains a '/' it has to be a resource key, because the 'minecraft' namespace is implied in these cases. The other way around, if someone were to pass in a string like 'oak_planks', it is safe to assume it is a reference, since the implied resource key would be 'minecraft:oak_planks', but textures aren't at the root level in that namespace. --- .../resources/resourcepack/blockmodel/TextureVariable.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/resources/resourcepack/blockmodel/TextureVariable.java b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/resources/resourcepack/blockmodel/TextureVariable.java index 914b59fd..6984d501 100644 --- a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/resources/resourcepack/blockmodel/TextureVariable.java +++ b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/resources/resourcepack/blockmodel/TextureVariable.java @@ -140,13 +140,16 @@ public class TextureVariable { public TextureVariable read(JsonReader in) throws IOException { String value = in.nextString(); if (value.isEmpty()) throw new IOException("Can't parse an empty String into a TextureVariable"); + if (value.charAt(0) == '#') { return new TextureVariable(value.substring(1)); } else { + if (!(value.contains(":") || value.contains("/"))) { + return new TextureVariable(value); + } + return new TextureVariable(new ResourcePath<>(value)); } } - } - }