浅出:在《我的世界》中如何发送JSON消息
在《我的世界》的广阔世界中,玩家们习惯了通过聊天框用简单的文本进行交流,对于追求更丰富交互体验的服务器管理员、地图作者或红石工程师来说,仅仅文本是远远不够的,他们希望能够发送带有颜色、格式、点击事件和悬停提示的复杂消息——这正是JSON消息大显身手的地方。
JSON(JavaScript Object Notation)消息是一种强大的功能,它允许你将一段普通的文本“包装”起来,并为其附加各种样式和交互功能,本文将带你从零开始,了解如何在《我的世界》中发送JSON消息,无论是通过命令方块还是服务端插件。
什么是JSON消息?为什么它如此强大?
想象一下,传统聊天消息就像一张白纸,你只能用一种颜色的笔写字,而JSON消息则像一张精美的海报,你可以在上面:
- 改变文字颜色和样式:比如将文字变成红色、加粗、斜体或带有下划线。
- 插入文本组件:比如在一个句子中嵌入一个可点击的链接。
- 添加交互功能:最经典的功能是让文字“可点击”,点击后可以执行一个命令(如传送玩家、给予物品等)。
- 显示悬停提示:当鼠标指针(在游戏中是准星)悬停在文字上时,会显示一段提示信息。
这种能力极大地丰富了《我的世界》的交互性,常用于制作精美的欢迎信息、指令菜单、任务提示和动态故事文本。
JSON消息的基本结构
一个JSON消息的核心是一个包含 text 键的基础对象,所有其他功能(如颜色、事件)都通过在这个基础对象上添加新的键来实现。
最简单的JSON消息示例:
{
"text": "你好,世界!"
}
在游戏中,这会显示为纯文本“你好,世界!”,让我们为它添加一些样式。
如何发送JSON消息?
发送JSON消息主要有两种方式:游戏内命令 和 服务端插件。
使用命令方块(最常用)
对于大多数玩家和服务器管理员来说,这是最直接、最无需编程的方法。
-
获取命令方块:在创造模式下,从物品栏中选取命令方块(或
/give @p minecraft:command_block)。 -
设置命令方块类型:右键点击命令方块,将其类型设置为“重复”(Repeating)和“无条件”(Unconditional),这样它就会每隔游戏刻(Tick)执行一次命令,如果你只想让它触发一次,可以设置为“脉冲”(Impulse)。
-
输入JSON命令:在命令方块中输入以下格式的命令:
tellraw <目标> <JSON消息>tellraw是发送原始文本的命令。<目标>是消息的接收者,可以是@p(最近的玩家)、@a(所有玩家)、@s(自己,即命令方块)等。<JSON消息>是你精心编写的JSON字符串。
重要提示:在命令方块中,JSON字符串需要用双引号 包裹,并且JSON内部的双引号需要用反斜杠 \ 进行转义。
实战案例:发送一条红色的欢迎消息
假设你想向所有玩家发送一条红色的欢迎语“欢迎来到我的服务器!”。
- 编写JSON:
{ "text": "欢迎来到我的服务器!", "color": "red" } - 转义并放入命令:
将JSON字符串中的 替换为
\"。{\"text\": \"欢迎来到我的服务器!\", \"color\": \"red\"} - 在命令方块中输入完整命令:
tellraw @a {\"text\": \"欢迎来到我的服务器!\", \"color\": \"red\"}
当你激活命令方块后,所有在线玩家都会看到一条红色的欢迎消息。
使用服务端插件(如Spigot/Paper)
如果你是服务器管理员并且使用的是Spigot、Paper或其衍生服务端,你可以通过Java插件来更灵活地发送JSON消息,这需要一定的Java编程知识。
以下是使用Bukkit API发送JSON消息的代码示例:
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.ComponentBuilder;
import net.md_5.bungee.api.chat.HoverEvent;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
public class MyJsonPlugin extends JavaPlugin {
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (sender instanceof Player) {
Player player = (Player) sender;
// 1. 创建基础文本组件
TextComponent message = new TextComponent("点击这里传送到出生点");
message.setColor(ChatColor.GREEN); // 设置颜色
message.setBold(true); // 设置粗体
// 2. 设置点击事件
message.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/spawn"));
// 3. 设置悬停事件
message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT,
new ComponentBuilder("点击后你将被传送到出生点").color(ChatColor.GRAY).create()));
// 4. 发送消息给玩家
player.spigot().sendMessage(message);
}
return true;
}
}
这段代码会创建一条绿色的粗体文本,当玩家将鼠标悬停在上面时会显示提示,点击则会执行 /spawn 命令。
JSON消息常用属性一览
| 属性名 | 类型 | 描述 | 示例 |
|---|---|---|---|
text |
String | 必需,消息的文本内容。 | "text": "你好" |
color |
String | 设置文本颜色。 | "color": "red" |
bold |
Boolean | 是否加粗。 | "bold": true |
italic |
Boolean | 是否斜体。 | "italic": false |
underlined |
Boolean | 是否有下划线。 | "underlined": true |
bold |
Boolean | 是否加粗。 | "bold": true |
clickEvent |
Object | 定义点击事件。 | 见下方详解 |
hoverEvent |
Object | 定义悬停事件。 | 见下方详解 |
clickEvent 和 hoverEvent 结构详解:
它们都是包含 action 和 value 两个键的对象。
-
clickEvent:
action: 点击动作,如run_command(执行命令)、suggest_command(建议命令)、open_url(打开网页)。value: 对应的动作内容。- 示例:
"clickEvent": {"action": "run_command", "value": "say 你点击了我!"}
-
hoverEvent:
action: 悬停动作,通常是show_text(显示文本)。value: 悬停时显示的文本内容,同样是一个JSON消息对象。- 示例:
"hoverEvent": {"action": "show_text", "value": {"text": "这是一个提示"}}
**五、 高级技巧:组合使用与文本组件`
你可以创建一个TextComponent数组,然后将它们组合在一起,实现更复杂的效果,比如不同颜色的词语在同一句话中。
命令方块示例(组合消息):
发送一条消息:“[传送] 点击传送到主城”,[传送]”是蓝色可点击的,其余是白色。
[
{
"text": "[传送] ",
"color": "blue",
"clickEvent": {"action": "run_command", "value": "/warp hub"},
"hoverEvent": {"action": "show_text", "value": {"text": "传送到主城"}}
},
{
"text": "点击传送到主城",
"color": "white"
}
]
在命令方块中,你需要将整个数组用引号包裹并转义:
tellraw @a [{\"text\": \"[传送] \", \"color\": \"blue\", \"clickEvent\": {\"action\": \"run_command\", \"value\": \"/warp hub\"}, \"hoverEvent\": {\"action\": \"show_text\", \"value\": {\"text\": \"传送到主城\"}}},{\"text\": \"点击传送到主城\", \"color\": \"white\"}]
JSON消息是《我的世界》中一个极具表现力的工具,它将简单的文本



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