File struktur .nbt menyimpan indeks palet, bukan nama blok — itulah sebabnya ukurannya begitu kecil
Tiga kunci menampung seluruh bangunan: size, palette, dan blocks. Setiap blok adalah bilangan bulat yang menunjuk ke dalam palet, jadi volume batu berukuran 32³ hanya memakan satu string dan 32.768 entri kecil — masing-masing berupa posisi dan indeks, bukan nama.
File struktur .nbt — hal yang disimpan oleh Balok Struktur dan dikirim oleh datapack — adalah format yang jauh lebih sederhana daripada yang terlihat dari luar. Semua yang dibutuhkan sebuah bangunan berada dalam segelintir kunci tingkat atas, dan satu keputusan desain menjelaskan mengapa file-file ini bisa sekecil itu.
Tiga kunci yang membawa seluruh bangunan
size [x, y, z] — a list of exactly three integers
palette [ { Name, Properties } … ] — every DISTINCT block state, once
blocks [ { pos, state, nbt } … ] — one entry per placed block
palette menyimpan setiap keadaan blok yang berbeda tepat satu kali. Sebuah entri adalah Name — id blok, seperti minecraft:oak_stairs — ditambah senyawa Properties opsional yang menampung blockstate-nya, seperti facing: north dan half: bottom.
blocks tidak pernah mengulang nama. Setiap entri membawa pos berisi tiga bilangan bulat dan state, dan state adalah indeks ke dalam palet, bukan id blok. Tangga Ek yang menghadap utara adalah data string satu kali saja, dan setiap tangga setelahnya hanyalah bilangan bulat kecil.
Itulah seluruh triknya. Volume Batu berukuran 32 × 32 × 32 hanyalah satu entri palet dan 32.768 entri blok yang masing-masing berisi posisi plus indeks — bukan 32.768 salinan kata minecraft:stone. Palet bertambah besar seiring banyaknya hal berbeda yang kamu bangun, dan daftar blok bertambah besar seiring besarnya yang kamu bangun. Keduanya angka yang sangat berbeda, dan biasanya hanya satu yang besar.
Dua konsekuensi yang layak diperhitungkan sejak awal
Blockstate melipatgandakan paletmu, bukan daftar blokmu. Tangga Ek bukan satu entri palet — melainkan satu entri per orientasi yang benar-benar kamu pakai. Menghadap empat arah, bagian atas dan bawah, lurus serta sudut dalam dan luar: blok yang sama bisa menempati selusin slot palet. Jadi bangunan yang penuh detail punya palet besar dan bangunan polos tidak, terlepas dari ukurannya.
Hanya posisi yang tersimpan yang mendapat entri. Daftar blok adalah sebuah daftar, bukan array 3D yang padat, dan entri yang tidak ada ya memang tidak ada — penampil di halaman ini mengisi gridnya dengan -1 dan memperlakukan koordinat yang hilang sebagai tidak ada apa pun. Tapi Balok Struktur menyimpan udara seperti blok lainnya; hanya Struktur Hampa yang dikecualikan. Bangunan berongga hanya lebih hemat disimpan jika kamu mengisi bagian dalamnya dengan Struktur Hampa sebelum menyimpan.
nbt bersifat per blok dan opsional
Setiap entri dalam blocks boleh membawa senyawa nbt-nya sendiri, dan sebagian besar tidak. Di sinilah isi Peti, teks tanda, mob spawner, dan pola banner berada — melekat pada blok individualnya, bukan pada palet.
Perbedaannya penting: data palet dibagi bersama, data blok tidak. Dua Peti adalah satu entri palet, karena keduanya keadaan blok yang sama — tapi masing-masing menyimpan inventarisnya sendiri di nbt-nya sendiri. Ubah keadaan bloknya dan kamu menyentuh palet; ubah isinya dan kamu menyentuh satu entri di daftar blok.
Membaca satu lapisan sekaligus
Penampil di sini sengaja dibuat 2D. Untuk menggambar lapisan y, ia menelusuri daftar blok, menyimpan entri yang pos[1]-nya sama dengan y, lalu mencari state masing-masing di palet. Itulah keseluruhan algoritmanya, dan penting untuk diketahui karena begitulah cara kamu memeriksa sendiri salah satu file ini: tidak ada indeks spasial yang perlu dibangun dan tidak ada dekompresi selain pembungkus gzip. Formatnya adalah daftar datar yang kamu filter.
Yang juga berarti file struktur tidak memberi tahu apa pun tentang di mana ia seharusnya berada di dunia. size adalah kotak pembatas dan nilai pos bersifat relatif terhadap sudutnya. Penempatan adalah urusan Balok Struktur, bukan urusan file.