Uzantı şematik formatı söylemez — 33 .schematic dosyasının 31'i başka bir şeyin tahminiydi
Beş format, dört farklı blok paketleme yöntemi ve .schematic bunlardan ikisi tarafından paylaşılıyor. NBT kökünü koklamak, dosya adına güvenmekten daha iyidir, sayılmış kanıtlarla.
Dolaşımda beş şematik formatı var ve dosya adı bir olgudan ziyade bir ipucudur. Buradaki görüntüleyici, bir dosyanın ne olduğunu içine bakarak belirler ve bunun ölçülmüş bir nedeni vardır.
Beş format, beş uzantı
| uzantı | format |
|---|---|
.nbt | vanilla yapı |
.schem | Sünger |
.schematic | Sünger — varsayılan olarak |
.litematic | Litematica |
.mcstructure | Katman Kayası |
Sorunlu satır .schematic. Bu uzantı klasik MCEdit formatı ve Sünger'inki tarafından paylaşılıyor ve dosyalar, bilmeyen veya umursamayan kişiler tarafından yeniden adlandırılıyor.
Gerçek bir külliyatta sayıldığında: 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ıştı 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, nasıl adlandırıldığına üstün gelmesine izin vermektir:
- bir
Regionsanahtarı → Litematica paletteveblocks→ vanilla yapı- aksi takdirde MCEdit şekil testi, sonra uzantıya geri dönme
Aynı blokları paketlemenin dört yolu
Formatlar kozmetik olarak farklılık göstermez. Her biri blok verilerini gerçekten farklı bir şekilde depolar ve her seçimin bir sonucu vardır:
Vanilla .nbt — seyrek bir liste. Yerleştirilen her blok için bir giriş, her biri bir palet indeksini adlandırır. Hava basitçe yoktur, bu yüzden içi boş bir yapı ucuzdur.
Sünger .schem — bir varint akışı. Palet indeksleri değişken genişlikli tamsayılar olarak paketlenir: bayt başına yedi bit yük, devam etmek için yüksek bit ayarlanır. Küçük paletler blok başına bir bayta mal olur; 127'den fazla girişi olan bir palet, yüksek indeksler için ikiye mal olmaya başlar. Yoğun, ancak kendini tanımlayan.
MCEdit .schematic — düz bir bayt dizisi. Blok başına bir bayt, yani maksimum 256 blok tipi — bu da tam olarak neden blok başına bir nibble olarak dokuzuncu bir biti paketleyen bir AddBlocks yan dizisine ihtiyaç duyduğunu açıklar. Bu, blok durumlarından önceki eski bir sayısal kimlik formatıdır ve kimlikleri adlar yerine bir SchematicaMapping bileşiği aracılığıyla çözülür.
Litematica .litematic — bit paketli long'lar. İndeksler tam olarak max(2, bits needed for the palette) bit olarak paketlenir, LSB-önce, ve bir giriş iki long arasındaki sınırı aşabilir. 5 girişli bir palet blok başına 3 bit kullanır; 300 girişli bir palet 9 bit kullanır.
2 bit tabanı önemlidir: iki bloklu bir palet bile giriş başına 2 bitin altına sıkışmaz, bu yüzden tek renkli bir yapı matematiğin önerdiği kadar küçük değildir.
Katman Kayası little-endian'dır
.mcstructure daha düşük bir seviyede farklıdır: Katman Kayası, her Java formatının big-endian yazdığı yerde little-endian NBT yazar. Bu, herhangi bir format ayrıştırması yapılmadan önce kararlaştırılır — baytları yanlış endianness ile okursanız, yanlış bir yapı elde etmezsiniz, hiç ayrıştırılamayan çöp elde edersiniz.
Bunun pratik anlamı
Bir şematik bir yerde açılmazsa, ilk soru "dosya bozuk mu" değil, "bu dosya adının söylediği şey mi" olur. Bir indirme sayfasından gelen .schematic, Sünger'den çok daha büyük olasılıkla MCEdit'tir ve uzantıya güvenen bir araç, mükemmel bir dosyayı reddedecektir.
Ve aynı yapının iki dışa aktarımını karşılaştırırken, boyut farklılıkları çoğunlukla içerikten ziyade kodlama ile ilgilidir — içi boş bir yapının seyrek vanilla .nbt'si ve aynı şeyin bit paketli .litematic'si farklı sorunları çözmektedir.