文本(Text)

基本信息

属性 值
源码类 lumien.custommainmenu.configuration.elements.Text(继承 Element)
渲染类 lumien.custommainmenu.gui.GuiCustomLabel(继承原版 Gui,不是 GuiLabel)
配置位置 顶层 texts 对象下的每个键(GuiConfig.loadTexts,GuiConfig.java:219)

⚠️ 配置键是 texts,但仓库自带的 mainmenu.schema.json:591 把它写成 labels。实际只有 texts 生效(GuiConfig.java:220 硬读 jsonObject.get("texts")),且该调用未判空——写成 labels 会直接空指针。随包发布的 mainmenu_default.json 用的也是 texts,可作准。

可配置项

字段 必填 默认值 说明
text 是 — 显示文本,接受任意文本来源
posX / posY 是 — 相对锚点的像素偏移
alignment 否 top_left(0,0) 锚点
color 否 -1 常态颜色(-1 = 全白)
hoverColor 否 = color 悬停颜色
fontSize 否 1.0f 缩放比例
action 否 null 点击行为
hoverText 否 = text 悬停文本
pressSound / hoverSound 否 null 点击/悬停音效

⚠️ posX/posY 本身是 final,color/hoverColor/alignment/fontSize 都在 GuiConfig.getText 里一次性写入,运行中无法热改(改配置须走重载配置)。

渲染行为

  • 命中检测是按渲染文本实测宽度算的矩形,不是按钮那样的配置尺寸(GuiCustomLabel.isMouseAboveLabel)。
  • 文本含 \n 时按行渲染,每行偏移 FONT_HEIGHT;悬停色逐行应用(GuiCustomLabel.java:64-76)。
  • fontSize != 1.0f 时用 translate → scale → translate 原地缩放(GuiCustomLabel.java:54-58),画完再逆变换还原。
  • ⚠️ 命中判定用的 this.width 是构造时用 text.text.get() 算的(GuiCustomLabel.java:36),hover 文本更长时点击区域不会跟着变宽。

保留元素名:fml

元素名为 fml 时,构造函数会覆盖该元素的文本为 FML 品牌串列表(FMLCommonHandler.getBrandings(true),非空项以 \n 连接),替换掉配置里的 text(GuiCustomLabel.java:38-47)。这是 mod 列表 / 加载完毕后品牌行的标准接法。

交互

mouseClicked 在鼠标位于文本上且 action != null 时执行动作;点击音效优先 pressSound,否则用原版 gui.button.press(GuiCustomLabel.java:119-129)。GuiCustom.mouseClicked 会把事件额外转发给全部 textLabels(GuiCustom.java:170-177),因此文本动作先于按钮动作处理。

相关条目