Перейти к содержимому

Шаблоны

Автор меню

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: 6
items: [
{
slot: 0
material: STONE
name: "Какой-то предмет"
},
${btnClose} { slot: 1 }
]