From 289cc5028caadc6711ad64b75b6068c50fb848e1 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Sat, 10 May 2025 00:09:38 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=80=E4=BA=9Btint?= =?UTF-8?q?=E5=92=8Ctexture=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../generation/AbstractModelGenerator.java | 6 ++- .../core/pack/model/tint/ConstantTint.java | 4 +- .../pack/model/tint/CustomModelDataTint.java | 4 +- .../pack/model/tint/SimpleDefaultTint.java | 4 +- .../core/pack/model/tint/Tint.java | 6 +-- .../core/pack/model/tint/TintFactory.java | 41 +++++++++++++++---- gradle.properties | 2 +- 7 files changed, 47 insertions(+), 20 deletions(-) diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/AbstractModelGenerator.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/AbstractModelGenerator.java index acc0d0c08..d62e049f2 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/AbstractModelGenerator.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/AbstractModelGenerator.java @@ -41,8 +41,10 @@ public abstract class AbstractModelGenerator implements ModelGenerator { Map textures = model.texturesOverride(); if (textures != null) { for (Map.Entry texture : textures.entrySet()) { - if (!ResourceLocation.isValid(texture.getValue())) { - throw new LocalizedResourceConfigException("warning.config.model.generation.texture.invalid", texture.getKey(), texture.getValue()); + if (texture.getValue().charAt(0) != '#') { + if (!ResourceLocation.isValid(texture.getValue())) { + throw new LocalizedResourceConfigException("warning.config.model.generation.texture.invalid", texture.getKey(), texture.getValue()); + } } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/ConstantTint.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/ConstantTint.java index e1b926ae6..54c6d40c2 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/ConstantTint.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/ConstantTint.java @@ -10,9 +10,9 @@ import java.util.Map; public class ConstantTint implements Tint { public static final Factory FACTORY = new Factory(); - private final Either> value; + private final Either> value; - public ConstantTint(Either> value) { + public ConstantTint(Either> value) { this.value = value; } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/CustomModelDataTint.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/CustomModelDataTint.java index c76be9f9e..0ed576384 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/CustomModelDataTint.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/CustomModelDataTint.java @@ -10,10 +10,10 @@ import java.util.Map; public class CustomModelDataTint implements Tint { public static final Factory FACTORY = new Factory(); - private final Either> value; + private final Either> value; private final int index; - public CustomModelDataTint(Either> value, int index) { + public CustomModelDataTint(Either> value, int index) { this.index = index; this.value = value; } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/SimpleDefaultTint.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/SimpleDefaultTint.java index a08c0daec..a543bcfe9 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/SimpleDefaultTint.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/SimpleDefaultTint.java @@ -9,10 +9,10 @@ import java.util.Map; public class SimpleDefaultTint implements Tint { public static final Factory FACTORY = new Factory(); - private final Either> value; + private final Either> value; private final Key type; - public SimpleDefaultTint(Either> value, Key type) { + public SimpleDefaultTint(Either> value, Key type) { this.value = value; this.type = type; } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/Tint.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/Tint.java index 364145257..b0be23502 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/Tint.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/Tint.java @@ -12,16 +12,16 @@ public interface Tint extends Supplier { Key type(); - default void applyAnyTint(JsonObject json, Either> value, String key) { + default void applyAnyTint(JsonObject json, Either> value, String key) { if (value.primary().isPresent()) { json.addProperty(key, value.primary().get()); } else { - List list = value.fallback().get(); + List list = value.fallback().get(); if (list.size() != 3) { throw new RuntimeException("Invalid tint value list size: " + list.size() + " which is expected to be 3"); } JsonArray array = new JsonArray(); - for (int i : list) { + for (float i : list) { array.add(i); } json.add(key, array); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/TintFactory.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/TintFactory.java index ee595ad49..e0fbd1947 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/TintFactory.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/TintFactory.java @@ -1,6 +1,7 @@ package net.momirealms.craftengine.core.pack.model.tint; import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; +import net.momirealms.craftengine.core.util.MiscUtils; import org.incendo.cloud.type.Either; import java.util.ArrayList; @@ -11,27 +12,51 @@ public interface TintFactory { Tint create(Map arguments); - default Either> parseTintValue(Object value) { + default Either> parseTintValue(Object value) { if (value instanceof Number i) { return Either.ofPrimary(i.intValue()); } else if (value instanceof List list) { if (list.size() == 3) { - List intList = new ArrayList<>(); - for (Object o : list) { - intList.add(Integer.parseInt(o.toString())); + List strList = MiscUtils.getAsStringList(list); + boolean hasDot = false; + for (String str : strList) { + if (str.contains(".")) { + hasDot = true; + break; + } } - return Either.ofFallback(intList); + List fList = new ArrayList<>(); + for (String str : strList) { + if (hasDot) { + fList.add(Float.parseFloat(str)); + } else { + fList.add(convertToFloat(Integer.parseInt(str))); + } + } + return Either.ofFallback(fList); } } else if (value instanceof String s) { String[] split = s.split(","); if (split.length == 3) { - List intList = new ArrayList<>(); + List fList = new ArrayList<>(); + boolean hasDot = s.contains("."); for (String string : split) { - intList.add(Integer.parseInt(string)); + if (hasDot) { + fList.add(Float.parseFloat(string)); + } else { + fList.add(convertToFloat(Integer.parseInt(string))); + } } - return Either.ofFallback(intList); + return Either.ofFallback(fList); } } throw new LocalizedResourceConfigException("warning.config.item.model.tint.invalid_value", value.toString()); } + + static float convertToFloat(int value) { + if (value < 0 || value > 255) { + throw new IllegalArgumentException("Tint value out of range: " + value + ". Allowed range is [0,255]"); + } + return value / 255.0f; + } } diff --git a/gradle.properties b/gradle.properties index c7950e2ef..ccae7e353 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx1G # Project settings # Rule: [major update].[feature update].[bug fix] -project_version=0.0.53.3 +project_version=0.0.53.4 config_version=32 lang_version=12 project_group=net.momirealms