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

Макеты, фреймы и слоты

Макет (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.