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

Анимации

Автор меню

Анимированное меню содержит блок frames в корне. Как только плагин видит этот блок, меню считается анимированным, а сам frames заменяет привычный items. Ниже параметры, которые добавляются к стандартным.

ИмяТип данныхОбязательныйОписание
onAnimStartОбъектНетДействия перед началом анимации
onAnimEndОбъектНетДействия после завершения анимации (не работают для зацикленных анимаций)
loopBooleanНетЗациклить анимацию. По умолчанию false
framesСписок объектовДаСписок кадров анимации
itemsСписок объектовНетСписок статических предметов

Ниже пример пустого меню, готового к добавлению кадров.

title: "&eАнимированное меню"
size: 3
activators {
command: "anim"
}
loop: true
frames: [
{
# ... Здесь будет кадр, который добавим позже
},
{
# ... Второй кадр
}
]

Кадр - это единица анимации. В каждом кадре лежит список кнопок, которые попадут в инвентарь, плюс ещё несколько параметров. Их таблица ниже.

ИмяТип данныхОбязательныйОписание
delayNumberНетЗадержка в тиках перед проигрыванием кадра. По умолчанию 20
clearBooleanНетОчистить инвентарь перед добавлением предметов нового кадра. По умолчанию true
rulesОбъектНетПравила проигрывания кадра
onStartОбъектНетДействия перед проигрыванием кадра
onEndОбъектНетДействия после проигрывания кадра
itemsСписок объектовДаСписок предметов для этого кадра

Если clear: false, при смене кадра предметы из инвентаря не удаляются. Так чуть меньше нагрузки на сервер и компактнее сам файл меню.

Предметы внутри items описываются так же, как и в обычных меню.

Минимальная задержка между кадрами - 1 тик.

Если у кадра есть правила, плагин сначала проверит игрока. Не подходит - кадр просто пропускается, в инвентаре остаются предметы предыдущего.

Соберём простую анимацию: предмет должен ползти из левого угла в правый. В примере используются шаблоны, но можно и без них - просто продублировать параметры в каждом кадре (так лучше не делать). Файл выглядит так:

title: "&lAnimation example"
size: 1
activators {
command: "menu"
}
frames: [
{
delay: 10
items: [
${someItem} {slot: 0}
]
},
{
delay: 10
items: [
${someItem} {slot: 1}
]
},
{
delay: 10
items: [
${someItem} {slot: 2}
]
},
{
delay: 10
items: [
${someItem} {slot: 3}
]
},
{
delay: 10
items: [
${someItem} {slot: 4}
]
},
{
delay: 10
items: [
${someItem} {slot: 5}
]
},
{
delay: 10
items: [
${someItem} {slot: 6}
]
},
{
delay: 10
items: [
${someItem} {slot: 7}
]
},
{
delay: 10
items: [
${someItem} {slot: 8}
]
}
]
someItem {
material: STONE
name: "&aHello!"
}

В игре это выглядит так:

Результат простой анимации

Предмет someItem мы размножили по 9 кадрам, каждый раз меняя слот. Поскольку clear по умолчанию true, инвентарь чистится перед каждым кадром.

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

В анимированное меню можно добавить статические предметы - они не меняются, пока крутится анимация. Удобно для фона или служебных кнопок.

Статические предметы кладутся в блок items, как в обычных меню. Пример:

frames: [
# Здесь какие-то кадры
]
items: [
{
slot: 0
name: "Кнопка выхода"
click {
closeMenu: true
}
}
]

Здесь статический предмет - кнопка выхода. Пока анимация идёт, она не двигается.

Плагин умеет крутить анимации головы из заранее заготовленных текстур. Делается в два шага:

  1. Подготовить текстуры и сложить их в кадры анимации.
  2. Подцепить анимацию к меню через специальный плейсхолдер.

Каждый кадр - это отдельная голова. Сначала нужно сгенерировать все головы для будущей анимации. Удобнее всего через MineSkin. После генерации копируем ссылку на текстуру - нужное поле показано на скриншоте.

Поле текстуры для копирования

Нам нужен только хеш скина, без адреса http://textures.minecraft.net/texture/.

Когда все головы готовы и текстуры сохранены, их можно прописать в animated_heads.conf в папке плагина. Файл из коробки уже содержит одну анимацию - anim_eye, её можно сразу попробовать.

Своя анимация - это список строк где-нибудь в конфиге, по образу anim_eye. Каждый элемент списка - очередной кадр. Анимация головы всегда зациклена, держи это в голове при сборке кадров. Сохраняем файл - анимация готова, осталось привязать её к предмету.

У любого предмета есть параметр texture. Со специальным плейсхолдером его можно использовать иначе. Пример:

items: [
{
slot: 0
texture: "%hanim_:anim_eye:1%"
name: "&aAnimated head"
}
]

Вместо статической текстуры в texture мы положили плейсхолдер. На каждом тике обновления меню (параметр updateInterval) он подменяется текстурой соответствующего кадра. Пример ниже.

Пример анимации головы

Цифра 1 после имени анимации - идентификатор конкретной кнопки. В пределах одного меню у каждого предмета с одной и той же анимацией идентификатор должен быть свой. Подойдёт любой текст, мы взяли просто число. Если у нескольких кнопок с одной анимацией идентификаторы совпадают, кадры будут отображаться криво.