/tellraw JSON 文本:clickEvent、hoverEvent 以及你的消息为何不显示
一个错误的括号就会让 tellraw 静默失败。本文介绍了组件的结构、聊天中实际可用的点击和悬停操作,以及人们常忽略的转义规则。
/tellraw 接受一个 JSON 文本组件,其失败模式非常不友好:格式错误的组件会不显示任何消息,也不报错。以下内容旨在帮助你一次性写出正确的结构。
三种有效结构
"plain string"
{"text":"one component"}
["joined ",{"text":"list","color":"gold"}]
列表形式适用于任何有趣的内容,因为每个元素都可以拥有自己的格式。第一个元素的格式会被其余元素继承,除非它们自己覆盖了该格式——这就是为什么人们会意外地看到整条消息都变成了金色。为了避免这种情况,请用空字符串开始一个列表:
/tellraw @a ["",{"text":"Warning: ","color":"red"},{"text":"low health"}]
点击操作
clickEvent 接受一个动作和一个值:
| 动作 | 值 | 注意 |
|---|---|---|
run_command | /spawn | 以玩家身份运行,权限级别与玩家相同 |
suggest_command | /msg Steve | 填充聊天框,但不发送 |
open_url | https://… | 打开前会提示 |
copy_to_clipboard | 任意文本 | 分享坐标最友好的方式 |
change_page | 页码 | 仅限书 |
run_command 有一个陷阱:它以点击玩家的权限执行,而不是命令方块的权限。一个调用 /gamemode creative 的菜单对普通玩家来说什么也做不了。
悬停操作
"hoverEvent":{"action":"show_text","contents":["Click to teleport"]}
show_text、show_item 和 show_entity。请注意 contents——旧的指南使用 value,它已被替换,现在会静默失败。这个单一的重命名解释了许多从教程中复制的失效悬停提示。
转义是出错的关键
整个组件是一个命令参数,因此内部的引号必须在命令解析器中幸存下来。在命令方块中,直接输入即可。在函数文件中,不需要反斜杠转义。在 /give 成书中,JSON 是一个字符串中的字符串,需要转义——这种情况会产生一堆难以阅读的 \"。
经验法则:如果你要在物品组件中嵌套文本组件,请使用工具而不是手动构建。
文本中的选择器
{"selector":"@p","separator":{"text":", "}}
在发送时解析为玩家名称。{"score":{"name":"@s","objective":"Kills"}} 获取一个记分板值。两者都比你自己尝试连接值要好。
翻译键跨语言传播
{"translate":"block.minecraft.crafting_table"}
以每个玩家自己的语言渲染——韩语客户端显示 제작대,日语客户端显示 作業台。对于多语言服务器来说,这比硬编码英语要好得多。
在 Text & Display Command Builder 中,以当前形式直观地构建组件,包括点击和悬停操作。