Rehberler / Komutlar ve Veriler
Uzantı size şematik formatını söylemez — 33 .schematic dosyasının 31'i başka bir şeyin tahminiydi
Beş format, blokları paketlemenin dört farklı yolu ve .schematic iki tanesi tarafından paylaşılıyor. NBT kökünü koklamak, dosya adına güvenmekten iyidir; sayılmış kanıtlarla.
Dolaşımda beş şematik formatı var ve dosya adı bir gerçek değil, yalnızca bir ipucu. Buradaki görüntüleyici bir dosyanın ne olduğuna içine bakarak karar veriyor ve bunun ölçülmüş bir gerekçesi var.
Beş format, beş uzantı
| uzantı | format |
|---|---|
.nbt | vanilla yapı |
.schem | Sponge |
.schematic | Sponge — varsayılan olarak |
.litematic | Litematica |
.mcstructure | Bedrock |
Sorunlu satır .schematic. Bu uzantı klasik MCEdit formatı ile Sponge'unki tarafından paylaşılıyor ve dosyalar bilmeyen ya da umursamayan kişiler tarafından yeniden adlandırılıyor.
Gerçek bir korpus üzerinde sayıldı: 33 .schematic dosyasından 31'i MCEdit, biri vanilla yapı ve biri Litematica idi. Yani uzantının varsayılan tahmini neredeyse hepsi için yanlış ve iki dosya hiçbir anlamda .schematic değildi — sadece yanlış adlandırılmıştı.
Çözüm, NBT kökünü koklamak ve dosyanın ne olduğunun ne diye adlandırıldığına üstün gelmesine izin vermek:
- bir
Regionsanahtarı → Litematica paletteveblocks→ vanilla yapı- aksi halde MCEdit şekil testi, sonra uzantıya geri dön
Aynı blokları paketlemenin dört yolu
Formatlar görsel olarak farklılaşmıyor. Her biri blok verisini gerçekten farklı bir şekilde saklıyor ve her seçimin bir sonucu var:
Vanilla .nbt — bir liste. Kaydedilen her konum için bir girdi, her biri bir palet indeksi belirtiyor. Hava, diğer tüm bloklar gibi saklanıyor; yalnızca yapı boşluğu dışarıda bırakılıyor, yani içi boş bir yapı yalnızca kaydetmeden önce içi boşaltılmışsa ucuz oluyor.
Sponge .schem — bir varint akışı. Palet indeksleri değişken genişlikte tam sayılar olarak paketleniyor: bayt başına yedi bit yük, devam etmek için yüksek bit ayarlı. Küçük paletler blok başına bir bayta mal oluyor; 127 girdiyi aşan bir palet yüksek indeksler için iki bayt tutmaya başlıyor. Yoğun, ama kendini tanımlayan bir yapı.
MCEdit .schematic — düz bir bayt dizisi. Blok başına bir bayt, yani en fazla 256 blok türü — bu tam olarak neden isteğe bağlı bir AddBlocks yan dizisine sahip olduğunu açıklıyor; bu dizi blok başına bir nibble olarak dört id biti daha ekliyor, böylece id'ler 4.095'e ulaşıyor. Bu, blok durumlarından önceki eski bir sayısal id formatı: id'leri sayı ve Schematica bir tane yazdığında bir SchematicaMapping bileşiği üzerinden, aksi halde vanilla 1.12 id tablosu üzerinden çözümleniyor.
Litematica .litematic — bit olarak paketlenmiş long'lar. İndeksler tam olarak max(2, bits needed for the palette) bit ile, LSB önce olacak şekilde paketleniyor ve bir girdi iki long arasındaki sınırı aşabiliyor. 5 girdilik bir palet blok başına 3 bit kullanıyor; 300 girdilik bir palet 9 bit kullanıyor.
2 bitlik taban önemli: iki blokluk bir palet bile girdi başına 2 bitin altına sıkıştırılmıyor, yani tek renkli bir yapı matematiğin öne sürdüğü kadar küçük değil.
Bedrock little-endian'dır
.mcstructure daha alt bir düzeyde sıra dışı olan: Bedrock, her Java formatının big-endian yazdığı yerde little-endian NBT yazıyor. Bu, herhangi bir format ayrıştırması gerçekleşmeden önce belirleniyor — baytları yanlış endianness ile okursanız yanlış bir yapı elde etmezsiniz, hiç ayrıştırılamayan bir çöp elde edersiniz.
Bu pratikte ne anlama geliyor
Bir şematik bir yerde açılmıyorsa, ilk soru "dosya bozuk mu" değil, "bu dosya adının söylediği şey mi" olmalı. Bir indirme sayfasından gelen bir .schematic, Sponge olmaktan çok MCEdit olmaya yatkındır ve uzantıya güvenen bir araç, tamamen sağlam bir dosyayı reddeder.
Ve aynı yapının iki dışa aktarımını karşılaştırırken, boyut farkları çoğunlukla içerikle değil
- kodlamayla* ilgilidir — içi boş bir yapının boşaltılmış vanilla
.nbt'si ile aynı şeyin bit olarak paketlenmiş.litematic'i farklı sorunları çözüyor.