MC Toolkit

Poradniki / Polecenia i dane

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

Trzy klucze mieszczą całą budowlę: size, palette i blocks. Każdy blok to liczba całkowita wskazująca na paletę, więc obszar 32³ z kamienia kosztuje jeden ciąg znaków i 32 768 małych wpisów — po jednej pozycji i indeksie, nigdy nazwie.

Plik struktury .nbt — to, co zapisuje Blok struktur i co dostarcza datapack — jest znacznie prostszym formatem, niż wygląda z zewnątrz. Wszystko, czego potrzebuje budowla, mieści się w garści kluczy najwyższego poziomu, a jedna decyzja projektowa wyjaśnia, dlaczego pliki są tak małe, jak są.

Trzy klucze, które niosą budowlę

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 komponent Properties przechowują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 oraz state, a state to indeks do palety, nie identyfikator bloku. Dębowe schody skierowane na północ to dane ciągu znaków raz, a każde kolejne to mała liczba całkowita.

Na tym polega cały trik. Obszar 32 × 32 × 32 z samego kamienia to jeden wpis palety i 32 768 wpisów bloków, po jednej pozycji i indeksie — a nie 32 768 kopii słowa minecraft:stone. Paleta rośnie wraz z tym, ile różnych rzeczy zbudowałeś, a lista bloków rośnie wraz z tym, jak dużą rzecz zbudowałeś. To bardzo różne liczby i zwykle tylko jedna z nich jest duża.

Dwie konsekwencje warte uwzględnienia w projektowaniu

Stany bloków mnożą twoją paletę, a nie listę bloków. Dębowe schody to nie jeden wpis palety — to jeden wpis na każdą orientację, której faktycznie użyłeś. Cztery kierunki, górna i dolna połowa, proste oraz oba narożniki wewnętrzne i zewnętrzne: ten sam blok może zajmować kilkanaście slotów palety. Tak więc budowla pełna detali ma dużą paletę, a prosta nie, niezależnie od rozmiaru.

Tylko zapisane pozycje dostają wpis. Lista bloków to lista, 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 niepostawionego. Ale Blok struktur zapisuje powietrze jak każdy inny blok; pomijana jest tylko Pustka strukturalna. Pusta w środku budowla jest tańsza w zapisie tylko wtedy, gdy wypełnisz jej wnętrze Pustką strukturalną przed zapisem.

nbt jest przypisany do bloku i opcjonalny

Każdy wpis w blocks może nieść własny komponent nbt, a większość go nie ma. To tutaj mieszczą się zawartość Skrzyni, tekst tabliczki, mob z spawnera i wzory banera — przypisane do pojedynczego bloku, a nie do palety.

To rozróżnienie ma znaczenie: dane palety są współdzielone, a dane bloku nie. Dwie Skrzynie to jeden wpis palety, bo są tym samym stanem bloku — ale każda trzyma własny ekwipunek we własnym nbt. Zmieniasz stan bloku i dotykasz palety; zmieniasz to, co jest w środku, i dotykasz jednego wpisu na liście bloków.

Odczytywanie warstwa po warstwie

Przeglądarka tutaj jest celowo dwuwymiarowa. Aby narysować warstwę y, przechodzi przez listę bloków, zachowuje wpisy, których pos[1] równa się y, i wyszukuje state każdego z nich w palecie. To cały algorytm i warto go znać, bo w ten sam sposób samodzielnie przejrzysz 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 oznacza też, że plik struktury nie mówi nic o tym, gdzie należy go umieścić w świecie. size to obszar ograniczający, a wartości pos są względne wobec jego narożnika. Umiejscowienie to sprawa Bloku struktur, a nie pliku.

Narzędzia struktur i komponentów NBT →

Więcej poradników

Zobacz wszystkie →