跳到主要内容

布局、框架与槽位

布局是菜单中一个具名的区块。你在 Open GUI 条目的 layoutPool 中创建它,并为其指定一个 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一本成书。pages
merchant村民交易。trades
storage可持久保存物品的槽位。entry, groupKey, slots
leaderboardFact 排行榜。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 列),向左和向右位于最后一行。它们绝不会盖住任何东西:如果该格子已经有内容物品、按钮或装饰,箭头就不会显示,控制台也没有任何消息。可在 GUI Settings 的 scrollArrows 列表中更改箭头的物品、名称或位置。

在默认箭头出现之前编写的菜单

showDefaultButtons 默认开启,因此已有的 scrollable 布局会多出箭头。关闭它,或把箭头放到别处,即可让菜单与原来完全一致。

菜单打开时,鼠标滚轮也会让获得焦点的可滚动布局垂直滚动。请为每个 scrollable 和 paginated 布局设置唯一的 id,因为位置是按 id 分别记录的。

frame​

frame 布局列出若干矩形:id、x、y、width、height,以及填充该矩形的布局的 layoutId。框架内的内容相对于其左上角定位。无法解析 layoutId 的框架会被跳过。将 @view 用作 layoutId,可以让当前视图来填充它。

典型的仪表盘:一列固定的标签页、一个可滚动的内容框架,以及一个页脚框架。

composite​

composite 按顺序绘制其 children(布局 id),后面的子项叠在上层。请先放背景,中间放内容,最后放按钮。不存在的子项会被跳过,布局之间形成循环则会得到一个空布局。

连接布局​

布局只有被引用时才会被使用:通过 mainLayoutId、composite 的子项、scrollable 的 innerId 或 frame 的 layoutId。没有任何地方引用的布局不会被绘制。

物品与槽位​

物品的字段请参见 GUI 页面的“菜单”部分。