Перейти к содержимому

Структура 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 и команд зависит от целевой версии.

Применить на практике