Энхансер предметов
Меню энхансера с фиксированной таблицей: камень становится угольной рудой, яблоко - золотым яблоком, деревянный меч - алмазным мечом, деревянный топор - алмазным топором. Построено вокруг правила oneof, которое короткозамыкается на первом совпадении - идеально подходит под “переключиться по типу предмета и сделать своё”.
Что показывает
Заголовок раздела «Что показывает»- Тип правила
oneofи его семантику “первое совпадение выигрывает” - Действия per-ветке внутри записей oneof (у каждой записи свой
actions {}) - Drag-and-drop слоты и правило
placedItemдля матчинга входа - Сборку drag-and-drop примитивов (
placeItem,removePlaced,setButton) в пайплайн трансформации - Шаблоны для переиспользуемых правил и действий (
${inputSlotRule},${outputAction})
Почему state-and-vars?
Заголовок раздела «Почему state-and-vars?»Этот пример лежит в state-and-vars, потому что drag-and-drop сама по себе - форма состояния меню: предметы, физически лежащие в слотах 2 и 6, это сессионные “переменные” меню. setVar/setVarp тут не используются, но концептуальный паттерн (читать состояние слота, ветвиться по нему, мутировать его) тот же.
Как работает oneof
Заголовок раздела «Как работает oneof»oneof - логическая обёртка-правило, принимающая список записей. Она проходит список сверху вниз и останавливается на первой, чьё собственное правило совпадает. Блок actions {} совпавшей записи и выполняется.
oneof: [ { placedItem: { slot: 2, material: STONE }, actions { placeItem: { ..., material: COAL_ORE } } } { placedItem: { slot: 2, material: APPLE }, actions { placeItem: { ..., material: GOLDEN_APPLE } } } ...]Если ни одна запись не совпала, весь oneof возвращает false. Внешний click тогда выполняет denyActions вместо успешной ветки.
Чище, чем вложенные if/and/or, для switch-подобной логики.
Добавить новый рецепт
Заголовок раздела «Добавить новый рецепт»Допишите в список oneof внутри enhanceRules:
{ placedItem: ${inputSlotRule} { material: COAL } actions { placeItem: ${outputAction} { material: DIAMOND } } }Подстановки ${inputSlotRule} и ${outputAction} держат номера слотов в одном месте - если переразметите меню, поменяются только два якорных блока, а не каждая запись рецепта.
Попробовать
Заголовок раздела «Попробовать»После установки example pack:
- Положите бандл в
plugins/AbstractMenus/menus/example/. /am reload.- Введите
/ame_enhancerв игре. - Перетащите блок камня в левый слот.
- Кликните “Улучшить!”. В правом слоте появится угольная руда.