MC Toolkit

指南 / 命令与数据

/tellraw 文本组件:click_event、hover_event,以及为什么你的消息什么都没显示

一个括号写错,tellraw 就不会向任何目标发送任何内容。下面介绍组件的结构、聊天中真正可用的点击与悬停操作、大多数人都会忽略的转义规则,以及 1.21.5 将 clickEvent 改名为 click_event 的变化。

/tellraw 接受一个文本组件,而它的失败方式很不友好:格式错误的组件会不给任何目标发送消息——唯一的报错只会发给执行命令的人,或者进入命令方块的输出里,而那里没人会看。下面所有内容都是关于如何一次就把结构写对。

三种有效结构

"plain string"
{"text":"one component"}
["joined ",{"text":"list","color":"gold"}]

列表形式才是用来做任何有趣事情的形式,因为每个元素都可以携带自己的格式。第一个元素的格式会被其余元素继承,除非它们自己覆盖——这就是为什么人们会莫名其妙地得到一整条金色的消息。用空字符串开头可以避免这种情况:

/tellraw @a ["",{"text":"Warning: ","color":"red"},{"text":"low health"}]

点击操作

click_event 接受一个操作,外加该操作自己的字段——并不存在共用的 value:

操作字段说明
run_commandcommand: "/spawn"以玩家身份、按其权限等级执行
suggest_commandcommand: "/msg Steve "填入聊天框,但不发送
open_urlurl: "https://…"打开前会先询问
copy_to_clipboardvalue: "any text"分享坐标时最友好的一种
change_pagepage: 2仅限成书

run_command 有一个陷阱:它以点击的玩家的权限执行,而不是命令方块的权限。一个调用 /gamemode creative 的菜单对普通玩家来说什么都不会做。

悬停操作

"hover_event":{"action":"show_text","value":["Click to teleport"]}

show_text、show_item 和 show_entity。注意这些名称——较旧的指南使用 hoverEvent、clickEvent 和 contents,而 1.21.5 用 hover_event、click_event 以及(针对 show_text 的)value 取代了它们。这次改名解释了大量从教程里抄来却失效的悬停提示。

转义才是出错的地方

整个组件是一个命令参数,所以里面的引号必须能通过命令解析器。在命令方块里,直接输入即可。在函数文件里,不需要反斜杠转义。在 /give 成书中,页面也是文本组件,以 SNBT 书写——自 1.21.5 起不再需要字符串套字符串的转义,而仍然写成转义 JSON 字符串的页面现在会显示为带引号的字面文本。

经验法则:如果你要在物品组件里嵌套文本组件,用工具来构建,而不是手写。

文本中的选择器

{"selector":"@p","separator":{"text":", "}}

会在发送时解析为玩家名称。{"score":{"name":"@s","objective":"Kills"}} 会取出记分板数值。两者都比你自己尝试拼接数值要好。

翻译键可跨语言生效

{"translate":"block.minecraft.crafting_table"}

会以每个玩家自己的语言渲染——韩语客户端显示 제작대,日语客户端显示 作業台。对于多语言服务器来说,这绝对比硬编码英文更好。

在文本与显示命令生成器中构建并预览文本和显示命令。

文字与显示命令生成器 →

更多指南

查看全部 →