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

Формат HOCON

Автор меню Разработчик аддонов

Меню в AbstractMenus описываются на HOCON (.conf файлы), а не на YAML (.yml). На первый взгляд формат может показаться непривычным, но дальше станет понятно, почему он удобнее для гибких меню.

HOCON - это JSON, доработанный под конфиги. Если знаком с JSON, разобраться будет легко.

Все данные в HOCON записываются так:

<ключ>: <значение>

где:

<ключ>
Уникальное имя ключа, как в YAML.

<значение>
Само значение. Бывает одного из типов, описанных ниже.

Несколько примеров:

name: "AbstractMenus"
age: 20

Здесь name и age - ключи, "AbstractMenus" и 20 - значения. Про типы данных - в разделе Типы данных HOCON ниже.

Плагин их игнорирует, так что можно оставлять заметки для себя. Комментарий начинается с // или #.

# Это мой первый комментарий
// Это мой другой комментарий

Действия, правила, активаторы и прочее описываются через типы данных: String, Number, Boolean, Object, List. У каждого типа своя форма записи. Все типы, которые понадобятся для меню, разобраны ниже.

Формат простой:

param_name: "Какой-то текст"

Текст заключается в двойные кавычки ":

name: "Peter Piper"

Если в тексте нет пробелов и спецсимволов, кавычки можно не ставить:

name: Peter

Числа записываются как в YAML:

count: 5
age: 21

Числа с плавающей точкой - через точку:

x: 224.5
y: 16.0

Boolean (true или false) - тоже как в YAML:

glow: true
unbreakable: false

Object (в этой документации иногда называется block) - параметр, внутри которого собраны другие параметры. Записывается в фигурных скобках {} с именем перед ними:

item {
material: IRON_SWORD
name: "&eМой супер-меч"
}

Здесь мы описали объект item (кнопку) с параметрами material и name. Двоеточие перед скобками можно опустить. Оба варианта валидны:

item: {
item {

Объекты можно вкладывать друг в друга на любую глубину. Например:

item {
material: LEATHER_BOOTS
color {
r: 255
g: 255
b: 255
}
}

Тут объект color лежит внутри item. Это просто иллюстрация - подробно про описание предметов есть отдельная страница формат предмета.

Содержимое объекта можно записать в одну строку через запятую:

object1 { param1: "value1" }
object2 { param1: "value1", param2: 12, param3: true }

List - гибкий тип. Список может содержать любые из перечисленных выше типов, но в пределах одного списка - только один тип. Записывается через двоеточие и квадратные скобки []:

list: []

Это пустой список. Дальше - какие списки встречаются в плагине.

lore: [
"Строка 1",
"Строка 2"
]

Элементы разделяются запятой , - она говорит “дальше будет ещё элемент”. После последнего запятую можно не ставить.

Так же, как список строк, только без кавычек:

numbers: [
52,
12,
36
]

Объект записывается в фигурных скобках {} - это правило работает и внутри списка. Единственное отличие: в списке у объектов нет имени. Например:

items: [
{
material: STONE
name: "Камешек"
},
{
material: IRON_SWORD
name: "Экскалибур"
}
]

Это список предметов. Каждый объект - в фигурных скобках, элементы разделяются запятой.

Список, как и объект, можно записать в одну строку:

list: [ "строка1", "строка2", "строка3" ]

Если в списке всего один элемент, его можно записать как обычный параметр.

Например, список строк с единственным значением. Вот это:

regionJoin: [
"my_region"
]

можно превратить в это:

regionJoin: "my_region"

Аналогично со списком объектов. Это:

items: [
{
material: STONE
name: "Камешек"
}
]

можно превратить в это:

items {
material: STONE
name: "Камешек"
}

В следующих уроках разберёмся с возможностями меню и примерами их использования. Эта страница поможет лучше понимать будущие примеры и написать первое интерактивное меню на AbstractMenus.