Макеты, фреймы и слоты
Макет (layout) — это именованный блок меню. Вы создаёте его в layoutPool записи Open GUI и задаёте ему id. Другие макеты обращаются к нему по этому id.
Выбор макета
| Макет | Для чего использовать | Поля |
|---|---|---|
simple | Статические меню, рамки и фиксированные кнопки. | items |
flex | Предметы, автоматически расставляемые по рядам. | items, justifyContent, alignItems, wrap, virtualHeight |
paginated | Список, разбитый на страницы. | itemsPerPage, slots, items, navigationButtons |
scrollable | Содержимое, превышающее размер окна. | innerId, virtualWidth, virtualHeight, buttons |
frame | Независимые прямоугольники. | frames |
composite | Слои, рисуемые друг поверх друга. | children |
book | Написанная книга (written book). | pages |
merchant | Обмен с жителем. | trades |
storage | Постоянные слоты для предметов. | entry, groupKey, slots |
leaderboard | Рейтинг по факту. | leaderboard, x, y, width, height, previousButton, nextButton |
simple
У каждого предмета есть x (столбец, от 0 до 8) и y (ряд, 0 — самый верхний). С этого макета лучше всего начинать.
dropOnClose возвращает то, что осталось в слотах раскладки при закрытии меню (в том числе когда его заменяет другое меню): добычу, которую игрок не забрал, или предмет, который он туда положил. Возвращаются только предметы с allowPickup, один раз; украшения — никогда. closeDelivery определяет способ: GIVE_OR_DROP (по умолчанию) кладёт предметы в инвентарь, а излишек выбрасывает под ноги игроку, DROP выбрасывает всё. По умолчанию выключено, а редактор предупреждает, если оно включено, но ни один предмет нельзя забрать.
flex
flex игнорирует x и y своих предметов и раскладывает их слева направо, ряд за рядом, по ширине меню. justifyContent определяет, как распределяется ряд (START, CENTER, END, SPACE_BETWEEN), alignItems — где блок располагается по вертикали внутри virtualHeight, а wrap — переходит ли заполненный ряд на следующую строку. Без wrap предметы за последним столбцом отбрасываются и записываются в лог.
paginated
Предметы разбиваются на страницы по itemsPerPage штук и раскладываются по физическим слотам slots (индекс слота равен y * 9 + x). Если slots пуст, они заполняют инвентарь с левого верхнего угла. Добавляйте кнопки в navigationButtons, по одной на каждую role:
NEXTиPREVIOUSотображаются только тогда, когда есть страница, на которую можно перейти.BACKпоказывается всегда и возвращает к предыдущему меню.INDICATORне кликабелен и отображается только при двух и более страницах. В его названии и описании (lore) можно использовать{page},{total_pages},{next_page},{prev_page}и{page_indicator}.
Зарезервируйте ячейки под кнопки: страницы заполняют слоты из slots и не обходят ваши кнопки.
scrollable
Макет scrollable показывает окно на макет, указанный в innerId. virtualWidth и virtualHeight задают размер всей области. Добавьте buttons с direction (UP, DOWN, LEFT, RIGHT) и step в слотах за клик. Каждая кнопка показывается только тогда, когда в её направлении есть что прокручивать.
Если showDefaultButtons включён (по умолчанию), для каждого направления без записи в buttons добавляется стрелка. defaultStep (не меньше 1) задаёт, на сколько слотов эти стрелки прокручивают за клик; у ваших собственных кнопок остаётся их step. Если отключить, стрелок по умолчанию нет.
Стрелки по умолчанию подчиняются тому же правилу, что и ваши: они показываются, только пока содержимое можно прокрутить в их направлении. Без настройки это простые предметы-стрелки с названием ▲, ▼, ◀ или ▶, в правом столбце (столбец 8) для верха и низа и в нижней строке для лева и права. Они никогда ничего не перекрывают: если ячейка уже занята предметом содержимого, кнопкой или декорацией, стрелка просто не показывается, без сообщения в консоли. Меняйте предмет, название или место стрелки в списке scrollArrows в GUI Settings.
showDefaultButtons включён по умолчанию, поэтому существующий макет scrollable получает стрелки. Отключите его или разместите стрелки в другом месте, чтобы меню осталось точно таким, каким было.
Колесо мыши также прокручивает вертикально прокручиваемый макет в фокусе, пока меню открыто. Задавайте каждому прокручиваемому и постраничному макету уникальный id, так как позиция отслеживается по id.
frame
Макет frame перечисляет прямоугольники: id, x, y, width, height и layoutId макета, который его заполняет. Содержимое фрейма позиционируется относительно его левого верхнего угла. Фрейм без разрешимого layoutId пропускается. Укажите @view в качестве layoutId, чтобы фрейм заполнялся активным представлением.
Типичная панель: фиксированная колонка вкладок, прокручиваемый фрейм содержимого и фрейм нижней части.
composite
composite рисует свои children (id макетов) по порядку, более поздние — поверх предыдущих. Поместите фон первым, содержимое посередине, а кнопки последними. Несуществующий дочерний макет пропускается, а цикл между макетами даёт пустой макет.
Связывание макетов
Макет используется, когда на него есть ссылка: из mainLayoutId, из дочернего элемента composite, из innerId макета scrollable или из layoutId макета frame. Макет, на который никто не ссылается, просто не рисуется.
Предметы и слоты
Поля предмета описаны в разделе «Меню» на странице GUI.