文本(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),因此文本动作先于按钮动作处理。
相关条目
- 按钮(Button) - 带边框贴图的交互元素
- 文本来源 -
text字段的四种取值方式 - 占位符替换 - 文本中可用的动态变量