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

Ежедневный кит с кулдауном

Классический паттерн ежедневного кита: игрок забирает кит, блокируется на 24 часа, потом снова может забрать. Построено на временных переменных (автоистечение через заданный срок), паттерне с двумя предметами (разный вид во время кулдауна) и подстановке шаблонов, чтобы метаданные кита расшаривались между обоими состояниями.

  • Сокращение для временных переменных: setVarp: "name::value::1d" (автоистечение через 1 день)
  • Плейсхолдер %varpt_:name% для отображения “оставшееся время”
  • Подстановка шаблона: ${defaultKitTemplate} переиспользуется в состояниях ДОСТУПЕН и КУЛДАУН
  • Расширение lore: lore: ${defaultKitTemplate.lore} [ ... extra lines ... ] дописывает к lore из шаблона
  • Правило group: для гейтинга через LuckPerms на VIP-ките

setVarp: "ame_kit_default::1::1d" парсится так:

  • Имя переменной: ame_kit_default
  • Значение: 1 (само значение не используется, важен только факт существования)
  • Срок: 1d (один день - другие единицы: s, m, h, d, w)

Через 24 часа переменная автоматически удаляется. Правило existVarp после этого даёт false, предмет с кулдауном пропадает, и снова показывается предмет ДОСТУПЕН.

Плейсхолдер %varpt_:ame_kit_default% возвращает оставшееся до истечения время в человекочитаемом виде (“23h 47m” или похожее). Удобно для сообщений “доступно через X”.

Каждый кит один раз в начале файла определяет свой слот, материал, имя и базовый lore:

defaultKitTemplate {
slot: 11
material: WOODEN_SWORD
name: "&aDefault Kit"
lore: [ "&7Includes:", "&7- Leather armor set", ... ]
}

Оба предмета - ДОСТУПЕН и КУЛДАУН - ссылаются на этот шаблон:

# ДОСТУПЕН: дополняет lore строкой "Click to claim"
${defaultKitTemplate} {
lore: ${defaultKitTemplate.lore} [ "", "&aClick to claim" ]
click { ... claim logic ... }
}
# КУЛДАУН: дополняет lore строкой с оставшимся временем
${defaultKitTemplate} {
material: GRAY_DYE
lore: ${defaultKitTemplate.lore} [ "", "&cAvailable in &e%varpt_:ame_kit_default%" ]
rules { existVarp: "ame_kit_default" }
}

Синтаксис ${defaultKitTemplate.lore} [ ... ]: взять существующий массив lore и дописать в конец новые элементы. Базовый lore не нужно копипастить.

Когда переменной не существует, у предмета КУЛДАУН проваливается правило existVarp, и он не отрисовывается. На его место встаёт предмет ДОСТУПЕН (без правил). Когда переменная есть, отрисовывается КУЛДАУН, а ДОСТУПЕН подавляется по логике конфликта слотов.

Чтобы добавить ещё тиры китов:

  1. Добавь блок xxxKitTemplate в начале со своими slot:, material:, name:, базовым lore:.
  2. Добавь предмет ДОСТУПЕН на основе шаблона + click { ... } с содержимым кита и уникальным именем setVarp.
  3. Добавь предмет КУЛДАУН на основе шаблона + rules { existVarp: "..." } с тем же именем переменной.

Для гейтинга по правам на конкретный тир добавь rules { group: "tier_name" } в click-блок (или permission: "..." для более простой проверки).

После установки пакета примеров:

  1. Положи бандл в plugins/AbstractMenus/menus/example/.
  2. /am reload.
  3. Введи /ame_daily_kit в игре.
  4. Забери обычный кит. Предмет станет серым и покажет “Доступен через 23h 59m…”