Инвентарный крафт
Меню в стиле верстака, которое “крафтит” предметы: игрок должен иметь ингредиенты рецепта в инвентаре, клик по рецепту их расходует и выдаёт результат. Механика отличается от слотов с drag-and-drop - здесь проверяется обычный инвентарь игрока.
Что показывает
Заголовок раздела «Что показывает»- Правило
inventoryItemsдля проверки “есть ли у игрока эти предметы” itemRemoveдля расхода подходящих предметовitemAddдля выдачи результата крафта- Объявление рецептов как именованных блоков на уровне файла, на которые ссылаются через подстановку
${name}
Как это работает
Заголовок раздела «Как это работает»Каждый рецепт описывает output (полученный предмет) и список requirements (ингредиенты):
helmetRecipe { output { material: LEATHER_HELMET name: "&aHunter's Hat" enchantments { durability: 2 } } requirements: [ { material: LEATHER, count: 5 } ]}Блок click ссылается на оба:
click { rules { inventoryItems: ${helmetRecipe.requirements} } actions { itemRemove: ${helmetRecipe.requirements} itemAdd: ${helmetRecipe.output} ... } denyActions: ${denyNotEnoughItems}}Этот паттерн держит данные рецепта в одном месте: правило, расход и результат - всё ссылается на один и тот же блок helmetRecipe. Добавить или поправить рецепт значит править один блок, а не три.
Инвентарный крафт vs drag-and-drop
Заголовок раздела «Инвентарный крафт vs drag-and-drop»Два разных паттерна “крафта” в AbstractMenus:
- Инвентарный крафт (этот пример): предметы остаются в обычном инвентаре игрока. Правило
inventoryItemsсмотрит в инвентарь,itemRemoveсписывает оттуда. Игрок ничего не перемещает руками. - Drag-and-drop крафт: в меню есть слоты, в которые можно перетаскивать. Игрок физически перетягивает предметы. Использует действие
placeItem, правилоplacedItemи полеdraggableу предметов. Альтернативный паттерн смотрите в документации drag-and-drop.
Этот сниппет показывает паттерн инвентарного крафта, потому что он хорошо сочетается с магазинными интерфейсами и не требует кастомной настройки слотов.
Добавление новых рецептов
Заголовок раздела «Добавление новых рецептов»Опишите новый блок xxxRecipe на уровне файла с output {} и requirements: [...]. Добавьте предмет в список items, ссылающийся на него по той же схеме, что и шлем. Рецепт упоминается в трёх местах: предмет в отображении, правило, действия. Если везде стоит ${xxxRecipe.something}, рецепты не разъедутся.
Попробовать
Заголовок раздела «Попробовать»После установки набора примеров:
- Положите бандл в
plugins/AbstractMenus/menus/example/. /am reload.- Получите 5 кожи в инвентарь.
- Введите в игре
/ame_craft. - Кликните по рецепту шлема. Кожа расходуется, шапка появляется.