使い方と制約

同じデータを同じ識別子にする決定的なエンコードです。まとめやすくするために装備や独自データを消さず、転送サイズ上限を守ります。

CanonicalComponents

CanonicalComponents
package dev.nebulastorage.api.platform

import net.minecraft.nbt.CompoundTag
import net.minecraft.nbt.ListTag
import net.minecraft.nbt.StringTag
import net.minecraft.nbt.Tag

internal object CanonicalComponents {
    const val MAX_BYTES = 8192
    fun transferable(components: String): Boolean = components.toByteArray(Charsets.UTF_8).size <= MAX_BYTES
    fun encode(tag: Tag): String = when (tag) {
        is CompoundTag -> tag.allKeys.sorted().joinToString(",", "{", "}") { key ->
            StringTag.quoteAndEscape(key) + ":" + encode(tag.get(key)!!)
        }
        is ListTag -> tag.joinToString(",", "[", "]", transform = ::encode)
        else -> tag.toString()
    }
}
ソース

src/main/kotlin/dev/nebulastorage/api/platform/CanonicalComponents.kt; editorial/ja.json

43b4d12d69e6033c24fa8c39dac383ef2429b446