aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2025-05-04 14:18:24 +0200
committerLinnea Gräf <nea@nea.moe>2025-05-04 14:26:15 +0200
commit3743ae88d94c02660046d79b67c76d5bce6cdcc1 (patch)
tree7f363e2148b9e4ef37ffcddebbb67dee4b8ec9f2 /src
parentafa128e8c621f3ad8139d57a7b4723d170b6106b (diff)
downloadFirmament-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.kt7
-rw-r--r--src/texturePacks/java/moe/nea/firmament/features/texturepack/predicates/ExtraAttributesPredicate.kt20
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 == "*")