Как открыть файл nbt в minecraft

Обновлено: 01.07.2024

Формат файла Named Binary Tag (NBT) — это чрезвычайно простой и эффективный структурированный двоичный формат, используемый игрой Minecraft для самых разных целей. В связи с этим несколько сторонних утилит теперь также используют этот формат. Вы можете найти примеры файлов внизу этой статьи.

Mojang выпустила эталонную реализацию вместе со своим инструментом преобразования Anvil, доступным на этой заархивированной странице

Содержание

Текущее использование

Формат NBT в настоящее время используется в нескольких местах, главным образом:

  • В протоколе как часть данных слота
  • Сохраненный список серверов многопользовательской игры ( server.dat ).
  • Данные игрока (как для одиночной, так и для многопользовательской игры, по одному файлу на игрока). Сюда входят такие вещи, как инвентарь и местоположение.
  • Сохраненные миры (как для одиночной, так и для многопользовательской игры).
    • Файл мирового индекса ( level.dat ), содержащий общую информацию (точка возрождения, время суток и т. д.)
    • Разбивка данных (см. Файлы регионов)

    Файлы NBT, с которыми вы можете столкнуться как разработчик, будут храниться тремя различными способами, в основном второй вариант в соответствии с исходной спецификацией Notch.

    • Несжатый, , (он же DEFLATE с несколькими дополнительными байтами)

    Библиотеки

    Существует очень много библиотек для работы с NBT, написанных на нескольких языках, и часто по нескольку на каждый язык. Например,

    Если у вас нет конкретных целей или требований к лицензии, настоятельно рекомендуется использовать одну из существующих библиотек.

    Утилиты

    Почти каждое стороннее приложение Minecraft на том или ином уровне использует NBT. Также существует несколько специализированных редакторов NBT, которые, вероятно, будут вам полезны, если вы разрабатываете собственную библиотеку NBT. К ним относятся:

    Спецификация

    Формат файла NBT чрезвычайно прост, и написать библиотеку, способную читать/записывать его, несложно. Этот формат поддерживает 13 типов данных, один из которых используется для закрытия составных тегов. Настоятельно рекомендуется прочитать этот раздел целиком, иначе вы можете столкнуться с проблемами.

    Идентификатор типа Длина имени Имя Полезная нагрузка
    Декодировано 2 9 shortTest 32767
    На диске (в шестнадцатеричном формате) 02 00 09 73 68 6F 72 74 54 65 73 74 7F FF

    Если бы этот TAG_Short был в TAG_List , он был бы не чем иным, как полезной нагрузкой, поскольку тип подразумевается, а теги на первом уровне списка безымянны.

    Основное издание

    В редакции Bedrock в формат NBT внесено несколько существенных изменений. Прежде всего, первый тег в файле NBT иногда может быть TAG_List вместо TAG_Compound. Кроме того, данные NBT кодируются в одном из двух разных форматов: версии с прямым порядком байтов, предназначенной для записи на диск, и версии VarInt, предназначенной для передачи по сети.

    С прямым порядком байтов

    Идентичен формату с обратным порядком байтов, используемому в версии Java, но все числа закодированы с прямым порядком байтов. Это включает 16-битный префикс длины перед именами тегов и значениями TAG_String, а также значениями TAG_Float и TAG_Double.

    Вариант

    Этот формат немного сложнее других. Отличия от формата с обратным порядком байтов в редакции Java заключаются в следующем:

    • Значения TAG_Short, TAG_Float и TAG_Double кодируются как их аналоги с прямым порядком байтов.
    • Значения TAG_Int и префиксы длины для TAG_List, TAG_Byte_Array, TAG_Int_Array и TAG_Long_Array кодируются как VarInts с кодировкой ZigZag
    • Значения TAG_Long закодированы как VarLong с кодировкой ZigZag.
    • Все строки (имена тегов и значения TAG_String) имеют префикс длины с обычным VarInt

    Примеры

    Есть два файла примера де-факто, используемые для тестирования вашей реализации ( test.nbt и bigtest.nbt ), изначально предоставленные Маркусом. Приведенный ниже пример выходных данных был сгенерирован с помощью инструмента PyNBT debug-nbt.

    test.nbt

    Этот первый пример представляет собой несжатый пример NBT "Hello World". Если вы правильно разберете его, вы получите структуру, похожую на следующую:

    Вот объяснение примера:

    th> < tr>
    (Все это неявно находится внутри соединения) Идентификатор типа (первый элемент в неявном соединении) Длина имени корневого соединения Имя корневого соединения Идентификатор типа первого элемента в корневом соединении Длина имени первого элемента в корнеИмя первого элемента Длина строки Строка Конец тега (корневого соединения)
    Decoded Compound 11 hello world String 4 имя 9 Бананрама
    На диске (в шестнадцатеричном формате) 0a 00 0b 68 65 6c 6c 6f 20 77 6f 72 6c 64 08 00 04 6e 61 6d 65 00 09 42 61 6e 61 6e 72 61 6d 61 00

    bigtest.nbt

    Этот второй пример представляет собой сжатый gzip тест каждого доступного тега. Если ваша программа может успешно разобрать этот файл, значит, вы молодец. Обратите внимание, что теги в TAG_List не имеют имени, как упоминалось выше.

    NBT — это расширение, которое дается файлам, используемым Minecraft. NBT — это файлы, используемые для хранения игровых данных. Они касаются мира, в котором ведется игра, или уровня. Это двоичный формат, написанный Маркусом Перссоном. Файлы NBT можно открывать и сохранять с помощью инструмента под названием JNBT (Библиотека Java NBT). Это библиотека для API от Грэма Эджкомба. JNBT доступен по лицензии BSD.

    Minecraft – это трехмерная игра, в которой вам предстоит исследовать и строить мир, основной структурной единицей которого является куб.

    Программы, которые могут открыть файл .NBT

    Окна
    Mac OS
    Линукс

    Как открыть файлы NBT

    Если появилась ситуация, в которой Вы не можете открыть файл NBT на своем компьютере - причин может быть несколько. Первой и одновременно самой важной (встречается чаще всего) является отсутствие соответствующей аппликации обслуживающей NBT среди установленных на Вашем компьютере.

    Очень простой способ решить эту проблему — найти и загрузить соответствующее приложение. Первая часть задания уже выполнена — программное обеспечение, поддерживающее файл NBT, можно найти в таблице. Теперь просто скачайте и установите соответствующее приложение.

    Возможные проблемы с файлами формата NBT

    Невозможность открытия файла NBT и работы с ним, не обязательно означает, что на нашем компьютере не установлено соответствующее программное обеспечение. Могут быть и другие проблемы, которые также блокируют нашу способность работать с файлом Minecraft Named Binary Tag Format. Ниже приведен список возможных проблем.

    • Повреждение открываемого файла NBT.
    • Неверные ссылки на файл NBT в записях реестра.
    • Случайное удаление описания расширения NBT из реестра Windows.
    • Неполная установка приложения, поддерживающего формат NBT.
    • Открываемый файл NBT инфицирован нежелательным, вредным программным обеспечением.
    • На компьютере недостаточно аппаратных ресурсов, чтобы открыть файл NBT.
    • Драйверы оборудования, используемого компьютером для открытия файла NBT, устарели.

    Если вы уверены, что всех этих причин в вашем случае не существует (или они уже устранены), файл NBT должен без проблем работать с вашими программами. Если проблема с файлом NBT все-таки не решена, это может значить, что в этом случае появилась другая, редкая проблема с файлом NBT. В этом случае единственное, что вы можете сделать, это обратиться за помощью к профессиональным сотрудникам.


    Вы загрузили файл с расширением .nbt, но никогда раньше не видели это расширение? Возможно, вы знаете, что делает файл, но не знаете, как его открыть. Не волнуйтесь! В этой статье объясняется все о расширении файла .nbt, о том, как его открывать и работать с ним в различных системах.

    Что такое файл .NBT?

    Расширение файла .NBT означает Minecraft Named Binary Tag File. Он был разработан Mojang. Файл имеет двоичный формат и относится к игре.

    Что нужно знать

    В настоящее время существует 1 программа, которая может открыть файл .nbt на 1 платформе.

    Как открыть файл .NBT?

    Ниже вы найдете простое пошаговое руководство по открытию файла .NBT в вашей операционной системе/устройстве.

    Как открыть файл .NBT в Windows (7, 8, 10)

    Чтобы открыть файл .nbt в Windows, выполните четыре простых шага.

    <р>1. Первым шагом является загрузка программного обеспечения NBTEdit. Это программное обеспечение будет использоваться для открытия файла.

    Шаг 2

    Шаг 2. Найдите файл .NBT

    <р>2. На втором этапе вам нужно найти загруженный файл. Если вы не помните, куда скачали файл, проверьте папку /download/, так как обычно он автоматически сохраняется там.

    Шаг 3

    Шаг 3. Выберите «Открыть с помощью»

    <р>3. На третьем шаге щелкните файл правой кнопкой мыши и выберите «Открыть с помощью».

    Шаг 4

    Шаг 4. Выберите программное обеспечение и нажмите "ОК"

    <р>4. На четвертом шаге, после нажатия «Открыть с помощью», вы должны увидеть загруженное вами программное обеспечение NBTEdit. Нажмите на программное обеспечение и нажмите «ОК». Поздравляем! Вы открыли файл в Windows.

    Все еще не можете открыть файл .NBT?

    Если вы не можете открыть файл .NBT, вполне возможно, что вы пытаетесь открыть не тот файл. Расширение файла .NBT похоже на другие расширения файлов, такие как: .nbu — Nokia, .nc — CNC Software, .nc — Unidata, .nc — Deutscher Stahlbau-Verband, .nc1 — CNC Software. Возможно, вы пытаетесь открыть один из них. Пожалуйста, еще раз проверьте расширение файла.

    Заключение

    В этой статье вы узнали, как открыть файл .NBT с помощью программы NBTEdit в Windows.

    Формат именованного двоичного тега (NBT) используется Minecraft для различных файлов, в которых он сохраняет данные. Формат предназначен для хранения данных в виде древовидной структуры, состоящей из различных тегов. Все теги имеют идентификатор и имя.

    Еще один более удобный формат NBT – это простая строка, используемая в командах. Этот формат называется SNBT, сокращенно от строкового NBT.

    Содержание

    Формат SNBT [ ]

    SNBT, также известный как тег данных, часто используется в команде в Java Edition. Его можно описать, начав с пар атрибут-значение, заключенных в фигурные скобки. Теги данных в Java Edition часто используются в командах, используемых для указания сложных данных для любого объекта.

    Тег данных состоит из нуля или более пар атрибут-значение, разделенных запятыми и заключенных в фигурные скобки. Каждая пара атрибут-значение состоит из имени тега и значения тега, разделенных двоеточием. Однако некоторые значения могут быть составными тегами и сами содержать пары атрибут-значение, что позволяет тегу данных описывать иерархическую структуру данных.

    При необходимости имя тега можно заключить в двойные кавычки.

    Он отличается от формата JSON; следовательно, любой JSON, используемый в NBT, например необработанный текст JSON, должен быть заключен в строковый тег.

    Формат каждого типа [ ]

    Определенные структуры данных также предполагают, что значения должны быть правильного типа.

    " ("внутри" необходимо заменить на \") или '

    "Зовите меня \"Измаил\""

    Зовите меня "Измаил"

    'Зовите меня \'Измаил\''

    "Зовите меня Измаил"

    Каждый тег может быть любого типа.

    Объект NBT [ ]

    Когда игра запущена, сущности и блочные сущности в чанках загрузки сохраняются в памяти. Они не хранятся в NBT, а являются просто программными объектами.

    При обработке операций NBT игра должна генерировать программный объект NBT из сущностей/блочных сущностей, анализировать SNBT в объект NBT, изменять сущности/блоки на основе предоставленного объекта NBT или преобразовывать объект NBT в SNBT.

    Создание объекта NBT [ ]

    При создании NBT из объекта/блока свойства объекта/блока добавляются в программный объект NBT.

    Обратите внимание, что добавляются не все свойства. Например, значение того, открывает ли игрок сундук, не будет добавлено в объект NBT.

    Значение добавляется с определенным типом данных. Например, местоположение ресурса будет преобразовано в строковое значение.

    Эти объекты NBT также будут сохранены в файлах сохранения игры как файлы NBT при выходе из игры или ее автоматическом сохранении. Таким образом, структуры данных, которые описывают теги NBT, и тип данных для каждого тега в основном такие же, как и в файлах сохранения игры. Эти структуры данных описаны в других статьях, и команды ожидают, что теги данных будут использовать те же имена атрибутов (с учетом регистра):

    Ссылки на спецификацию структуры данных
    Объекты Примеры
    Блочные объекты сундуки, печи, командные блоки, спавнеры мобов, знаки и т. д.
    Предметы предметы в инвентаре (включает в себя спецификации для чар, знания, пользовательские имена и т. д.)
    Предметы-сущности предметы на земле
    Мобы криперы, коровы, сельские жители и т. д.
    Снаряды стрелы, огненные шары, метательные зелья и т. д.
    Транспортные средства лодки, вагонетки и т. д.
    Динамическая плитка грунтованный тротил, падающий песок/гравий/бетонный порошок/наковальни
    Другое объекты фейерверки, картины и рамки для предметов

    Преобразование в SNBT [ ]

    Программный объект NBT будет преобразован в SNBT при попытке получить его с помощью /data get и т. д.

    После преобразования за числом всегда следует буква (строчная для b, s, f, d и прописная для L), кроме Integer . Например, 3s для шорта, 3.2f для поплавка и т. д.

    И строка всегда заключена в двойные или одинарные кавычки.

    Конверсия из SNBT [ ]

    SNBT будет преобразован в программный объект NBT при анализе игрой.

    Число, за которым следует буква (B, S, L, F, D или их строчные буквы), преобразуется в соответствующий тип данных. Например, 3s для шорта, 3.2f для поплавка и т. д. Буква может быть прописной или строчной. Если буква не используется, предполагается значение double, если есть десятичная точка, int, если десятичной точки нет и размер соответствует 32 битам, или string, если ни то, ни другое неверно.

    Предполагается, что литерал в квадратных скобках является списком, если не используется идентификатор: [I;1,2,3] для массива целых чисел и [L;1L,2L,3L] для длинного массива.

    true и false преобразуются в 1b и 0b соответственно.

    Изменение объекта/блока на основе объекта NBT [ ]

    Изменение объекта/блока на основе программного объекта NBT — непростая задача. Все определенные теги должны быть разрешены перед изменением свойств блока/сущности. Обратите внимание, что можно изменить только определенные свойства. Например, при использовании команды /data для изменения блочного объекта его координаты изменить нельзя.

    Если свойству требуется значение местоположения ресурса и он получает строковый тег, строка будет преобразована в местоположение ресурса.

    Если для свойства требуется текстовое значение JSON, и оно получает строковый тег, строка будет преобразована в текстовый объект JSON.

    Если свойству требуется числовое значение определенного типа, и он получает числовой тег неправильного типа, число будет округлено и преобразовано в требуемый тип.

    Если свойству требуется числовое значение, и он получает нечисловой тег, число станет равным 0.

    Если для свойства требуется строковое значение, а тег не является строкой, строка станет пустой строкой.

    Если свойству требуется список или массив определенного типа, и он получает тег неправильного типа, будет получен пустой список/массив.

    Если свойству требуется составной тег, а он получает несоставной тег, будет получен пустой составной тег.

    Тестирование тегов NBT [ ]

    Когда такие команды, как /clear , /execute if data используются для сопоставления тегов данных, или аргумент nbt в целевом селекторе пытается указать цель, игра преобразует SNBT в программный объект NBT и получает программный объект NBT из блока/сущности/ хранилище, затем сравнивает два объекта NBT.

    Они проверяют только наличие предоставленных тегов в целевом объекте/блоке/хранилище. Это означает, что сущность/блок/хранилище могут иметь дополнительные теги и при этом совпадать. Это верно даже для списков: порядок и количество элементов в списке список не учитывается, и пока каждый запрошенный элемент находится в списке, он совпадает, даже если есть дополнительные элементы. Например, сущность с данными может быть нацелена на @e[nbt=] или даже просто на @e[nbt=], хотя первое представляет совершенно другую позицию, а вторая вообще не является действительной позицией. Обратите внимание, что @e[nbt=] не может соответствовать ему, потому что пустой список может соответствовать только пустому списку.

    Однако порядок и количество элементов в массиве byte/long/int признаются.

    Запрошенные теги данных в целевом объекте/блоке/хранилище должны точно совпадать для передачи предоставленных тегов, включая тип данных (например, 1 , int, не будет соответствовать 1d , двойному ). Пространства имен также нельзя опускать, потому что в объекте NBT это обычная строка, которая не будет преобразована в расположение ресурса (например, @e[nbt=>] не будет соответствовать объекту каменного предмета, это должно быть @e[nbt =>] ). То же самое верно для строки текста JSON, которая должна быть точно такой же, чтобы соответствовать предоставленному тегу (например, @e[nbt=] не будет соответствовать никакой сущности, это должно быть @e[nbt=">] или @e[ nbt='>] ).

    Файл NBT [ ]

    Файл NBT представляет собой заархивированный составной тег с именем и идентификатором тега. Файл в zip должен содержать тег Compound, который является первым байтом. Некоторые файлы, используемые Minecraft, могут быть несжатыми, но в большинстве случаев файлы соответствуют исходной спецификации Notch и сжимаются с помощью GZip.

    Определение тега [ ]

    Тег — это отдельная часть дерева данных. Первый байт в теге — это тип тега (ID), за которым следует двухбайтовое целое число без знака с обратным порядком байтов для длины имени, затем имя в виде строки в формате UTF-8 (Примечание: TAG_End не имеет имени и не не содержат лишних 2 байта; предполагается, что имя пусто).Наконец, в зависимости от типа тега, последующие байты являются частью полезной нагрузки этого тега. В этой таблице описывается каждый из 13 известных тегов версии 19133 формата NBT:

    < /tr>
    ID Значок Тип тега Полезная нагрузка< /th> Описание Емкость хранилища
    0 TAG_End - Используется для обозначения конца составных тегов. У этого тега нет имени, поэтому он представляет собой только один байт 0. Он также может быть типом пустых тегов списка. Н/Д
    1 TAG_Byte 1 байт/8 бит, со знаком Целочисленный тип со знаком. Иногда используется для логических значений. Полный диапазон от -(2 7 ) до (2 7 - 1)
    (-128 до 127)
    2 TAG_Short 2 байта / 16 бит, со знаком, обратный порядок байтов Целочисленный тип со знаком. Полный диапазон от -(2 15 ) до (2 15 - 1)
    (-32 768 до 32 767)
    3 TAG_Int 4 байта / 32 бита, со знаком, с обратным порядком байтов Целочисленный тип со знаком. Полный диапазон от -(2 31 ) до (2 31 - 1)
    (-2 147 483 648 до 2 147 483 647)
    4 TAG_Long 8 байт/64 бита, со знаком, обратный порядок байтов Целочисленный тип со знаком. Полный диапазон от -(2 63 ) до (2 63 - 1)
    (-9 223 372 036 854 775 808 до 9 223 372 036 854 775 807)
    5 TAG_Float 4 байта / 32 бита, со знаком, с обратным порядком байтов, IEEE 754-2008, binary32 Тип с плавающей запятой со знаком. Precision vari es по всей числовой строке;
    см. Формат с плавающей запятой одинарной точности. Максимальное значение около 3,4*10 38
    6 TAG_Double 8 байт / 64 биты, со знаком, с обратным порядком байтов, IEEE 754-2008, binary64 Тип с плавающей запятой со знаком. Точность зависит от числовой строки;
    См. Двойная точность с плавающей запятой формат. Максимальное значение около 1,8*10 308
    7 TAG_Byte_Array Полезная нагрузка TAG_Int размер, затем размер полезной нагрузки TAG_Byte. Массив байтов. Максимальное количество элементов находится в диапазоне от (2 31 до 9) и (2 31 - 1) (2 147 483 639 и 2 147 483 647), в зависимости от конкретной JVM.
    8 TAG_String Подобный TAG_Short, но вместо полезной нагрузки length без знака [1], а затем строка UTF-8, похожая на length байт. Строка UTF-8. Он имеет размер, а не завершается нулем. 65 535 байт, интерпретируемых как UTF-8 (см. модифицированный формат UTF-8; наиболее часто используемые символы представляют собой один байт).
    9 TAG_List полезная нагрузка TAG_Byte tagId, затем полезная нагрузка TAG_Int size, затем size полезные данные тегов, все типа tagId. Список полезных данных тегов без повторяющихся идентификаторов тегов или каких-либо имена тегов. Из-за ограничений JVM и реализации ArrayList максимальное количество элементов списка составляет (2 31 - 9), или 2 147 483 639. Также обратите внимание, что теги List и Compound не могут быть вложены глубже 512.
    10 TAG_Compound < /td> Полностью сформированные теги, за которыми следует TAG_End. Список полностью сформированных тегов, включая их идентификаторы, имена и полезные данные. Не может быть двух тегов с одинаковыми именами. В отличие от списков, нет жесткого ограничения на количество тегов в Compound (конечно, всегда существует неявный лимит виртуальной памяти). Обратите внимание, однако, что составные теги и теги списка не могут быть вложены глубже 512.
    11 TAG_Int_Array Полезная нагрузка TAG_Int размер, затем размер полезная нагрузка TAG_Int. Массив полезной нагрузки TAG_Int. Максимальное количество элементов находится в диапазоне от (2 31 - 9) до (2 31 - 1) (2 147 483 639 и 2 147 483 647) в зависимости от конкретной JVM.
    12 TAG_Long_Array размер полезной нагрузки TAG_Int, затем размер полезной нагрузки TAG_Long. Массив полезных нагрузок TAG_Long. Максимальное количество элементов находится в диапазоне от (2 31 - 9) до (2 31 - 1) (2 147 483 639 и 2 147 483 647), в зависимости от конкретной JVM.

    Теги List и Compound могут быть и часто являются рекурсивно вложенными. Следует также отметить, что в списке списков каждый из подсписков может содержать различные типы тегов.

    Использование [ ]

    Minecraft иногда непоследовательно использует формат NBT; в некоторых случаях пустые списки могут быть представлены как список тегов Byte, а не список правильного типа, или как список тегов End в более новых версиях Minecraft, что может привести к поломке некоторых старых инструментов NBT. Кроме того, почти каждый корневой тег имеет пустую строку имени и инкапсулирует только один составной тег с фактическими данными и именем. Например: