Представления, вкладки и наследование
Представление (view) — это один экран меню. Все представления используют одну и ту же оболочку (полосу вкладок, нижнюю часть), а меняется только содержимое.
Объявление представлений
В views добавьте по одной записи на каждый экран:
| Поле | Роль |
|---|---|
id | Используется в gui:view и во вкладках. |
name | Подпись, используемая в навигационной цепочке (breadcrumb). Если не задана, берётся id. |
title | Заголовок этого представления. Пустое значение оставляет заголовок меню. Допускает {breadcrumb}, {view} и {root}. |
parentId | Родительское представление: для навигационной цепочки и чтобы вкладка родителя оставалась подсвеченной. |
frames | Явное соответствие id фрейма и id макета. |
criteria, viewPermission | Если они не выполняются, представление недоступно, а его вкладка скрыта. |
activeStyle | Как выглядит вкладка, пока она активна: glint, material, customModelData, nameFormat, loreSuffix. |
В Open GUI defaultViewId — это представление, открываемое первым (если пусто, первое из объявленных). breadcrumbSeparator — текст MiniMessage между сегментами навигационной цепочки, а pushHistoryOnViewSwitch заставляет gui:back возвращаться к предыдущему представлению после смены вкладки.
Заполнение фреймов
В макете frame задайте layoutId фрейма равным @view. Для активного представления расширение ищет макет в таком порядке:
- соответствие
framesпредставления дляidэтого фрейма; - макет с именем
<view id>_<frame id>, напримерisland_contentдля фреймаcontentи представленияisland; - те же два поиска по цепочке
parentId.
Фрейм, для которого ничего не найдено, остаётся пустым. Фреймы @view разрешаются только в корневом макете меню (mainLayoutId).
Вкладки
Задайте предмету-вкладке buttonPrefix view: и buttonType, равный id представления. Клик по нему переключает на представление, и вкладка принимает activeStyle представления, пока оно или один из его дочерних элементов активно. Вкладки недоступных представлений скрыты.
Если запрошенное представление скрыто, используется первое представление, доступное игроку. Запрошенное несуществующее представление записывается в лог как Unknown view.
Наследование меню
baseMenuId — это id записи шаблонного Open GUI. Дочернее меню наследует его layoutPool, views, mainLayoutId, defaultViewId и size, причём цепочка прослеживается до корня, поэтому меню может наследовать шаблон предметной области, который сам наследует глобальную оболочку. Макет дочернего меню с тем же id заменяет унаследованный, то же относится и к представлениям. storagePool наследуется только от непосредственного родителя. Пустой mainLayoutId у дочернего меню использует родительский.
Проверьте, что родитель существует, что каждый layoutId есть в объединённом пуле и что два меню не наследуют друг друга.
На практике
Создайте шаблонное меню с фиксированным фреймом вкладок и фреймом содержимого @view, затем создайте по одному дочернему меню на каждую область, которые переопределяют только макеты содержимого. Макеты содержимого могут быть simple, scrollable или paginated, не затрагивая полосу вкладок.