我的世界JSON消息怎么用:从入门到精通
在《我的世界》中,玩家除了用方块建造世界,还能通过命令、数据包、模组等方式自定义游戏体验。JSON消息(JSON Text Component)是实现文本自定义的核心工具——它能让聊天消息、悬浮提示、物品名称、命令反馈等文本不再是单调的文字,而是支持颜色、样式、点击事件、悬浮提示、图片/动画等丰富效果的“动态文本”,本文将从基础到进阶,带你彻底搞懂JSON消息的使用方法。
什么是JSON消息?为什么需要它?
1 从普通文本到JSON消息
在早期版本中,《我的世界》的文本消息非常简单,比如用/tellraw命令发送消息时,只能写纯文本:
/tellraw @a {"text":"欢迎来到我的服务器!"}
但这样的文本无法满足复杂需求:比如想给“欢迎”两个字加颜色、让“服务器”一词点击后执行命令、鼠标悬浮时显示提示等,JSON消息的出现,就是为了通过结构化的JSON格式,控制文本的每一个细节。
2 JSON消息的核心优势
- 样式自定义:支持颜色、粗体、斜体、下划线、删除线等样式;
- 交互功能:可绑定点击事件(如打开链接、执行命令、发送命令)和悬浮事件(显示提示文本、物品信息);
- :支持变量(如玩家名、坐标、分数)、翻译键(多语言支持)、插入组件(显示玩家输入的文本);
- 组合嵌套:通过“文本组件数组”,将多个不同样式的文本组合成一条消息。
JSON消息的基础结构:一个简单的例子
我们先看一个最基础的JSON消息,拆解它的结构:
{
"text": "这是一个",
"color": "green",
"bold": true,
"extra": [
{
"text": "绿色粗体",
"color": "dark_green",
"underlined": true
},
{
"text": "文本",
"color": "blue",
"italic": true
}
]
}
1 根组件与extra数组
- 根组件:JSON消息最外层的对象,代表整个文本的“容器”,可以设置
text(基础文本)、color(颜色)、bold(粗体)等基础属性; extra数组:当文本需要分段样式时,通过extra添加多个子组件,每个子组件也是一个JSON对象,可以独立设置样式和事件,最终按数组顺序拼接成完整文本。
上面的例子中,根组件显示“这是一个”(绿色粗体),extra数组包含两个子组件:“绿色粗体”(深绿色+下划线)和“文本”(蓝色+斜体),最终效果为:这是一个绿色粗体文本。
2 基础属性详解
| 属性名 | 类型 | 作用 | 示例 |
|---|---|---|---|
text |
字符串 | ,必须存在(可为空字符串) | "text":"Hello" |
color |
字符串 | 文本颜色,支持16种默认颜色(如red、green、blue)或自定义RGB(见后文) |
"color":"gold" |
bold |
布尔值 | 是否粗体 | "bold":true |
italic |
布尔值 | 是否斜体 | "italic":false |
underlined |
布尔值 | 是否下划线 | "underlined":true |
strikethrough |
布尔值 | 是否删除线 | "strikethrough":true |
obfuscated |
布尔值 | 是否随机乱码(类似“加密文本”) | "obfuscated":true |
insertion |
字符串 | 鼠标悬浮时按住Shift点击插入到聊天框的文本 | "insertion":"/tp" |
进阶功能:颜色、变量与翻译键
1 自定义颜色:RGB与格式化颜色
除了16种默认颜色(white、yellow、light_purple、red、aqua、green、dark_green、dark_aqua、dark_red、dark_blue、dark_purple、blue、gold、gray、dark_gray、black),JSON支持通过color属性传入RGB值,实现任意颜色:
{
"text": "自定义RGB颜色",
"color": "#FF6B6B" // 十六进制RGB,格式为#RRGGBB
}
或使用rgb(r,g,b)格式(需Java版1.16+):
{
"text": "RGB颜色",
"color": "rgb(255,107,107)"
}
2 动态变量:插入游戏数据
JSON消息支持通过score、selector、nbt等组件,动态获取游戏中的数据,比如玩家名、坐标、物品NBT值等。
2.1 玩家名与坐标(selector组件)
通过@p(最近玩家)、@a(所有玩家)、@r(随机玩家)等选择器,获取玩家信息:
{
"text": "当前玩家:",
"extra": [
{
"text": "@p",
"color": "blue",
"clickEvent": {
"action": "suggest_command",
"value": "/tell @p "
},
"hoverEvent": {
"action": "show_entity",
"value": "@p"
}
},
{
"text": ",坐标:",
"color": "gray"
},
{
"text": "X:100 Y:64 Z:200",
"color": "gold",
"clickEvent": {
"action": "suggest_command",
"value": "/tp 100 64 200"
}
}
]
}
clickEvent:点击事件(见后文),这里用suggest_command让点击后自动填充命令到聊天框;hoverEvent:悬浮事件,show_entity悬浮时显示玩家实体信息(如“玩家: Steve[uuid=...]”)。
2.2 计分板分数(score组件)
需要提前创建计分板,通过score组件获取玩家分数:
{
"text": "你的金币数:",
"extra": [
{
"score": {
"name": "@p", // 目标玩家(选择器)
"objective": "money" // 计分板项名称
},
"color": "gold",
"bold": true
}
]
}
3 多语言支持:translate组件
通过translate属性,使用游戏内置的翻译键(如item.minecraft.diamond显示“钻石”),实现多语言适配(需对应语言包支持):
{
"translate": "item.minecraft.diamond",
"color": "aqua",
"bold": true
}
还可通过with参数传递变量(如显示“5个钻石”):
{
"translate": "item.minecraft.diamond.name",
"color": "aqua",
"extra": [
{
"text": " x",
"color": "white"
},
{
"score": {
"name": "@p",
"objective": "diamond_count"
}
}
]
}
交互功能:点击与悬浮事件
1 点击事件(clickEvent)
clickEvent用于定义鼠标左键点击文本时的行为,支持以下action类型:
| action类型 | 作用 | 示例 |
|---|---|---|
run_command |
直接执行命令(无需发送) | "action":"run_command","value":"/say 你点击了我!" |
suggest_command |
填充文本到聊天框(需手动发送) | "action":"suggest_command","value":"/tp @p " |
open_url |
打开网页(需在安全列表中) | "action":"open_url","value":"https://www.minecraft.net" |
change_page |
在书籍中翻页(仅书籍文本) | "action":"change_page","value":"1" |
copy_to_clipboard |
复制文本到剪贴板(Java版1.17+) | "action":"copy_to_clipboard","value":"这是要复制的文本" |



还没有评论,来说两句吧...