Случайный зачарователь
Самое насыщенное меню в паке. Сочетает drag-and-drop слоты (игрок физически кладёт предмет в меню), правило placedItem (проверить, что в слоте), действие placeItem (записать в слот), removePlaced (очистить слот), setButton (заменить статичный предмет) и randActions (выбрать один исход случайно). Всё вместе даёт игроку опыт “брось предмет, разыграй зачарование”.
Что показывает
Заголовок раздела «Что показывает»- Поле
draggable:со строкой-матрицей, описывающей, какие слоты принимают drag-and-drop - Правило
placedItemдля проверки содержимого draggable-слота - Инвертированные правила с префиксом
-:-placedItem { ... }означает “НЕ положено” - Действие
placeItemдля записи предмета в draggable-слот removePlacedдля очистки draggable-слотаsetButtonдля динамической перезаписи обычного предмета меню- Семейство плейсхолдеров
%changed_item_*%, фиксирующее то, что игрок перетащил - Связку
randActionsсplaceItemдля случайных исходов
Как работает drag-and-drop
Заголовок раздела «Как работает drag-and-drop»Поле 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-слот.
Как работает случайное зачарование
Заголовок раздела «Как работает случайное зачарование»Клик по кнопке зачарования делает три шага:
- Проверка правила:
-placedItem { slot: 11, material: AIR }- “слот 11 НЕ пуст”. Если игрок ничего не положил, идём в denyActions. randActions: случайно выбирает запись из списка. Каждая запись вызываетplaceItem, чтобы положить копию предмета игрока (сохранённого через%changed_item_serialized%) в слот 15 с одним из четырёх наборов зачарований.removePlaced: 11: очищает входной слот. Оригинальный предмет уходит, зачарованная копия лежит в слоте 15.
Ветка deny (когда вход пуст) проигрывает звук и через setButton: ${resultStub} сбрасывает заглушку слота результата обратно в серое стекло.
Кастомизация
Заголовок раздела «Кастомизация»Чтобы добавить ещё один исход зачарования, допишите в список randActions:
{ placeItem: ${placeItemBase} { enchantments { mending: 1 } } }По умолчанию у каждого исхода одинаковый вес. Для взвешенного рандома повторяйте исходы (запись, встречающаяся дважды, имеет вдвое больший шанс).
Попробовать
Заголовок раздела «Попробовать»После установки example pack:
- Положите бандл в
plugins/AbstractMenus/menus/example/. /am reload.- Введите
/ame_enchanterв игре. - Перетащите меч/кирку в левый слот.
- Кликните “Зачаровать!”. В правом слоте появится результат со случайным зачарованием.