Guides / Commands & Data

Rozszerzenie nie zdradza formatu schematu — 31 z 33 plików .schematic to były czyjeś domysły

Pięć formatów, cztery różne sposoby pakowania bloków, a rozszerzenie .schematic jest wspólne dla dwóch z nich. Węszenie w korzeniu NBT jest lepsze niż ufanie nazwie pliku, co potwierdzają zebrane dowody.

W obiegu jest pięć formatów schematów, a nazwa pliku to raczej wskazówka niż fakt. Przeglądarka decyduje, czym jest plik, zaglądając do jego wnętrza, i jest ku temu uzasadniony powód.

Pięć formatów, pięć rozszerzeń

rozszerzenieformat
.nbtstruktura waniliowa
.schemSponge
.schematicSponge — domyślnie
.litematicLitematica
.mcstructureSkała macierzysta

Problematyczny jest wiersz .schematic. To rozszerzenie jest wspólne dla klasycznego formatu MCEdit i Sponge'a, a pliki są zmieniane przez ludzi, którzy nie wiedzą lub się nie przejmują.

Policzone na prawdziwym korpusie: z 33 plików .schematic, 31 było MCEdit, jeden był strukturą waniliową, a jeden Litematicą. Zatem domyślne przypuszczenie rozszerzenia jest błędne dla prawie wszystkich z nich, a dwa pliki nie były .schematic w żadnym sensie — po prostu miały błędną nazwę.

Rozwiązaniem jest węszenie w korzeniu NBT i pozwolenie, aby to, czym plik jest, wygrało z tym, jak się nazywa:

  • klucz Regions → Litematica
  • palette i blocks → struktura waniliowa
  • w przeciwnym razie test kształtu MCEdit, a następnie powrót do rozszerzenia

Cztery sposoby pakowania tych samych bloków

Formaty nie różnią się kosmetycznie. Każdy przechowuje dane bloków w prawdziwie inny sposób, a każdy wybór ma swoje konsekwencje:

Waniliowa .nbt — rzadka lista. Jeden wpis na umieszczony blok, każdy wskazujący indeks palety. Powietrze jest po prostu nieobecne, więc pusta konstrukcja jest tania.

Sponge .schem — strumień varint. Indeksy palety spakowane jako zmiennoprzecinkowe liczby całkowite (varint): siedem bitów danych na bajt, z ustawionym bitem wysokim do kontynuacji. Małe palety kosztują jeden bajt na blok; paleta powyżej 127 wpisów zaczyna kosztować dwa bajty dla wysokich indeksów. Gęste, ale samopiszące się.

MCEdit .schematic — płaska tablica bajtów. Jeden bajt na blok, więc maksymalnie 256 typów bloków — dlatego właśnie potrzebuje dodatkowej tablicy AddBlocks pakującej dziewiąty bit jako półbajt (nibble) na blok. Jest to starszy format z identyfikatorami numerycznymi sprzed stanów bloków, a jego identyfikatory są rozwiązywane za pomocą złożonego SchematicaMapping, a nie nazw.

Litematica .litematic — spakowane bitowo długie liczby (bit-packed longs). Indeksy są pakowane dokładnie po max(2, bits needed for the palette) bitów każdy, od najmniej znaczącego bitu (LSB-first), a wpis może przekraczać granicę między dwoma długimi liczbami. Paleta 5-elementowa używa 3 bitów na blok; paleta 300-elementowa używa 9.

Ważna jest dolna granica 2 bitów: nawet paleta dwublokowa nie kompresuje się poniżej 2 bitów na wpis, więc monochromatyczna konstrukcja nie jest tak mała, jak sugeruje matematyka.

Skała macierzysta jest little-endian

.mcstructure jest wyjątkiem na niższym poziomie: Skała macierzysta zapisuje NBT w kolejności little-endian, podczas gdy każdy format Java zapisuje w kolejności big-endian. Jest to ustalane przed rozpoczęciem jakiegokolwiek parsowania formatu — odczytanie bajtów z niewłaściwą kolejnością bajtów nie da błędnej struktury, lecz śmieci, które w ogóle nie zostaną sparsowane.

Co to oznacza w praktyce

Jeśli schemat nie otwiera się gdzieś, pierwsze pytanie nie brzmi „czy plik jest uszkodzony”, ale „czy ten plik jest tym, co mówi jego nazwa”. Plik .schematic ze strony pobierania jest znacznie bardziej prawdopodobne, że będzie MCEdit niż Sponge, a narzędzie, które ufa rozszerzeniu, odrzuci idealnie dobry plik.

A porównując dwa eksporty tej samej konstrukcji, różnice w rozmiarze dotyczą głównie kodowania, a nie zawartości — rzadka waniliowa .nbt pustej konstrukcji i spakowana bitowo .litematic tej samej rzeczy rozwiązują różne problemy.

Podgląd 3D schematów →

More guides

Browse all →

Szukasz innych narzędzi do Minecrafta?

Zestaw generatorów, podglądów i konwerterów działających w przeglądarce — wszystkie za darmo.