Edytor NBT Java Edition

Obsługuje Minecraft Bedrock Edition i Java Edition — a także każdy popularny i niszowy rdzeń serwera obu edycji: Vanilla, Paper, Spigot, Purpur, Folia, Fabric, Forge, NeoForge, Mohist, Sponge, Bedrock Dedicated Server, PocketMine-MP, Nukkit, PowerNukkitX, Cloudburst, Dragonfly, Endstone, LeviLamina i pozostałe. Pełna lista.

Minecraft Java Edition przechowuje dane jako wielkobajtowe NBT, niemal zawsze skompresowane gzipem. Przeciągnij poniżej dowolny plik Java — level.dat, plik UUID z playerdata, servers.dat, strukturę .nbt lub schemat WorldEdit — a edytor go zdekompresuje, odczyta w kolejności wielkobajtowej i zapisze ponownie z kompresją gzip, aby gra przyjęła go bez dodatkowych zmian.

VanillaPaperSpigotPurpurFoliaFabricQuiltForgeNeoForgeSponge

Upuść tutaj plik NBT Java

level.dat · .nbt · .mcstructure · .schem · .schematic · .dat · zrzuty chunków

Z czego składa się świat Java

Wszystkie poniższe pliki można otworzyć w edytorze powyżej. Same pliki regionów (.mca) są kontenerami wielu skompresowanych chunków, a nie pojedynczymi dokumentami NBT. Najpierw wyodrębnij więc dane chunka — edytor odczyta otrzymane w ten sposób NBT skompresowane algorytmem zlib.

ŚcieżkaZawartośćKompresja
world/level.datNazwa świata, tryb gry, reguły, spawn, DataVersiongzip
world/level.dat_oldPoprzedni zapis tego samego plikugzip
world/playerdata/<uuid>.datEkwipunek, skrzynia Endu, pozycja, zdrowie, XP, atrybutygzip
world/data/raids.dat, idcounts.dat, map_*.datStan najazdów, liczniki identyfikatorów bytów, mapygzip
world/data/scoreboard.datCele, drużyny, wynikigzip
world/region/*.mcaNBT chunka w kontenerze regionuzlib dla każdego chunka
servers.datLista serwerów wieloosobowych z klientabrak
hotbar.nbtZapisane paski szybkiego dostępu z trybu kreatywnegobrak
*.nbt w datapackachStruktury umieszczane przez bloki struktur i bloki układankigzip

Jak Java koduje NBT

  • Kolejność wielkobajtowa. Każda liczba całkowita i zmiennoprzecinkowa jest zapisywana od najbardziej znaczącego bajtu, zgodnie z działaniem DataOutputStream w Java.
  • Nazwany korzeń. Plik zaczyna się od typu tagu 0x0A, a następnie zawiera poprzedzoną długością nazwę korzenia w UTF-8 — historycznie pustą w level.dat.
  • Zmodyfikowany UTF-8. Ciągi znaków korzystają z kodowania writeUTF w Java: dwubajtowej długości, znaku NUL zapisanego jako C0 80 oraz znaków spoza podstawowej płaszczyzny podzielonych na dwie trzybajtowe części (CESU-8). Narzędzie traktujące te dane jak zwykły UTF-8 uszkadza emoji w nazwach światów; ten edytor koduje je poprawnie.
  • Domyślnie gzip. NbtIo.readCompressed oczekuje strumienia gzip. Pliki zapisane bez kompresji można wczytać w niektórych narzędziach, ale nie w grze.
  • Korzeń bez nazwy w sieci. Od wersji 1.20.2 protokół przesyła NBT bez nazwy korzenia. Zrzuty pakietów w tej postaci są tutaj wykrywane jako format sieciowy Java.

Paper, Spigot, Fabric, Forge — te same pliki

Forki i programy ładujące mody zmieniają sposób działania serwera, ale nie sposób zapisu świata. Paper, Purpur, Pufferfish, Folia, Fabric, Quilt, Forge, NeoForge, Mohist, Arclight i Sponge korzystają ze struktury NBT Vanilla, dlatego wszystkie informacje na tej stronie dotyczą ich bez zmian. Forki dodają jedynie dodatkowe pliki obok świata — paper-world.yml i konfiguracje modów — zapisane jako YAML lub TOML i niezwiązane z NBT.

Mody i pluginy mogą dodawać własne tagi złożone wewnątrz level.dat lub playerdata. Otwierają się one tutaj tak jak pozostałe tagi; nie zmieniaj ich, jeśli nie wiesz, jak korzysta z nich dany mod.

DataVersion i migracja wersji

Światy Java zawierają liczbę całkowitą DataVersion, która identyfikuje format świata i zwiększa się z każdą wersją testową. Przydatne wartości odniesienia: 1.16.5 to 2586, 1.17.1 to 2730, 1.18.2 to 2975, 1.19.4 to 3337, 1.20.4 to 3700, a 1.21 to 3953. Właśnie ten tag sprawia, że klient starszy niż wersja, która zapisała świat, odmawia jego otwarcia. Ręczne obniżenie wartości nie konwertuje danych chunków do starszej wersji, a jedynie usuwa zabezpieczenie. Odczytaj tag, aby ustalić, która wersja zapisała świat; nie edytuj go w celu wymuszenia przejścia na starszą wersję.

Najczęściej zadawane pytania

Czy mogę otworzyć level.dat Java, którego gra nie wczytuje?

Zwykle tak — edytor lepiej niż gra toleruje nadmiarowe bajty na końcu i dokładnie wskazuje miejsce zatrzymania odczytu, jeśli plik jest ucięty. Jeżeli edytor także odmówi, spróbuj otworzyć level.dat_old, czyli poprzedni automatyczny zapis.

Czy edytor obsługuje sieciowe NBT od wersji 1.20.2?

Tak. Od wersji 1.20.2 protokół pomija nazwę korzenia. Zrzut w tej postaci jest wykrywany jako format sieciowy Java i można go ponownie zapisać jako sieciowe NBT albo zwykły plik z nazwanym korzeniem.

Czy mogę edytować chunk z pliku regionu .mca?

NBT chunka można edytować po wyodrębnieniu go z kontenera regionu. Sam .mca zawiera indeks oraz wiele danych chunków skompresowanych algorytmem zlib, a ten edytor pracuje z pojedynczym dokumentem NBT, nie z całym kontenerem.

Czy edycja playerdata może uszkodzić dane gracza?

Tylko jeśli wykonasz ją przy działającym serwerze — serwer przechowuje stan gracza w pamięci i zapisuje go podczas wylogowania, nadpisując Twój plik. Najpierw wyłącz gracza z serwera, wprowadź zmiany, a dopiero potem pozwól mu połączyć się ponownie. Zobacz edytor playerdata.

Czy level.dat musi być skompresowany gzipem?

Program wczytujący Vanilla odczytuje gzip. Zapisz plik z kompresją ustawioną na gzip — jest to ustawienie domyślne, jeśli plik źródłowy był tak skompresowany — a gra go zaakceptuje.

Powiązane narzędzia