TabooLib 复合文本
查阅 fmsg 的全部属性、聊天交互、客户端文字、引用、嵌套与转义限制。
消息写法
在图标的 action 中使用 fmsg(fluentmessage、fmessage):
action: "fmsg '&7帮助:[打开菜单](color=b;hover=点击打开 hello;command=/invero menu open hello)'"点击图标后,聊天栏出现消息;再点击聊天中的“打开菜单”,才会以该玩家身份执行命令。命令需要玩家具备相应权限。悬停提示显示在聊天文字上,不是物品 Lore 的二级悬浮窗。
此入口使用默认开启的 Kether.auto-placeholder-translate,见文本写法。
基本格式
普通文字[特殊文字](属性=值;另一属性=值;标志属性)普通文字方括号包住文本,紧随其后的圆括号设置属性。多个属性用分号隔开;属性和值用一个等号连接。属性名使用下表小写名称,区分大小写,未知属性不会自动变成其他格式的标签。
b、i 等为“存在即开启”的标志,不是布尔字段;写 b=false 仍会加粗。省略某个属性不代表清除外层样式;需要清除时使用 reset。同一文本块选一个颜色方案和一种点击方式,不依赖多个冲突属性的执行顺序。
样式属性
以下字段写在一段 [文字](...) 的属性区域中,均不影响物品来源字段 color 的可用性。
| 字段 | 类型 | 必填 | 省略行为 | 说明 |
|---|---|---|---|---|
color(c) | 颜色文字 | 否;写属性时需给值 | 不指定该块颜色 | a、#47856e、英文名、多字中文颜色名或 RGB;单字符仅使用 0~9、a~f |
gradient(g) | 逗号分隔的颜色文字 | 否;写属性时需给值 | 不生成渐变 | 至少两种颜色;如 #47856e,#2c89a0,也可用颜色名或连字符 RGB |
bold(b) | 标志 | 否 | 不主动加粗 | 存在即加粗 |
italic(i) | 标志 | 否 | 不主动设斜体 | 存在即斜体 |
s | 标志 | 否 | 不主动加删除线 | 仅使用 s,不是 strikethrough |
u | 标志 | 否 | 不主动加下划线 | 仅使用 u,不是 underline |
obf(o) | 标志 | 否 | 不主动混淆文字 | 随机字符效果 |
reset(r) | 标志 | 否 | 不清除当前装饰与颜色 | 清除该块的颜色和样式,不是清除点击事件的通用开关 |
font(f) | 字体标识文字 | 否;写属性时需给值 | 使用继承或客户端默认字体 | 如 minecraft:default;自定义字体需对应资源包 |
newline(br、nl) | 标志 | 否 | 不额外换行 | 在该文本块后加换行,不把文字 \n 当作换行 |
样式和换行标志按是否存在生效,b=false 仍会加粗;不需要时移除该标志。r 清除颜色和文字装饰,但不清除 font、点击、悬停或插入事件。同一属性选择一种名称,不同时填写它和别名。
color 的 RGB 可写 255,0,0 或 255-0-0;常规颜色代码 &{255,000,000} 则要求三位分组,两种入口不要混淆。渐变中的逗号用于区分多个颜色,推荐使用六位十六进制。
点击与悬停
这些字段同样写在属性区域;同一文本块只配置一种点击方式,悬停和插入可与点击组合。
| 字段 | 类型 | 必填 | 省略行为 | 说明 |
|---|---|---|---|---|
command(cmd) | 命令文字 | 否;写属性时需给值 | 不添加执行命令事件 | command=/invero menu open hello,包含开头 /;以玩家身份执行 |
suggest | 文字 | 否;写属性时需给值 | 不添加输入建议 | suggest=/invero menu open hello,只填入输入框,不执行 |
url | URL 文字 | 否;写属性时需给值 | 不添加链接事件 | url=https://github.com/0ruuid/Invero,由客户端处理打开链接 |
copy | 文字 | 否;写属性时需给值 | 不添加复制事件 | copy=hello,复制到剪贴板,需客户端支持 |
insertion(insert) | 文字 | 否;写属性时需给值 | 不添加插入文字 | Shift 点击时向聊天输入框插入文字 |
hover(h) | 提示文字或 @引用名 | 否;写属性时需给值 | 不添加悬停提示 | 普通文字可用 <br> 或 ` |
file | 客户端文件路径文字 | 否;写属性时需给值 | 不添加打开文件事件 | 不是服务端文件读取;普通聊天客户端通常会限制此事件,不建议作为菜单入口 |
page | 整数字样 | 否;写属性时需给值 | 不添加翻页事件 | 书页跳转事件,不是 Invero 分页面板翻页;聊天中不保证生效 |
page 的值必须能转为整数。上述事件能否实际执行还受客户端支持及玩家权限影响;配置事件不等于绕过权限。
action: "fmsg '[帮助](color=e;hover=第一行||第二行||第三行)'"也可统一使用 <br>,不要在同一悬停内容中混用两种分隔符。普通 hover 的文字不会再次按方括号富文本解析,需要富文本时使用引用。
不同样式与嵌套
[这一句有[强调](color=e;b)的部分](color=7)外层为整句设置灰色,内层将“强调”改为黄色粗体。多个独立点击区域应使用并列文本块,各自填写属性。不要把 MiniMessage 的尖括号闭合方式套进这里。
引用悬停内容
action: |-
fmsg """[帮助](hover=@help)
@help=第一行[重点](color=e)
"""hover=@help 引用后面单独一行的 @help=内容。引用定义必须在使用它的文字之后,名称完全一致;定义行本身不显示为聊天正文。该行内容可包含复合文本样式,需要换行可使用带 br 的文本块。
引用取内容的用法限于 hover 和翻译参数 argN 等明确支持的位置,不能把 @引用名 放进任意属性来代替其值。
同一物理行中的属性不能直接跨行;多行消息本身使用真正换行。不要只留下 @help 而删去定义,也不要在使用前先放定义行。
转义
属性里的引号不会保护分号或等号。一个属性只使用一个未转义的等号;值里需要这些字符时,使用下列反斜杠转义。
需要原样显示 [、]、(、)、;、= 或反斜杠时,在其前面加反斜杠:
action: |-
fmsg '\[公告\] [查看](hover=包含\;分号与\=等号)'消息原样显示 [公告];悬停内容保留分号和等号。这里使用 YAML 块文字保留反斜杠,Kether 用单引号包住整段消息。需要更复杂引号时使用上例的三重双引号,不要在 YAML 双引号中无意消耗一层转义。
闭合符和属性分隔符只检查它前面是否紧邻反斜杠:连续两个反斜杠也不会让后面的符号恢复分隔作用。因此不要把需要以反斜杠结尾的属性值直接贴着 ) 或 ;,也不要套用其他语言的奇偶转义规则。
\n 不是此处的通用换行写法;Lore 的 enhancedLore 也不会改变聊天消息。
显示异常
括号没有正确闭合等结构问题可能显示红色错误文字;无效颜色、不能转成整数的 page 或缺少悬停引用定义,则可能让整条消息不发送,并在后台记录错误。先检查对应属性值和引用定义,不把这些情况当作“忽略了一个未知属性”。
客户端文字
下列字段仍写在同一个属性区域。它们改变的是文本块类型,不会自动查询 Invero 菜单数据;同一块只选一种文本类型。
| 字段 | 类型 | 必填 | 省略行为 | 说明 |
|---|---|---|---|---|
keybind(key) | 标志 | 否 | 使用普通文字 | [key.jump](keybind) 显示客户端按键名称 |
selector(select) | 标志 | 否 | 使用普通文字 | [@p](selector) 发送选择器文本;是否展开取决于接收环境,不等同于计算 {{player name}} |
score | 有值的属性 | 否 | 不生成分数文本 | 使用 [玩家名](score=true;objective=kills);仅写无值 score 不会启用 |
objective(obj) | 目标名文字 | 使用 score 时必填 | 分数文本会失败 | 记分板目标名,不是显示标题 |
translate(trans) | 标志 | 否 | 使用普通文字 | [translation.key](translate) 将方括号内文字作为客户端语言键 |
arg0、arg1 等 argN | 参数文字或 @引用名 | 否 | 不传对应翻译参数 | 配合 translate,按数字后缀顺序传入参数 |
args | 逗号分隔文字 | 否 | 不传此批参数 | 当前不可用;配合翻译文本会失败,请改用 arg0、arg1 |
translation | 语言键文字 | 否;写属性时需给值 | 不额外追加翻译文字 | 在该文本块后追加一个客户端翻译项,不是 translate 的别名 |
例如需要一个翻译参数时:
action: "fmsg '[chat.type.announcement](translate;arg0=公告;arg1=欢迎回来)'"客户端需要有对应语言键,记分板目标也必须真实存在。分数或选择器的发送不保证得到服务端计算后的数字或名字;普通菜单信息优先用已返回具体文字的占位符。不要把 args 的逗号列表写法当作可用的替代方案。
物品文字中的范围
在 name、lore 中,方括号格式会转成普通显示文字。颜色、粗体等样式可以保留,但点击、悬停、复制、自定义字体和客户端动态组件不能按聊天效果保留。菜单点击仍写 action,文字字体需求见MiniMessage。
首次打开时的 menu.title 不做同样的方括号复合文本转换,使用颜色代码与占位符,不能保证方括号标记会消失。后续 menu title set、menu title update 及标题动画帧会经过常规文本格式化,但最终显示仍受窗口模式影响,也不保留聊天交互。
菜单示例
将下面内容保存为 plugins/Invero/workspace/text-demo.yml,或下载同一份 text-demo.yml:
menu:
title: '&8两套富文本'
rows: 1
panels:
- layout:
- ' F M '
icons:
F:
material: BOOK
name: '&bTabooLib 复合文本'
action: "fmsg '[帮助](color=b;hover=这是一条 TabooLib 悬停消息)'"
M:
material: PAPER
name: '&aMiniMessage'
action: "mmsg '<green><hover:show_text:这里是MiniMessage>帮助</hover></green>'"执行 /invero menu reload,再用 /invero menu open text-demo 打开。F 位于第三格、M 位于第七格;点击分别发送 TabooLib 与 MiniMessage 消息,**悬停聊天栏的“帮助”**查看两种提示,不是悬停物品查看聊天交互。
Last updated on