Minecraft Bedrock Edition ve Java Edition desteği — her iki sürümün yaygın veya az bilinen tüm sunucu çekirdekleriyle: Vanilla, Paper, Spigot, Purpur, Folia, Fabric, Forge, NeoForge, Mohist, Sponge, Bedrock Dedicated Server, PocketMine-MP, Nukkit, PowerNukkitX, Cloudburst, Dragonfly, Endstone, LeviLamina ve diğerleri. Tam liste.
NBT (Named Binary Tag), Minecraft’ın ikili ağaç biçimidir. Etiket; bir baytlık tür, uzunluk önekli ad ve yükten oluşur. Compound’lar bir TAG_End baytıyla kapanana kadar iç içe geçer. Java ve Bedrock’ta kullanılan 13 etiket türü ve beş kodlama vardır. Bu sayfa tümünü belgeler; yukarıdaki düzenleyici bilgileri gerçek dosyayla denetlemenizi sağlar.
öğe türü baytı, int uzunluk, ardından adsız yükler
[1,2]
10
TAG_Compound
tür + ad + yük, şu etikete kadar yinelenir: TAG_End
{a:1}
11
TAG_Int_Array
int uzunluk, ardından o kadar 4 baytlık int
[I;1,2]
12
TAG_Long_Array
int uzunluk, ardından o kadar 8 baytlık long
[L;1L,2L]
Dosya tek bir kök TAG_Compound: bir tür baytı 0x0A, bir ad ve ardından compound içeriği gelir. Adlı etiketler yalnızca compound içinde bulunur; liste öğeleri sadece yük taşıdığı için liste tek türdedir.
Varint kodlamasında TAG_Short, TAG_Float ve TAG_Double sabit genişlikli little-endian kalır; yalnızca TAG_Int ve TAG_Long zigzag varint olur. Dizi ve liste uzunlukları TAG_Int ile aynı kodlamayı izler. String uzunlukları unsigned varint’tir; sabit kodlamalardaki 65535 bayt sınırı böylece kalkar.
Dizeler: değiştirilmiş UTF-8 ve UTF-8
Java dizeleri DataOutputStream.writeUTF; bu değiştirilmiş UTF-8’dir. NUL karakteri C0 80 yerine 00, Temel Çok Dilli Düzlem dışındaki karakterler tek dört baytlık dizi yerine iki üç baytlık surrogate parça (CESU-8) olarak yazılır. Bedrock standart UTF-8 kullanır. Aynı kodlamayı kullanan araç emoji ve bazı CJK metinlerini bozar; bu düzenleyici biçime göre kodlar.
Sıkıştırma
NBT kendi başına sıkıştırılmaz; kapsayıcı karar verir. Java dosyaları genellikle gzip (magic 1F 8B), bölge dosyalarındaki chunk yükleri zlib’dir (magic 78 01, 78 9C veya 78 DA), Bedrock ise level.dat ve yapı dosyalarını sıkıştırmadan saklar. Algılama magic baytlarıyla yapılır; aynı ayrıştırıcı üçünü de işler. Yanlış sıkıştırmayla kaydedilen dosya, elle düzenlenen dünyanın yüklenmemesinin en yaygın nedenidir.
En küçük dosya, bayt bayt
Klasik hello_world.nbt: şu adlı kök compound hello world adlı kök compound içinde name değerli tek string etiketi Bananrama. Java big-endian kodlamasında:
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
Aynı belgenin Bedrock little-endian kodlamasında yalnızca iki uzunluk alanının bayt sırası değişir: 0B 00 yerine 00 0B. Bedrock ağ NBT’sinde uzunluklar tek varint baytı olur: 0B ve 04, hiç dolgu yoktur. Üçünden birini yukarıdaki düzenleyiciye bırakınca hangisi olduğunu bildirir.
SNBT
SNBT, NBT’nin metinle yazılmış biçimidir ve komutların kullandığı biçimdir: /data merge entity @s {Invulnerable:1b}. Tür sonekleri veriyi kayıpsız tutar: b byte, s short, L long, f float, d double; int için sonek yoktur. Türlü dizi sabitleri [B;…], [I;…], [L;…]. Düzenleyici yüklenen her dosyadan SNBT dışa aktarır; böylece dünyanın iki sürümü normal metin farkıyla karşılaştırılabilir.
Sık Sorulan Sorular
Resmî bir NBT belirtimi var mı?
Mojang tarafından yayımlanmış resmî bir belirtim yoktur. Biçim 2010’da Notch tarafından belgelenmiş, o zamandan beri toplulukça sürdürülmüştür; bu sayfadaki etiket kimlikleri ve düzen oyunun bugün okuyup yazdığı biçimle eşleşir.
Bedrock neden little-endian kullanır?
Bedrock motoru C++ ile yazılmıştır ve little-endian donanımı hedefler; değerleri yerel sırada saklar. Java serileştirmesi, Java DataOutput sözleşmesi gereği big-endian’dır.
Zigzag varint kodlaması nedir?
Negatifleri de kısa tutarak integer değerleri mümkün olan en az baytla yazma yöntemidir. İşaret düşük bite katlanır; −1, 1 olarak; 1 ise 2 olarak kodlanır. Bedrock protokolü int ve long değerlerinde kullanır.
TAG_List karışık türler içerebilir mi?
Hayır. Liste tek bir öğe türü bildirir ve her girdi bu türle eşleşmelidir. Karışık veriler compound listesi gerektirir.
Azami string uzunluğu nedir?
Uzunluk alanı unsigned short olduğu için sabit kodlamalarda 65535 bayttır. Varint ağ kodlamasında pratik bir sınır yoktur.