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

Случайный зачарователь

Самое насыщенное меню в паке. Сочетает drag-and-drop слоты (игрок физически кладёт предмет в меню), правило placedItem (проверить, что в слоте), действие placeItem (записать в слот), removePlaced (очистить слот), setButton (заменить статичный предмет) и randActions (выбрать один исход случайно). Всё вместе даёт игроку опыт “брось предмет, разыграй зачарование”.

  • Поле draggable: со строкой-матрицей, описывающей, какие слоты принимают drag-and-drop
  • Правило placedItem для проверки содержимого draggable-слота
  • Инвертированные правила с префиксом -: -placedItem { ... } означает “НЕ положено”
  • Действие placeItem для записи предмета в draggable-слот
  • removePlaced для очистки draggable-слота
  • setButton для динамической перезаписи обычного предмета меню
  • Семейство плейсхолдеров %changed_item_*%, фиксирующее то, что игрок перетащил
  • Связку randActions с placeItem для случайных исходов

Поле draggable: в корне меню принимает матрицу строк, по одной на ряд, где x помечает слот, в который игроки могут положить предмет. В этом примере drag-and-drop стоит на слоте 11 (вход) и слоте 15 (результат).

draggable: [
"---------",
"--x---x--",
"---------"
]

Когда слот draggable, игрок может взять предметы из хотбара/инвентаря и положить в этот слот. Плагин отслеживает их содержимое отдельно от items меню - drag-and-drop слоты это отдельный слой поверх сетки меню.

Внутри actions можно:

  • Правило placedItem - проверить, что в draggable-слоте. placedItem { slot: 11, material: AIR } истинно, когда слот 11 пуст.
  • -placedItem - инвертированно, та же проверка с обратным результатом.
  • Действие placeItem - положить предмет в draggable-слот.
  • Действие removePlaced - очистить draggable-слот.

Клик по кнопке зачарования делает три шага:

  1. Проверка правила: -placedItem { slot: 11, material: AIR } - “слот 11 НЕ пуст”. Если игрок ничего не положил, идём в denyActions.
  2. randActions: случайно выбирает запись из списка. Каждая запись вызывает placeItem, чтобы положить копию предмета игрока (сохранённого через %changed_item_serialized%) в слот 15 с одним из четырёх наборов зачарований.
  3. removePlaced: 11: очищает входной слот. Оригинальный предмет уходит, зачарованная копия лежит в слоте 15.

Ветка deny (когда вход пуст) проигрывает звук и через setButton: ${resultStub} сбрасывает заглушку слота результата обратно в серое стекло.

Чтобы добавить ещё один исход зачарования, допишите в список randActions:

{ placeItem: ${placeItemBase} { enchantments { mending: 1 } } }

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

После установки example pack:

  1. Положите бандл в plugins/AbstractMenus/menus/example/.
  2. /am reload.
  3. Введите /ame_enchanter в игре.
  4. Перетащите меч/кирку в левый слот.
  5. Кликните “Зачаровать!”. В правом слоте появится результат со случайным зачарованием.