Skip to content
On this page

文本组件

文本组件用于显示标题、说明、状态值和剧情文字。它支持响应式变量、自定义 TTF 字体、文字颜色、按字符数量或实际像素宽度换行、逐字显示以及左对齐、居中和右对齐。

适用场景

  • 页面标题和按钮外的说明文字
  • HUD 数值与状态提示
  • 剧情对白和逐字出现的文本
  • 通过页面变量和脚本动态修改的文字

通用配置

配置项编辑器名称类型默认值可选值或格式说明
idID字符串自动生成 text_N页面内唯一 ID用于脚本、父级绑定和状态更新。
type类型只读字符串text固定值创建后不能修改。
parent父级字符串布局组件 ID为空表示根级元素;不得形成循环。
z层级整数0任意整数控制绘制先后。
visible显示布尔值truetruefalse静态显隐开关。
enabled启用布尔值truetruefalse控制是否响应事件。
pointerEvents指针处理枚举autoautoblockpass文本配置事件或提示后,auto 才参与命中;block 强制遮挡,pass 永远穿透。
scale缩放数字或公式1非负值以文本区域中心缩放画面与命中范围,不改变布局值。
opacity透明度数字或公式101控制文字透明度,不改变命中。
visibleWhen显示条件条件表达式只读条件条件为假时隐藏。
enabledWhen启用条件条件表达式只读条件条件为假时禁用。
tooltip多行提示字符串列表最多 32 行,每行最多 256 字符鼠标悬浮提示。
containerBinding容器绑定字符串当前容器的语义槽位 ID仅容器替换页面使用,可通过组件常量显示名称和 Lore。
containerTooltip容器提示布尔值truetruefalse没有显式 tooltip 时是否显示绑定物品提示。
layout.xX数字或公式创建时画布位置合法布局公式文本区域左上角 X。
layout.yY数字或公式创建时画布位置合法布局公式文本区域左上角 Y。
layout.width数字或公式80合法布局公式对齐时使用的文本区域宽度。
layout.height数字或公式12合法布局公式文本组件的布局高度。
events.create创建脚本ChaUI Script多行脚本初始页面打开时执行一次;动态新增或复制的文本实例也会各执行一次。
events.leftPress
/rightPress/middlePress
按下脚本ChaUI Script多行脚本对应按键在文本上按下时触发。
events.leftRelease
/rightRelease/middleRelease
松开脚本ChaUI Script多行脚本对应按键捕获仍有效并松开时触发。
events.leftClick左键脚本ChaUI Script多行脚本左键点击时触发。
events.rightClick右键脚本ChaUI Script多行脚本右键点击时触发。
events.middleClick中键脚本ChaUI Script多行脚本中键点击时触发。
events.hoverEnter悬浮进入脚本ChaUI Script多行脚本鼠标进入时触发。
events.hoverLeave悬浮离开脚本ChaUI Script多行脚本鼠标离开时触发。

专属配置

配置项编辑器名称类型默认值可选值或格式说明
text.value内容字符串新建时组件 ID;字段缺失为空普通文字与 {表达式}当前显示内容;花括号内可实时读取页面变量、玩家常量和 PAPI 常量。
text.font字体路径字符串.ttf 安全相对路径相对于客户端 resourcepacks/ChaUI,例如 fonts/title.ttf;留空使用 Minecraft 原版字体。
text.fontResolution字体分辨率整数3216256自定义 TTF 字体的清晰度;数值越高,放大后的边缘越细腻,同时会占用更多内存和显存。未填写时使用 32
text.color文字颜色六位十六进制颜色#FFFFFF#RRGGBB只控制红、绿、蓝;透明度使用组件根级 opacity
text.textSize文字大小正数1正整数或正小数1 为原版字体基础比例。
text.textLineLength每行字数正整数或空00/空或正整数0 或空表示不按字符数量换行。
text.textLineWidth每行宽度非负整数或空0GUI 像素应用 textSize 后的最大行宽;0 或空表示不按像素宽度换行。
text.revealIntervalMs逐字间隔(ms)非负整数0毫秒0 表示立即显示;正数表示每个字符出现的间隔。
text.align对齐枚举leftleftcenterrightlayout.width 范围内对齐每一行。

逐字播放按页面渲染作用域记录。重新打开页面或通过运行时修改文本内容后,会从新内容开头重新显示。

响应式文字

在内容中使用 {...},文本就会跟随变量和只读常量实时变化:

text
点击次数:{vars.count}
生命:{vals.player.health} / {vals.player.maxHealth}
余额:{vals.papi.balance}
完成度:{vars.current / vars.total * 100}%

花括号外的文字保持原样,花括号内支持变量引用、四则运算和括号。需要显示普通花括号时,连续写两个左花括号或两个右花括号。未知变量或非法表达式会保留原占位内容,不会让页面崩溃。

详细配置、PAPI 映射和刷新说明请阅读响应式变量与实时文字

显式换行

text.value 可以包含真实换行。原版 Minecraft 字体和自定义 TTF 字体都会先按显式换行分段,再对每一段应用 textLineLengthtextLineWidth。空行也会保留对应行高。

两个限制可以单独使用,也可以同时使用。同时设置时,追加下一个字符会超过任意一个限制就换到下一行。像素宽度按当前字体的真实字形和 textSize 计算,因此中英文、数字和不同 TTF 字体会得到与画面一致的行宽。单个字形本身超过 textLineWidth 时,该字形会单独占一行,不会消失。

yaml
text:
  value: |-
    第一行:当前状态正常
    第二行:等待下一次结算

    第四行:这里保留了一个空行
  textLineLength: 12
  textLineWidth: 160

如果页面只是显示标题、数值和简短说明,仍建议使用多个独立文本组件控制位置。长说明、剧情文字或服务端动态生成的多行内容再使用显式换行,会更容易保持布局清晰。

自定义字体与颜色

将有权使用的 TTF 字体放进当前客户端的 resourcepacks/ChaUI 文件夹,再在“字体路径”中填写相对路径。例如字体实际位于 resourcepacks/ChaUI/fonts/title.ttf 时,配置填写 fonts/title.ttf

字体路径只支持正斜杠和 .ttf 文件,不接受绝对路径、路径穿越或反斜杠。其他玩家的客户端也需要存在同一路径字体,否则会自动使用 Minecraft 原版字体。自定义字体缺少某个字符时,只会让该字符使用原版字体,不影响同一段中的其他字符。

“字体分辨率”决定自定义字体在放大时能保留多少细节,不会改变文字实际显示大小、组件布局、换行或对齐。文字在页面上需要多大,仍然由 text.textSize 控制。一般文字可保持默认 32;较大的标题或笔画细节丰富的字体可尝试 6496。只有确实需要超大文字时才建议继续提高,避免无意义地增加客户端内存和显存占用。

16 低于默认精度,主要用于节省资源,不会让字体更清晰;而且在小字号下与 32 的差别可能不明显。要验证配置是否生效,建议在较大的标题上对比 1696,实际显示大小仍应保持一致,变化的是笔画边缘细节。

同一个页面可以按组件分别设置字体分辨率。例如正文保持 32,标题使用 96。编辑器中留空不会保存该配置,运行时仍按默认值 32 处理;明确填写 32 时则会保留在页面配置中。未配置自定义字体时,“字体分辨率”不会产生效果。

颜色固定填写 # 加六位十六进制数字,例如 #FFCC66 是金黄色,#FFFFFF 是白色。需要半透明时,在文本组件根级填写 opacity: 0.5

同样的 fontfontResolutioncolor 也可以配置在按钮的 button 数据块中。文本与按钮分别保存自己的字体样式;输入框文字、物品数量和悬浮提示仍使用原版字体。

自定义 TTF 字体同样支持原版内联颜色码 §0§f 和重置码 §rtext.color 是整段文字的基础颜色,内联颜色码从出现位置开始覆盖 RGB,§r 会恢复 text.color。组件根级 opacity 统一作用于整段文字。例如:

yaml
text:
  value: "普通颜色 §c红色 §r恢复基础颜色"
  font: fonts/title.ttf
  color: "#66CCFF"

配置示例

yaml
- id: welcome_title
  type: text
  parent: ""
  visible: true
  enabled: false
  pointerEvents: pass
  scale: 1
  opacity: 0.9
  z: 20
  layout:
    x: window.width * 0.5 - 100
    y: 30
    width: 200
    height: 20
  text:
    value: "欢迎来到服务器,{vars.playerName}"
    font: fonts/title.ttf    # 留空或删除此项时使用原版字体
    fontResolution: 96       # 16~256;大标题可适当提高,留空默认 32
    color: "#FFCC66"        # 固定六位 RRGGBB
    textSize: 1.5
    textLineLength: 0        # 0 表示不按字数主动换行
    textLineWidth: 0         # 0 表示不限制渲染后的 GUI 像素宽度
    revealIntervalMs: 40    # 每 40 毫秒显示一个字符
    align: center
  tooltip: []
  events:
    create: vars.titleCreated = true # 组件创建后写入当前页面变量

文本组件对象可以读取当前文字和布局声明。例如:

yaml
events:
  create: |-
    vars.titleText = component("welcome_title").text.value
    vars.titleXFormula = component("welcome_title").layout.expression("x").source

常见问题

设置 center 后仍不在整个屏幕中央

对齐只作用于组件自己的 layout.width。先让组件区域位于目标位置,再使用 center 居中文本。

中英文混排时怎样让右边界更整齐

使用 textLineWidth 按当前字体的实际显示宽度换行。需要同时限制每行最多多少个字符时,再一起设置 textLineLength;两项中先达到的限制会触发换行。

文字突然不显示

检查 visiblevisibleWhen、根级 opacity、文字大小和布局公式。非法条件会按不可见安全处理;字体文件缺失或损坏时会自动回退原版字体,不会让整个页面失效。

自定义字体看起来模糊或有锯齿

先确认“字体路径”已经正确加载,再逐步提高“字体分辨率”,例如从默认 32 调到 6496。不要通过提高 textSize 来改善清晰度:textSize 只负责显示大小。分辨率越高,资源占用也越高,建议以实际页面中足够清晰为准。

创建事件

文本组件的 events.create 适合写入初始变量或临时调整 text.value。页面 open 先执行,因此 create 可以读取 open 已设置的变量;文字中的 {vars.xxx} 会立即响应最新值。动态文本实例也会各触发一次。