Guides / Commands & Data

Plik struktury .nbt przechowuje indeksy palety, a nie nazwy bloków — dlatego jest tak mały

Cała konstrukcja mieści się w trzech kluczach: rozmiarze, palecie i blokach. Każdy blok to liczba całkowita wskazująca na paletę, więc 32³ objętości kamienia kosztuje jeden ciąg znaków i 32 768 liczb.

Plik struktury .nbt — czyli to, co zapisuje Blok struktur i dostarcza datapack — ma znacznie prostszy format, niż mogłoby się wydawać. Wszystko, czego potrzebuje konstrukcja, znajduje się w kilku kluczach najwyższego poziomu, a jedna decyzja projektowa wyjaśnia, dlaczego pliki są tak małe.

Trzy klucze, które przechowują konstrukcję

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 przechowuje każdy odrębny stan bloku dokładnie raz. Wpis to Name — identyfikator bloku, taki jak minecraft:oak_stairs — plus opcjonalny złożony obiekt Properties zawierający jego stan bloku, taki jak facing: north i half: bottom.

blocks nigdy nie powtarza nazwy. Każdy wpis zawiera pos trzech liczb całkowitych i state, a state to indeks w palecie, a nie identyfikator bloku. Dębowe schody skierowane na północ to dane tekstowe raz, a każdy kolejny to mała liczba całkowita.

To cała sztuczka. Objętość 32 × 32 × 32 zwykłego Kamienia to jeden wpis palety i 32 768 numerów indeksów — a nie 32 768 kopii słowa minecraft:stone. Paleta rośnie wraz z liczbą różnych rzeczy, z których zbudowałeś, a lista bloków rośnie wraz z tym, jak dużo zbudowałeś. To bardzo różne liczby, a tylko jedna z nich jest zazwyczaj duża.

Dwie konsekwencje, które warto uwzględnić w projekcie

Stany bloków mnożą twoją paletę, a nie listę bloków. Dębowe schody to nie jeden wpis palety — to jeden na każdą faktycznie używaną orientację. Skierowane na cztery strony, górna i dolna połowa, proste oraz oba wewnętrzne i zewnętrzne narożniki: ten sam blok może zajmować kilkanaście miejsc w palecie. Zatem szczegółowa konstrukcja ma dużą paletę, a prosta nie, niezależnie od rozmiaru.

Tylko umieszczone bloki otrzymują wpis. Lista bloków to lista, a nie gęsta tablica 3D, a wpis, którego nie ma, po prostu nie istnieje — przeglądarka na tej stronie wypełnia swoją siatkę -1 i traktuje brakującą współrzędną jako nic nieumieszczonego. Pusta konstrukcja jest naprawdę tańsza w przechowywaniu niż solidna o tych samych wymiarach.

nbt jest na blok i opcjonalne

Każdy wpis w blocks może zawierać własny złożony obiekt nbt, a większość tego nie robi. To tutaj znajdują się zawartość Skrzyni, tekst tabliczki, mob spawner'a i wzory banera — przypisane do pojedynczego bloku, a nie do palety.

Rozróżnienie ma znaczenie: dane palety są współdzielone, a dane bloków nie. Dwie Skrzynie to jeden wpis palety, ponieważ mają ten sam stan bloku — ale każda zachowuje swój własny ekwipunek w swoim własnym nbt. Zmiana stanu bloku dotyka palety; zmiana tego, co jest w środku, dotyka jednego wpisu na liście bloków.

Czytanie warstwa po warstwie

Przeglądarka tutaj jest celowo 2D. Aby narysować warstwę y, przechodzi przez listę bloków, zachowuje wpisy, których pos[1] jest równe y, i wyszukuje state każdego z nich w palecie. To cały algorytm i warto go znać, ponieważ w ten sposób sam byś sprawdził jeden z tych plików: nie ma indeksu przestrzennego do zbudowania ani dekompresji poza opakowaniem gzip. Format to płaska lista, którą filtrujesz.

Co również oznacza, że plik struktury nic nie mówi o tym, gdzie należy do świata. size to ramka ograniczająca, a wartości pos są względne do jej narożnika. Umieszczenie jest sprawą Bloku struktur, a nie pliku.

Narzędzia struktur i komponentów NBT →

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.