Skip to content
iPlugin

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,只填入输入框,不执行
urlURL 文字否;写属性时需给值不添加链接事件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:

plugins/Invero/workspace/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