Ekstensi tidak memberi tahu Anda format skematik — 31 dari 33 file .schematic adalah tebakan milik sesuatu yang lain
Lima format, empat cara berbeda dalam mengemas blok, dan .schematic dipakai bersama oleh dua di antaranya. Mengendus akar NBT lebih baik daripada memercayai nama file, dengan bukti yang terhitung.
Ada lima format skematik yang beredar, dan nama file hanyalah petunjuk, bukan fakta. Penampil di sini menentukan apa sebuah file dengan melihat isinya, dan ada alasan terukur untuk itu.
Lima format, lima ekstensi
| ekstensi | format |
|---|---|
.nbt | struktur vanilla |
.schem | Sponge |
.schematic | Sponge — secara bawaan |
.litematic | Litematica |
.mcstructure | Bedrock |
Baris yang bermasalah adalah .schematic. Ekstensi itu dipakai bersama oleh format MCEdit klasik dan milik Sponge, dan file-file diganti nama oleh orang yang tidak tahu atau tidak peduli.
Terhitung pada korpus nyata: dari 33 file .schematic, 31 adalah MCEdit, satu adalah struktur vanilla dan satu adalah Litematica. Jadi tebakan bawaan ekstensi itu salah untuk hampir semuanya, dan dua file sama sekali bukan .schematic — hanya salah nama.
Solusinya adalah mengendus akar NBT dan membiarkan apa yang file itu adalah menang atas apa namanya:
- kunci
Regions→ Litematica palettedanblocks→ struktur vanilla- jika tidak, uji bentuk MCEdit, lalu jatuh kembali ke ekstensi
Empat cara mengemas blok yang sama
Format-format ini tidak berbeda secara kosmetik. Masing-masing menyimpan data blok dengan cara yang benar-benar berbeda, dan setiap pilihan punya konsekuensinya:
Vanilla .nbt — sebuah daftar. Satu entri per posisi yang disimpan, masing-masing menyebut indeks palet. Udara disimpan seperti blok lainnya; hanya struktur hampa yang dihilangkan, jadi bangunan berongga hanya murah jika bagian dalamnya dihampakan sebelum disimpan.
Sponge .schem — aliran varint. Indeks palet dikemas sebagai bilangan bulat berlebar variabel: tujuh bit muatan per byte, bit tinggi diset untuk melanjutkan. Palet kecil berbiaya satu byte per blok; palet di atas 127 entri mulai berbiaya dua untuk indeks tinggi. Padat, tapi menjelaskan dirinya sendiri.
MCEdit .schematic — larik byte datar. Satu byte per blok, jadi maksimum 256 jenis blok — yang justru sebabnya ia punya larik samping AddBlocks opsional yang menambah empat bit id lagi sebagai satu nibble per blok, sehingga id mencapai 4.095. Ini format id numerik warisan dari sebelum block state: id-nya adalah angka, diselesaikan melalui senyawa SchematicaMapping ketika Schematica menulisnya, dan melalui tabel id vanilla 1.12 jika tidak.
Litematica .litematic — long berpaket bit. Indeks dikemas tepat max(2, bits needed for the palette) bit masing-masing, LSB lebih dulu, dan satu entri bisa melintasi batas antara dua long. Palet 5 entri memakai 3 bit per blok; palet 300 entri memakai 9.
Batas bawah 2 bit itu penting: bahkan palet dua blok tidak terkompresi di bawah 2 bit per entri, jadi bangunan monokrom tidak sekecil yang disarankan matematika.
Bedrock itu little-endian
.mcstructure adalah yang berbeda pada tingkat yang lebih rendah: Bedrock menulis NBT little-endian sedangkan setiap format Java menulis big-endian. Itu ditentukan sebelum penguraian format apa pun terjadi — baca byte dengan endianness yang salah dan Anda tidak mendapat struktur yang salah, melainkan sampah yang gagal diuraikan sama sekali.
Artinya secara praktis
Jika sebuah skematik tidak mau terbuka di suatu tempat, pertanyaan pertamanya bukan "apakah file ini rusak" melainkan "apakah file ini sesuai namanya". Sebuah .schematic dari halaman unduhan jauh lebih mungkin MCEdit daripada Sponge, dan alat yang memercayai ekstensi akan menolak file yang sebenarnya baik-baik saja.
Dan saat membandingkan dua ekspor dari bangunan yang sama, perbedaan ukuran sebagian besar soal pengodean bukan konten — .nbt vanilla yang dihampakan dari bangunan berongga dan .litematic berpaket bit dari hal yang sama sedang menyelesaikan masalah yang berbeda.