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

anim_keyframes и sound_keyframes

Наборы команд анимации и звука, шаг времени и метаданные последовательностей.

Кадры содержат массивы строк команд Minecraft. Server API передаёт их вместе с метаданными времени; порядок запуска и исполнение обеспечивает ваша интеграция.

anim_keyframes

Путь: content.datapack.anim_keyframes. Структура: ключ анимации → индекс кадра → массив команд.

Учебный фрагмент объекта content с одной анимацией:

{
"datapack": {
"anim_keyframes": {
"turn": {
"0": ["data merge entity @e[type=minecraft:block_display,tag=my_model_0,limit=1] {interpolation_duration:2}"],
"3": ["data merge entity @e[type=minecraft:block_display,tag=my_model_0,limit=1] {interpolation_duration:0}"]
}
}
},
"meta": {
"schema": 1,
"animations": {
"turn": { "name": "Turn", "durationTicks": 10, "stepTicks": 2 }
},
"sounds": {}
}
}

Команды здесь только иллюстрируют форму кадров, а не составляют готовую анимацию вращения. Ключ turn связывает кадры с meta.animations.turn; отображаемое название берётся из name. Используйте ключи из ответа, не вычисляйте их заново из отображаемых имён.

sound_keyframes

Путь: content.datapack.sound_keyframes. Структура аналогична: ключ звуковой последовательности → индекс времени → массив команд.

{
"datapack": {
"sound_keyframes": {
"chime": {
"0": [],
"2": ["playsound minecraft:block.note_block.pling block @a ~ ~ ~ 1 1"],
"5": ["playsound minecraft:block.note_block.pling block @a ~ ~ ~ 0.8 1.2"]
}
}
},
"meta": {
"schema": 1,
"animations": {},
"sounds": {
"chime": { "name": "Chime", "durationTicks": 20, "stepTicks": 4 }
}
}
}

Это учебный пример с паузой в начале. Текущий экспортёр сохраняет нулевой кадр, даже если в нём нет звука, и кадры, содержащие события. Промежутки без событий не обязаны присутствовать как отдельные записи. Последовательности без нот не добавляются в звуковые наборы и их метаданные.

Ключ времени, единицы и пропуски

Индексы являются числовыми строками JSON. Время события определяется по записи в meta.animations или meta.sounds:

время в игровых тиках = индекс кадра × stepTicks
Пример Индекс stepTicks Время события
Анимация turn "3" 2 6 игровых тиков
Звук chime "2" 4 8 игровых тиков
Звук chime "5" 4 20 игровых тиков

durationTicks задаёт длительность отдельно от списка событий. В примере turn последняя показанная команда находится на 6-м тике, а длительность равна 10 тикам. Количество записей и последний присутствующий индекс не заменяют это поле.

В текущем экспортёре шаг анимации обычно равен 2 тикам. Для преобразований, которым нужны промежуточные кадры, используется шаг 1 тик. Шаг звуковой последовательности может составлять 1, 2 или 4 тика. Всегда берите stepTicks из соответствующей записи.

Пропущенный индекс означает отсутствие записанных команд в этот момент, а не сдвиг следующего события. Пустой массив также означает отсутствие команд. Числовые ключи следует читать по числовому порядку: индекс "10" идёт после "2".

interpolation_duration внутри команды является параметром Minecraft. Его нельзя использовать вместо stepTicks. В старых данных без метаданных временную шкалу нельзя надёжно определить только по ключам.

Порядок и контекст команд

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

Строки могут использовать:

  • Селекторы сущностей по тегам модели и её частей.
  • Относительные координаты ~, зависящие от позиции выполнения.
  • Контекст @s, изменяемый вложенными execute as и execute at.
  • Ссылки на предикаты и функции Minecraft.

API не передаёт отдельного универсального исполнителя или точки появления модели. Нужный контекст и существование ресурсов обеспечивает интеграция. Например, звуковые команды используют относительную позицию выполнения, а команды камеры обращаются к служебной сущности с тегом модели. Одна подстановка tag эти сущности не создаёт.

Состав ресурсов и ограничения каналов: Поддержка экспорта и ограничения. Описание метаданных: Структура JSON.