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.