Шаблоны
HOCON достаточно гибкий, чтобы вынести любой кусок меню в шаблон - одно значение, объект, список и т.д. Шаблон может жить рядом с меню в том же файле или лежать отдельно и подключаться через include.
Основы шаблонов
Заголовок раздела «Основы шаблонов»Допустим, в нескольких меню есть одинаковая кнопка “Закрыть меню”. Опишем её один раз - но не внутри стандартного items. Пример:
closeButton { slot: 5 texture: "5a6787ba32564e7c2f3a0ce64498ecbb23b89845e5a66b5cec7736f729ed37" name: "&cЗакрыть" lore: "&7Кликни, чтобы закрыть меню" click { closeMenu: true }}Раз предмет лежит вне items - это шаблон.
Теперь его можно подключить где угодно в меню. Для этого есть специальный плейсхолдер формата:
${<template_name>}Вместо <template_name> подставь имя своего шаблона - у нас это closeButton. Подключаем шаблон в список items:
items: [ ${closeButton}]После перезагрузки плагина предмет появится в меню.
Учти: путь к шаблону всегда отсчитывается от корня файла - независимо от того, откуда ты его подключаешь. Например, шаблон лежит внутри другого блока:
templates { items { closeButton { slot: 5 texture: "5a6787ba32564e7c2f3a0ce64498ecbb23b89845e5a66b5cec7736f729ed37" name: "&cЗакрыть" lore: "&7Кликни, чтобы закрыть меню" click { closeMenu: true } } }}Если templates лежит в корне файла, плейсхолдер для closeButton будет такой:
${templates.items.closeButton}Главное в шаблонах - их можно подключать сколько угодно раз. Но у нашей кнопки слот зашит намертво. Чтобы его поменять, нужно переопределить параметр в месте подключения.
Расширение или переопределение шаблона
Заголовок раздела «Расширение или переопределение шаблона»Переопределение объектов
Заголовок раздела «Переопределение объектов»Чтобы переопределить объект, синтаксис такой:
items: [ ${closeButton} { slot: 0 }]После плейсхолдера шаблона открываем фигурные скобки, как у обычного объекта, и пишем свойства как обычно.
Так можно дописать новые поля или переопределить существующие:
items: [ ${closeButton} { slot: 0 name: "Питер" glow: true }]Переопределение списков
Заголовок раздела «Переопределение списков»Со списком - похожий синтаксис. Например, задаём меню фон:
// Список items менюitems: ${myTmpl} [ ${closeButton} { slot: 0 }]
// ШаблонmyTmpl: [ { slot: "0-53" material: STAINED_GLASS_PANE name: " " }]Шаблоны в отдельном файле
Заголовок раздела «Шаблоны в отдельном файле»Общий файл удобен, когда шаблоны нужны в нескольких меню сразу.
Чтобы плагин понял, что это файл шаблонов, а не меню, в первой строке поставь тег #invisible. Без него плагин примет файл за меню и упадёт с ошибкой.
Пример такого файла:
#invisible
btnClose { texture: "5a6787ba32564e7c2f3a0ce64498ecbb23b89845e5a66b5cec7736f729ed37" name: "&cЗакрыть" click { closeMenu: true }}
btnBack { material: ARROW name: "&cНазад"}Чтобы пользоваться этими шаблонами, файл нужно подключить в меню такой командой:
include required(file("./plugins/AbstractMenus/menus/<path_to_file>"))Вместо <path_to_file> подставь полный путь к файлу шаблонов от папки menus.
В нашем случае файл лежит прямо в menus, поэтому меню выглядит так:
include required(file("./plugins/AbstractMenus/menus/templates.conf"))
title: "Заголовок меню"size: 6items: [ { slot: 0 material: STONE name: "Какой-то предмет" }, ${btnClose} { slot: 1 }]