diff options
author | Linnea Gräf <nea@nea.moe> | 2025-05-04 14:18:24 +0200 |
---|---|---|
committer | Linnea Gräf <nea@nea.moe> | 2025-05-04 14:26:15 +0200 |
commit | 3743ae88d94c02660046d79b67c76d5bce6cdcc1 (patch) | |
tree | 7f363e2148b9e4ef37ffcddebbb67dee4b8ec9f2 /src | |
parent | afa128e8c621f3ad8139d57a7b4723d170b6106b (diff) | |
download | Firmament-3743ae88d94c02660046d79b67c76d5bce6cdcc1.tar.gz Firmament-3743ae88d94c02660046d79b67c76d5bce6cdcc1.tar.bz2 Firmament-3743ae88d94c02660046d79b67c76d5bce6cdcc1.zip |
feat: Add *base64 and *json nbt path matchers
Diffstat (limited to 'src')
-rw-r--r-- | src/main/kotlin/util/Base64Util.kt | 7 | ||||
-rw-r--r-- | src/texturePacks/java/moe/nea/firmament/features/texturepack/predicates/ExtraAttributesPredicate.kt | 20 |
2 files changed, 26 insertions, 1 deletions
diff --git a/src/main/kotlin/util/Base64Util.kt b/src/main/kotlin/util/Base64Util.kt index 44bcdfd..c39c601 100644 --- a/src/main/kotlin/util/Base64Util.kt +++ b/src/main/kotlin/util/Base64Util.kt @@ -1,7 +1,14 @@ package moe.nea.firmament.util +import java.util.Base64 + object Base64Util { + fun decodeString(str: String): String { + return Base64.getDecoder().decode(str.padToValidBase64()) + .decodeToString() + } + fun String.padToValidBase64(): String { val align = this.length % 4 if (align == 0) return this diff --git a/src/texturePacks/java/moe/nea/firmament/features/texturepack/predicates/ExtraAttributesPredicate.kt b/src/texturePacks/java/moe/nea/firmament/features/texturepack/predicates/ExtraAttributesPredicate.kt index 6fea1c3..bcf2eaf 100644 --- a/src/texturePacks/java/moe/nea/firmament/features/texturepack/predicates/ExtraAttributesPredicate.kt +++ b/src/texturePacks/java/moe/nea/firmament/features/texturepack/predicates/ExtraAttributesPredicate.kt @@ -1,10 +1,12 @@ - package moe.nea.firmament.features.texturepack.predicates +import com.google.gson.Gson import com.google.gson.JsonArray import com.google.gson.JsonElement import com.google.gson.JsonObject import com.google.gson.JsonPrimitive +import com.mojang.serialization.JsonOps +import kotlin.jvm.optionals.getOrDefault import moe.nea.firmament.features.texturepack.FirmamentModelPredicate import moe.nea.firmament.features.texturepack.FirmamentModelPredicateParser import moe.nea.firmament.features.texturepack.StringMatcher @@ -17,8 +19,10 @@ import net.minecraft.nbt.NbtFloat import net.minecraft.nbt.NbtInt import net.minecraft.nbt.NbtList import net.minecraft.nbt.NbtLong +import net.minecraft.nbt.NbtOps import net.minecraft.nbt.NbtShort import net.minecraft.nbt.NbtString +import moe.nea.firmament.util.Base64Util import moe.nea.firmament.util.extraAttributes fun interface NbtMatcher { @@ -261,6 +265,20 @@ class NbtPrism(val path: List<String>) { var switch = mutableListOf<NbtElement>() for (pathSegment in path) { if (pathSegment == ".") continue + if (pathSegment != "*" && pathSegment.startsWith("*")) { + if (pathSegment == "*json") { + for (element in rootSet) { + val eString = element.asString() ?: continue + val element = Gson().fromJson(eString, JsonElement::class.java) + switch.add(JsonOps.INSTANCE.convertTo(NbtOps.INSTANCE, element)) + } + } else if (pathSegment == "*base64") { + for (element in rootSet) { + val string = element.asString() ?: continue + switch.add(NbtString.of(Base64Util.decodeString(string))) + } + } + } for (element in rootSet) { if (element is NbtList) { if (pathSegment == "*") |