Структура JSON
Оболочка content, поля экспорта, метаданные и необязательные данные.
JSON описывает экспорт для внешней интеграции. Поля зависят от состава сцены, режима экспорта и версии редактора. Сначала определите способ получения данных, затем прочитайте версию Minecraft и доступные разделы.
Оболочка content
При успешном HTTP-запросе объект экспорта находится в поле content:
{ "content": { "version": "1.21.4", "type": "modelOnly", "meta": { "schema": 1, "animations": {}, "sounds": {} } }}Это сокращённый пример оболочки, а не экспорт визуальной модели.
| Способ получения | Где находится объект экспорта | Подстановка тегов |
|---|---|---|
| HTTP Server API | В content ответа |
[BDESERVERTAG] заменён параметром tag |
| Файл > Экспорт > JSON (.json) | В корне файла | Маркер [BDESERVERTAG] сохраняется |
editorAPI.exportToJSON() |
Возвращаемый объект | Маркер [BDESERVERTAG] сохраняется |
Локальный файл и метод плагина не требуют публикации и не получают временный ID.
Поле project_id, если оно есть, относится к проекту, а не к публикации Server API.
version, type и project_id
content.version
Строка с выбранной версией Minecraft, например "1.21.4".
Она определяет целевой синтаксис данных и команд. Это не версия HTTP API и не номер сборки редактора.
content.type
| Значение | Назначение |
|---|---|
"modelOnly" |
Экспорт модели |
"full" |
Экспорт из Animator, который может включать анимации и другие данные проекта |
full не гарантирует наличие каждого необязательного поля: например, проект без звуков
не содержит звуковых событий. Это также не обозначение полного набора файлов датапака.
content.project_id
Необязательный ID связанного проекта. Текущий экспортёр записывает его строкой,
если у проекта есть ID. Для публикаций без связанного проекта поле может отсутствовать.
Использовать его вместо шестизначного id HTTP-запроса нельзя.
passengers
content.passengers
Массив строк SNBT с данными визуальных сущностей. Одна строка может содержать
несколько сущностей через запятую. У этих строк нет внешней команды summon.
Форма и содержимое: passengers: визуальные части.
datapack и события
content.datapack
Объект с данными событий и связанными ресурсами. Название поля не означает,
что внутри находится готовый архив датапака. В частности, пользовательские .mcfunction
не включаются в этот объект.
datapack.predicates может содержать определения предикатов, которые используются
командами экспорта. Например, ветка particle_chance содержит условия вероятностного
запуска частиц. Ключ соответствует имени ресурса, на которое ссылается команда;
значение является JSON-объектом предиката. Сам HTTP-сервис эти условия не выполняет.
content.datapack.anim_keyframes
Объект вида имя анимации → индекс кадра → массив строк команд.
Каждый индекс является строковым ключом JSON. Для времени используйте метаданные
одноимённой записи в meta.animations.
content.datapack.sound_keyframes
Объект вида имя звука → индекс времени → массив строк команд.
Метаданные находятся в meta.sounds. Промежуточные индексы могут отсутствовать.
Примеры и временная шкала: anim_keyframes и sound_keyframes.
hitbox
content.hitbox
Массив строк с командами создания хитбоксов. В отличие от passengers, здесь находятся
полные команды summon с координатами и SNBT. Поле появляется при включении хитбоксов
в экспорт. Разбор: hitbox: дополнительные сущности.
Метаданные анимаций и звуков
Текущая схема meta.schema имеет значение 1. Объекты meta.animations и meta.sounds
содержат записи с теми же ключами, что и соответствующие наборы кадров:
{ "schema": 1, "animations": { "turn": { "name": "Turn", "durationTicks": 100, "stepTicks": 2 } }, "sounds": {}}| Поле записи | Тип | Смысл |
|---|---|---|
name |
Строка | Отображаемое название в редакторе |
durationTicks |
Число | Длительность в игровых тиках |
stepTicks |
Число | Количество игровых тиков на один шаг индекса кадров |
Имя ключа, например turn, служит для связи с набором кадров; name - для отображения.
Пустой объект означает отсутствие записей. В старых экспортах meta может отсутствовать;
по внешнему виду индексов нельзя надёжно восстановить шаг времени.
Пример статической модели
Учебный пример для Minecraft 1.21.4 и tag=my_model. Он показывает типы данных;
ID проекта намеренно отсутствует. Фрагмент SNBT содержит единичную матрицу трансформации.
{ "content": { "version": "1.21.4", "type": "modelOnly", "passengers": [ "{id:\"minecraft:block_display\",block_state:{Name:\"minecraft:stone\"},transformation:[1f,0f,0f,0f,0f,1f,0f,0f,0f,0f,1f,0f,0f,0f,0f,1f],Tags:[\"my_model_0\"]}" ], "meta": { "schema": 1, "animations": {}, "sounds": {} } }}JSON-экранирование \" относится к внешнему документу. После разбора JSON строка
passengers[0] содержит обычные кавычки SNBT. Этот пример составлен для объяснения
формата и не является сохранённым ответом на действующий ID.
Типы и необязательные поля
Поле внутри content |
Тип | Когда встречается |
|---|---|---|
version |
Строка | В текущем экспорте |
type |
Строка: modelOnly или full |
В текущем экспорте |
project_id |
Строка | Если есть связанный проект |
passengers |
Массив строк | Если экспорт содержит визуальные части |
hitbox |
Массив строк | Если экспорт включает хитбоксы |
datapack |
Объект | Если есть вложенные данные событий или ресурсов |
datapack.anim_keyframes |
Объект наборов кадров | При наличии записанных кадров анимаций |
datapack.sound_keyframes |
Объект наборов кадров | При наличии звуковых событий |
datapack.predicates |
Объект ресурсов | Если команды экспорта используют предикаты |
meta |
Объект | Добавляется текущим экспортёром; может отсутствовать в старых данных |
Отсутствующее необязательное поле не обязано заменяться на null, [] или {}.
Текущий экспортёр пропускает пустое строковое содержимое. В наборах событий
возможны как пропущенные кадры, так и присутствующие пустые массивы команд.
Внешний JSON не является универсальной JSON Schema для всех версий Minecraft: содержимое строк SNBT и команд зависит от целевой версии.