Mendukung Minecraft Bedrock Edition dan Java Edition — serta semua core server untuk keduanya, baik yang populer maupun yang jarang dikenal: Vanilla, Paper, Spigot, Purpur, Folia, Fabric, Forge, NeoForge, Mohist, Sponge, Bedrock Dedicated Server, PocketMine-MP, Nukkit, PowerNukkitX, Cloudburst, Dragonfly, Endstone, LeviLamina, dan lainnya. Daftar lengkap.
NBT (Named Binary Tag) adalah format pohon biner Minecraft: satu tag terdiri dari tipe satu byte, nama dengan awalan panjang, dan payload; compound dapat bersarang hingga ditutup oleh byte TAG_End. Ada 13 tipe tag dan lima pengodean yang digunakan di Java dan Bedrock. Halaman ini mendokumentasikan semuanya, sedangkan editor di atas dapat memeriksa setiap penjelasan memakai file nyata.
13 tipe tagBig-endianLittle-endianVarintgzipzlibSNBT
byte tipe elemen, panjang int, lalu payload tanpa nama
[1,2]
10
TAG_Compound
tipe + nama + payload berulang hingga TAG_End
{a:1}
11
TAG_Int_Array
panjang int, lalu sejumlah int 4 byte
[I;1,2]
12
TAG_Long_Array
panjang int, lalu sejumlah long 8 byte
[L;1L,2L]
Satu file memiliki satu root TAG_Compound: satu byte tipe 0x0A, nama, lalu isi compound. Tag bernama hanya muncul di dalam compound — elemen list hanya membawa payload, sehingga satu list selalu homogen.
Lima pengodean yang digunakan
Pengodean
Integer
Panjang string
Akar
Digunakan oleh
Java (klasik)
Big-endian dengan lebar tetap
Big-endian 2 byte
Bernama
Dunia, struktur, dan skematik Java
Jaringan Java (1.20.2+)
Big-endian dengan lebar tetap
Big-endian 2 byte
Tanpa nama
Protokol Java
Bedrock
Little-endian dengan lebar tetap
Little-endian 2 byte
Bernama
Dunia Bedrock, .mcstructure, nilai LevelDB
Bedrock level.dat
Little-endian dengan lebar tetap
Little-endian 2 byte
Bernama, setelah header 8 byte
Metadata dunia Bedrock
Jaringan Bedrock
Varint zigzag untuk int dan long
Varint tanpa tanda
Bernama
Protokol Bedrock
Dalam pengodean varint, TAG_Short, TAG_Float, dan TAG_Double tetap little-endian dengan lebar tetap; hanya TAG_Int dan TAG_Long yang menjadi varint zigzag, sedangkan panjang array dan list mengikuti perilaku TAG_Int. Panjang string memakai varint tanpa tanda, sehingga batas 65535 byte pada pengodean lebar tetap juga tidak berlaku.
String: UTF-8 termodifikasi dan UTF-8
Java melakukan serialisasi string dengan DataOutputStream.writeUTF, yaitu UTF-8 termodifikasi: karakter NUL ditulis sebagai C0 80, bukan 00, sedangkan karakter di luar Basic Multilingual Plane ditulis sebagai dua bagian surrogate tiga byte (CESU-8), bukan satu urutan empat byte. Bedrock memakai UTF-8 standar. Alat yang mengasumsikan satu pengodean untuk keduanya akan merusak emoji dan sebagian teks CJK saat menyimpan — editor ini memakai pengodean sesuai format, sehingga nama dunia berisi emoji tetap utuh setelah dibuka dan disimpan kembali.
Kompresi
NBT sendiri tidak dikompresi; wadah yang menentukannya. File Java biasanya memakai gzip (magic 1F 8B), payload chunk di dalam file region memakai zlib (magic 78 01, 78 9C, atau 78 DA), sedangkan Bedrock menyimpan level.dat dan file struktur tanpa kompresi. Deteksi dilakukan melalui magic byte, sehingga parser yang sama menangani ketiganya — dan file yang disimpan dengan kompresi salah merupakan penyebab paling umum dunia hasil edit manual tidak dapat dimuat.
File minimal, byte demi byte
Contoh standar hello_world.nbt: root compound bernama hello world yang berisi satu tag string name dengan nilai Bananrama. Dalam pengodean big-endian Java:
0A TAG_Compound
00 0B 68 65 6C 6C 6F 20 77 6F 72 6C 64 name length 11, "hello world"
08 TAG_String
00 04 6E 61 6D 65 name length 4, "name"
00 09 42 61 6E 61 6E 72 61 6D 61 value length 9, "Bananrama"
00 TAG_End
Dokumen yang sama dalam pengodean little-endian Bedrock hanya berbeda pada urutan byte dua field panjang: 0B 00, bukan 00 0B. Dalam NBT jaringan Bedrock, panjang tersebut menjadi byte varint tunggal, 0B dan 04, tanpa padding. Masukkan salah satu dari ketiga format ke editor di atas untuk mengetahui format yang diterima.
SNBT
SNBT adalah NBT dalam bentuk teks dan digunakan oleh perintah: /data merge entity @s {Invulnerable:1b}. Sufiks tipe menjaga informasi tipe agar tidak hilang — b untuk byte, s untuk short, L untuk long, f untuk float, d untuk double, tanpa sufiks untuk int — dan literal array bertipe ditulis sebagai [B;…], [I;…], [L;…]. Editor mengekspor SNBT dari setiap file yang dimuat, sehingga dua versi dunia dapat dibandingkan dengan alat pembanding teks biasa.
Pertanyaan yang sering diajukan
Apakah ada spesifikasi NBT resmi?
Tidak ada spesifikasi formal dari Mojang. Format ini didokumentasikan oleh Notch pada 2010 dan sejak itu dipelihara oleh komunitas; id tag dan tata letak pada halaman ini sesuai dengan yang dibaca dan ditulis gim saat ini.
Mengapa Bedrock memakai little-endian?
Engine Bedrock menggunakan C++ dan ditujukan untuk perangkat keras little-endian, sehingga nilai disimpan dalam urutan byte bawaan perangkat. Serialisasi Java memakai big-endian karena itulah yang ditetapkan oleh kontrak DataOutput Java.
Apa itu pengodean varint zigzag?
Cara menulis integer dengan byte sesedikit mungkin sambil menjaga bilangan negatif tetap pendek: tanda dimasukkan ke bit rendah, sehingga −1 dikodekan sebagai 1 dan 1 sebagai 2. Protokol Bedrock memakainya untuk int dan long.
Bisakah TAG_List menyimpan tipe campuran?
Tidak. Satu list mendeklarasikan satu tipe elemen dan setiap entri harus sesuai. Data campuran memerlukan list berisi compound.
Berapa panjang maksimum string?
65535 byte pada pengodean lebar tetap karena field panjang berupa unsigned short. Pengodean jaringan varint tidak memiliki batas praktis.