Skip to content
Update Menu structure authored by Rushkaa's avatar Rushkaa
#### Содержание страницы
1. [Файл меню](#file)
- [Одно меню в одном файле](#solo)
- [Несколько меню в одном файле](#multi)
2. [Параметры меню](#menuVar)
3. [Авто обновление меню](#update)
4. [Кнопки меню](#buttons)
- [Правила вывода кнопки](#btnRules)
- [Обработка клика по кнопке](#btnClicks)
5. [Шаблоны](#templates)
- [Шаблон внутри файла меню](#menuTemplates)
- [Шаблоны в отдельном файле](#templatesConf)
Из вступительного урока [Как создать меню](Как создать меню) вы узнали основы основ по созданию интерактивных меню. Здесь же вы подробно познакомитесь со структурой меню и оптимизационными возможностями плагина.
## <a name="file">Файл меню</a>
Любое меню можно описывать как в отдельном файле, так и в одном файле с другими меню. Пример ниже показывает один из возможных вариантов структуры файла меню.
#### <a name="solo">Одно меню в одном файле</a>
#### Page content
1. [Menu file](#file)
- [Single menu in a single file](#solo)
- [Multiple menus in a single file](#multi)
2. [Menu settings](#menuVar)
3. [Auto-update](#update)
4. [Buttons](#buttons)
- [Display rules](#btnRules)
- [Click processing](#btnClicks)
5. [Templates](#templates)
- [Templates inside a file menu](#menuTemplates)
- [Templates file](#templatesConf)
You already know how to [How to create menu](How to create menu), so here you will learn in detail about the menu structure and other useful features of the plugin.
## <a name="file">Menu file</a>
Each menu can be put in a single menu as well as one file may contain endless amount of menus.
#### <a name="solo">Single menu in a single file</a>
```hocon
title: "&8Меню" // Название меню
size: 6 // Вертикальный размер меню. Горизонтальный не может быть изменен
activators { // Действия которые могут привести к открытию меню
title: "&8Menu" // Menu title
size: 6 // Vertical size of the menu (number of rows)
activators { // Actions which let you to open the menu
command: "menu"
}
items: [
......@@ -28,22 +28,22 @@ items: [
rules {permission: "some.permission"}
slot: "1,1"
texture: "783db86bb86dc2ec494e2ffca77765810ed11a52efef4e5c85252ec39a26c0"
name: "Голова пурпурный гном"
name: "Purple-head dwarf"
lore: [
"Это говорящая голова!"
"The talking head!"
""
">> ЛКМ чтобы сказать \"Привет!\""
">> LMB to say \"Hello!\""
]
click {
left {
rules {money: 100}
actions {
command {
player: "me Привет!"
player: "me Hello!"
}
}
denyActions {
message: "У вас недостаточно денег."
message: "You don't have enough money."
sound: "ENTITY_VILLAGER_NO"
}
}
......@@ -52,23 +52,23 @@ items: [
]
```
Не бойтесь на первый взгляд сложной структуры. Читая этот урок дальше, а также последующие уроки, вы поймете что означает каждый из блоков.
Menu structure may seem difficult at first sight, but you don't have to be afraid of it, as you will move forward through the wiki you will learn how work each part of the plugin.
#### <a name="multi">Несколько меню в одном файле</a>
#### <a name="multi">Multiple menus in a single file</a>
---
Если вы делаете какое-то небольшое меню, возможно есть смысл писать его в одном файле со смежными с ним меню. Для этого в плагине предусмотрена конструкция, позволяющая описывать сразу несколько меню в одном файле. В таком случае именем меню будет считаться имя блока, в котором оно описано. Вот пример:
```hocon
menus {
my_awesome_menu { // Имя меню (уникальное)
title: "Мое меню"
my_awesome_menu { // Menu name (unique)
title: "My menu"
size: 6
items:[
...
]
}
my_another_menu {
title: "Мое другое меню"
title: "My another menu"
size: 1
items:[
...
......@@ -77,54 +77,54 @@ menus {
}
```
В корне файла создается блок `menus`, в котором и создаются отдельные меню. В данном примере созданы два отдельных меню с именами `my_awesome_menu` и `my_another_menu`.
All menus listed in the main block called `menus`. In the example above ypou can see 2 separate menus in the same file.
## <a name="menuVar">Параметры меню</a>
Для создания меню, будь то в отдельном файле, или в одном файле с другими меню, нужно задать его параметры. Таблица ниже ознакомит Вас с параметрами, которые можно указывать в меню:
## <a name="menuVar">Menu settings</a>
To create a menu whether in a separate file or in a single file you need to configure its parameters. The table below demonstrates all the parameters and their usage.
| **Параметр** | **Тип данных** | **Обязательный** | **Описание** |
| **Settings** | **Data type** | **Required** | **Description** |
|--------------|--------------|------------------|---------------------------------|
| title | Строка | {+Да+} | Задает заголовок меню |
| size | Число | {+Да+} | Задает вертикальный размер меню, то есть количество ячеек |
| items | [Список объектов](Типы данных#list) | {-Нет-} | Устанавливает предметы в меню |
| activators | [Объект](Типы данных#object) | {-Нет-} | [Действия](Действия) для открытия меню |
| rules | [Объект](Типы данных#object)/[Список объектов](Типы данных#list) | {-Нет-} | [Правила](Правила) для открытия меню. Если хоть одно из правил не будет выполнено - меню не откроется. |
| openActions | [Объект](Типы данных#object) | {-Нет-} | [Действия](Действия), которые выполнятся **до** открытия меню. |
| denyActions | [Объект](Типы данных#object) | {-Нет-} | [Действия](Действия), которые выполнятся при не выполнения **любого** из правил. |
| closeActions | [Объект](Типы данных#object) | {-Нет-} | [Действия](Действия), которые выполнятся после закрытия меню. |
| updateInterval | Целое число | {-Нет-} | Устанавливает период обновления меню в секундах. Если отсутствует - меню не обновляется автоматически. |
| title | String | {+Yes+} | Sets the title of a menu |
| size | Number | {+Yes+} | Sets the vertical size of a menu (a number of rows) |
| items | [Object list](Data types#list) | {-No-} | Menu items |
| activators | [Object](Data types#object) | {-No-} | [Actions](Actions) to open a menu |
| rules | [Object](Data types#object)/[Object list](Data types#list) | {-No-} | [Rules](Rules) to open a menu. If one of those is false then menu won't open |
| openActions | [Object](Data types#object) | {-No-} | [Actions](Actions), that perform **before** the menu opens |
| denyActions | [Object](Data types#object) | {-No-} | [Actions](Actions), that perform if atleast **one** rule is false |
| closeActions | [Object](Data types#object) | {-No-} | [Actions](Actions), that perform after the menu closes |
| updateInterval | Integer | {-No-} | Sets the menu update interval in seconds |
## <a name="update">Авто обновление меню</a>
Немного подробней о параметре `updateInterval`. Если вы хотите создать меню, которое будет автоматически обновляться, включая предметы, плейсхолдеры и любые другие динамические данные, вы можете указать интервал обновления меню.
A bit more detailed about the `updateInterval` setting. If you want to create a menu that will automatically update including items, placeholders and any other dynamic data, you can specify the interval for updating the menu.
```hocon
title: "Обновляемое меню"
title: "Dynamic menu"
size: 1
updateInterval: 2
items:[
{
slot: 0
material: CAKE
name: "Игроков играет: %server_players%"
name: "Players: %server_players%"
}
]
```
Меню представленное выше будет обновляться каждые 2 секунды. Вместе с этим будет обновляться и кнопка которая показывает число игроков на сервере, вместе с плейсхолдером `%server_players%`.
The menu above will be updated every 2 seconds. Along with this the button that shows the number of players on the server will be updated along with the placeholder `%server_players%`.
В данном примере использовался стандартный [плейсхолдер](Плейсхолдеры) плагина.
In the example above was used the default [placeholder](Placeholders).
## <a name="buttons">Кнопки меню</a>
## <a name="buttons">Menu buttons</a>
Кнопка в меню - это обыкновенный [предмет](Представление предмета) с расширенным функционалом. Ниже представлены все параметры, которые можно указывать помимо стандартных параметров предмета.
The button in the menu is an ordinary [item] (Item format) with advanced functionality. Below are all the parameters that can be specified in addition to the standard parameters of an item.
| **Параметр** | **Тип данных** | **Описание** | **Обязательный** |
| **Settings** | **Data type** | **Required** | **Description** |
| -------------| -------------- | ------------ | ---------------- |
| [slot](Представление предмета#slot) | Целое число, Объект, Текст | Устанавливает позицию предмета в инвентаре | {+Да+} |
| [rules](#btnRules) | [Список объектов](Типы данных#list) | [Правила](Правила) для вывода кнопки в меню | {-Нет-} |
| [iRules](#btnRules) | [Список объектов](Типы данных#list) | [Правила](Правила) для вывода кнопки в меню, работающие строго наоборот | {-Нет-} |
| [click](#btnClicks) | [Объект](Типы данных#object) | Содержит действия при клике а также описание действий для разных типов клика | {-Нет-} |
| [slot](Item format#slot) | Integer, Object, Text| Sets the position of an item | {+Yes+} |
| [rules](#btnRules) | [Object list](Data types#list) | [Rules](Rules) для вывода кнопки в меню | {-No-} |
| [iRules](#btnRules) | [Object list](Data types#list) | [Rules](Rules) для вывода кнопки в меню, работающие строго наоборот | {-No-} |
| [click](#btnClicks) | [Object](Data types#list) | Содержит действия при клике а также описание действий для разных типов клика | {-No-} |
Как видно, обязательным для кнопки является только параметр `slot`, ведь предмет должен находится в конкретной ячейке.
......
......