Из вступительного урока [Как создать меню](Как создать меню) вы узнали основы основ по созданию интерактивных меню. Здесь же вы подробно познакомитесь со структурой меню и оптимизационными возможностями плагина.
## <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
Не бойтесь на первый взгляд сложной структуры. Читая этот урок дальше, а также последующие уроки, вы поймете что означает каждый из блоков.
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.
| 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) |
| 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.