Подстановка шаблона HOCON
HOCON поддерживает подстановку ${name} - ссылку на ранее определённый блок по имени. Если за ней идёт { ... переопределения ... }, переопределение мержится поверх подставленного значения. Именно за счёт этого работают общий _shared/templates.conf и локальные шаблоны в каждом меню.
Как использовать
Заголовок раздела «Как использовать»# Описать один разprizeTile { material: NETHER_STAR lore: ["&7Click for a prize."] click { actions { itemAdd { material: DIAMOND } } }}
# Использовать много раз с переопределениямиitems: [ ${prizeTile} { slot: 2, name: "&aCommon Prize" } ${prizeTile} { slot: 4, name: "&6Rare Prize" } ${prizeTile} { slot: 6, name: "&dEpic Prize" }]Каждый экземпляр стартует как копия prizeTile (material, lore, click), затем блок переопределения добавляет slot и name. На выходе три разных предмета с общей структурой, отличающиеся только идентифицирующими полями.
Семантика мержа
Заголовок раздела «Семантика мержа»${A} { B } делает глубокий мерж объектов - ключи из B перебивают ключи из A, но вложенные объекты мержатся рекурсивно. Если у A есть click.actions.sound: ${clickSound}, а у B есть click.actions.message: "Hi", в результате будет и то и другое: click.actions.{sound: ..., message: "Hi"}.
Для списков переопределение ЗАМЕНЯЕТ исходный список - не добавляет в конец. Чтобы расширить список lore:
${prizeTile} { lore: ${prizeTile.lore} [ "&7Extra line" ]}Подстановка ${prizeTile.lore} подтягивает исходный массив lore, а [...] добавляет к нему новые записи. Этот паттерн в действии смотрите в примере Daily Kit.
Когда выносить в шаблон
Заголовок раздела «Когда выносить в шаблон»- Форма предмета повторяется 3+ раза - выносите в шаблон
- Один обработчик клика используется в нескольких предметах - вынесите
clickFoo {...}и подставляйте черезclick: ${clickFoo} - Стоимость или цена общая для отображаемого предмета и проверки правила - опишите один раз на уровне файла, ссылайтесь в обоих местах
Если что-то используется дважды и встроенный код по-прежнему читается понятно, оставьте как есть. Шаблоны окупаются, когда они уменьшают площадь правок при изменении повторяющейся логики.