Files
libmc/docs/NBT-SNBT.md
T

75 lines
1.9 KiB
Markdown
Raw Permalink Normal View History

2026-09-08 12:23:55 +08:00
# NBT
```kotlin
fun main() {
// build
val nbt = buildNBT {
"t_b" byte 0x01
"n" compound {
"n_s" string "STR"
"n_d" double 0.0
"n_f" float 0.1f
"n_ia" intArray intArrayOf(1, 1, 1, 1)
}
}
val buf = BytesBuffer().toNBTOutput(
NBTTag.CompoundTag(
mapOf("" to nbt)
)
).writeNBTRootCompound()
println(buf.toHexString())
// read
val levelDat: BytesBuffer = File("src/commonTest/resources/level.dat").readBytes().wrap()
val readRoot = levelDat.toNBTInput().readNBTRootCompound()
println(readRoot)
}
```
# SNBT
```kotlin
fun main() {
// parse snbt from snbt string
val raw = """{key1: 123,'key2': 'somevalue1',"key3": {subkey1: 0x1C8,"subkey2": "somevalue2"}}"""
println(snbt(raw))
// serialize snbt from NBTCompound
println(snbt(raw).toSNBT())
// build snbt
val snbt = buildSNBT {
"key1" string "TEST"
"intValue" int 1
"Count" byte 1
"Damage" int 0
}
val prettySnbt = buildSNBT(prettyPrint = true) {
"Name" string "Steve"
"Health" float 20.0f
"IsCreative" boolean true
"Pos" intArray intArrayOf(100, 64, -200)
"Custom Name" string "Alex\nWith Newline"
"Attributes" compound {
"AttackDamage" double 5.5
"MovementSpeed" float 0.1f
}
"Inventory" list {
compound {
"id" string "minecraft:diamond_sword"
"Count" byte 1
}
compound {
"id" string "minecraft:apple"
"Count" byte 16
}
}
}
println(snbt) // SNBT String
println(prettySnbt) // SNBT String
println(snbt(snbt)) // parse snbt string to NBTCompound
println(snbt(prettySnbt)) // parse snbt string to NBTCompound
}
```