Minecraft Wiki

除另有声明,转载时均必须注明出处若簡繁轉換出錯,請以遊戲內為準请勇于扩充与修正内容有兴趣逛逛我们的微博沟通交流,欢迎到社区专页需要协助,请在告示板留言

了解更多

Minecraft Wiki
Advertisement

原始JSON文本(Raw JSON text)是指在Minecraft中使用JSON语言表示的文本。

本文章将介绍原始JSON文本的格式,阅读本教程时应该要对JSON的语法和用法有一定的了解。

从数据类型上讲,一个原始JSON文本一般是字符串、对象(object,也叫组合)及列表。

用途

Sign json

告示牌使用了原始JSON文本。图中为一个白桦木告示牌,文字的颜色是通过命令设置的。

Minecraft的几乎各处都使用了原始JSON文本。

你在告示牌书与笔中书写一些文字,这些文字一般都是纯文本。但是从技术上讲,这些文字实际上是原始JSON文本,对其数据稍加修改就可以让文字不再是简单的纯文本。

通过铁砧给物品或者实体命名,这个名字实际上也是原始JSON文本,修改其数据即可使物品或实体的名字带有格式。

进度的名称和描述也使用了原始JSON文本,它使用了翻译标识符。如果修改你的游戏语言,进度的名称和描述也将随之改变,这是由于它是由原始JSON文本定义了翻译标识符,然后对应到游戏资源文件相应语言的相应内容。通过修改原始JSON文本,我们也可以让告示牌、物品或实体的名称、书的内容也能够随游戏语言而变化。

可见,原始JSON文本在游戏内非常普遍。要用命令修改实体的名称、告示牌或书的内容,或者设置记分板项或boss栏的名称,你可以直接输入字符串。但如果你想让其拥有更多样式的话,便必须要有一点关于原始JSON文本的知识。

使用字符串

将文本内容两段加上双引号(注意是英文的半角双引号),即可形成一个字符串:

"Welcome to Minecraft!"

它就是一个单独的 字符串。这个原始JSON文本的效果如下:

Welcome to Minecraft!

一般地,如果你只是为了自定义文本且没有其他需求,你可以直接写成字符串的形式。

原始JSON文本元素介绍

为了使原始JSON文本具有多样性,你可以将其写成一个对象,并在里面使用元素。以下介绍了所有可用的原始JSON文本元素。

纯文本:text

纯文本可以说是最简单、最基础的原始JSON文本元素了。

在对象中,你可以使用 text来显示特定的文本:

{
  "text":"Welcome to Minecraft!"
}

效果:

Welcome to Minecraft!

如果只有 text元素,那么其和字符串的效果是等价的。

值得注意的是,如果文本里出现了“"”或“\”,那么便需要在这些字符的前面加上反斜杠“\”来对其进行转义。其他转义字符在原始JSON文本里也是支持的。

对文本进行装饰

有时候我们要将文本渲染成特定的颜色,或者应用的特定格式。这时候以下元素便可以帮助我们渲染文本。

为文本添加颜色:color

 color用于指定对象内文本的颜色,其值通常为颜色名称。下面的实例会将“Welcome to Minecraft”渲染为深红色:

{
  "text":"Welcome to Minecraft!",
  "color":"dark_red"
}

效果:

Welcome to Minecraft!

以下为所有支持的值。将格式作为值在这里是可用的,但建议使用下文的布尔值实现。

名称 前景色 背景色
R G B Hex R G B Hex
black 黑色 0 0 0 000000 0 0 0 000000
dark_blue 深蓝色 0 0 170 0000AA 0 0 42 00002A
dark_green 深绿色 0 170 0 00AA00 0 42 0 002A00
dark_aqua 湖蓝色 0 170 170 00AAAA 0 42 42 002A2A
dark_red 深红色 170 0 0 AA0000 42 0 0 2A0000
dark_purple 紫色 170 0 170 AA00AA 42 0 42 2A002A
gold 金色 255 170 0 FFAA00 42 42 0 2A2A00
gray 灰色 170 170 170 AAAAAA 42 42 42 2A2A2A
dark_gray 深灰色 85 85 85 555555 21 21 21 151515
blue 蓝色 85 85 255 5555FF 21 21 63 15153F
green 绿色 85 255 85 55FF55 21 63 21 153F15
aqua 天蓝色 85 255 255 55FFFF 21 63 63 153F3F
red 红色 255 85 85 FF5555 63 21 21 3F1515
light_purple 粉红色 255 85 255 FF55FF 63 21 63 3F153F
yellow 黄色 255 255 85 FFFF55 63 63 21 3F3F15
white 白色 255 255 255 FFFFFF 63 63 63 3F3F3F
bold 粗体 N/A
italic 斜体
underlined 下划线
strikethrough 删除线
obfuscated 随机字符

为文本添加格式:bold、italic、underlined、strikethrough和obfuscated

 bold italic underlined strikethrough obfuscated可以将文本设置为特定的格式。这些元素都是布尔值。

这些元素可以放在一起使用,这样这些格式将会叠加在一起。

下面的对象将会为文字设置加粗和倾斜效果:

{
  "text":"The text with bold and italic",
  "bold":true,
  "italic":true
}

效果:

The text with bold and italic

 obfuscated本质上和其他添加格式的元素相同,但它将会把文本变为会一直变化的随机字符。游戏只会选择与原文本等宽的字符作为其随机字符。

如果这些元素的值被设为“false”,那么它将不会应用该格式;如果父对象使用了该格式,那么这个对象将不会使用该格式。

显示不同形式的文本

有时候我们不希望它显示纯文本,这时候我们可以使用别的文本显示元素。它们最终会输出为文本,输出的内容视元素及输入的值决定。一个对象内必须要含有一个文本显示元素。

翻译标识符:translate

 translate用于在不同的语言下显示不同文本,其值为一个翻译标识符。

下面的对象将会显示石头的名称:

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

在简体中文里,它会显示为石头,但如果将游戏语言切换为英语,这个对象又会显示为stone。游戏里所有需要显示文本的地方都使用了翻译标识符。

如果翻译标识符在所选语言里没有对应值,它将使用en_us.json里该翻译标识符的值。如果该翻译标识符无法在任何语言文件里被找到,游戏会直接输出翻译标识符。

如果要添加翻译标识符,则需要使用资源包

为标识符中的参数赋值:with

有些翻译标识符会使用像“%s”和“%n$s”这样的参数来表示变量。直接使用 translate时,这些参数会被忽略。想要让参数也显示为特定的文本,就需要使用元素 with

 with是一个列表,列表中的每一个元素都应该是原始JSON文本对象。列表内的元素将会这样分配给每个参数:

  • 对于“%s”而言,第一个“%s”会使用列表中的第一个元素,而下一个“%s”将会接着使用第二个元素,依次类推,直至不再出现“%s”。
  • 对于“%n$s”而言,其将会直接使用列表中的第n个元素。

我们用一个例子来说明这一切。

“translation.test.complex”是用于测试的翻译标识符,其在zh_cn.json里的原始值如下:

前缀,%s%2$s 然后是 %s 和 %1$s 最后是 %s 还有 %1$s!

如果只使用 translate元素,它看起来是这样的:

前缀, 然后是  和  最后是  还有 !

现在,我们用 with来给这些参数赋值:

{
  "translate":"translation.test.complex",
  "with":[
    "a",
	{"text":"b"},
	{"text":"c","color":"dark_red"}
	]
}

它看起来是这个样子的:

前缀,ab 然后是 b 和 a 最后是 c 还有 a!

原始值中的“%1$s”和“%2$s”都分别对应了第一个元素"a"和第二个元素{"text":"b"},而其中的“%s”按照从前往后的顺序分别被赋予了"a"{"text":"b"}{"text":"c","color":"dark_red"}

记分板分数:score

 score可以用于显示指定实体的记分项的分数。该元素是一个复合标签,值应该用花括号括起。

花括号内必须要有参数 name objective name是要显示分数的实体,其值可以为玩家名、实体选择器或“*”(选择阅读这段原始JSON文本的实体)。 objective是对应的记分项名。

{
  "score":{
  "name":"Jim",
  "objective":"dummy"
	}
}

这会显示Jim在记分项dummy上的分数。Jim并不一定需要在线,甚至不一定需要存在。如果Jim在dummy上没有分数,那么将什么都不会显示。

如果加入参数 value,那么无论记分板的分数如何,其都会显示 value的值。值得注意的是该参数是一个字符串,这意味着其可以显示为其他字符而不必是整数。

{
  "score":{
  "name":"Jim",
  "objective":"dummy",
  "value":"7"
	}
}

无论Jim在记分项dummy上的分数是多少,其永远只会显示“7”。

实体选择器:selector

 selector会显示所有被选中的实体的名称。其值为一个实体选择器。

下面的对象将会显示所有苦力怕的名称:

{
  "selector":"@e[type=creeper]"
}

如果选择到了多个实体,那么它将会以“实体A, 实体B, 实体C”的形式列举。

使用这种方法输出的文本可以通过⇧ Shift+左键获取对应实体的UUID。

按键键位:keybind

 keybind用于显示对应功能的按键,其可以因玩家的设定偏好而改变。

下面的对象将会显示代表打开物品栏的键位:

{
  "keybind":"key.inventory"
}

如果没有改变打开物品栏的键位,那么它将会显示默认键位E。但如果更改了键位,那么它会显示为改变后的打开物品栏的键位。

以下表格展示了所有可用值:

游戏内分类 游戏内描述 默认键位
移动 key.forward 向前移动 W
key.left 向左移动 A
key.right 向右移动 D
key.back 向后移动 S
key.sneak 潜行 ⇧ Shift
key.sprint 疾跑 ctrl
key.jump 跳跃 space
游戏内容 key.use 使用物品/放置方块 鼠标右键
key.attack 攻击/摧毁 鼠标左键
key.pickItem 选取方块 鼠标中键
物品栏 key.drop 丢弃所选物品 Q
key.swapHands 交换手中的物品 F
key.inventory 开启/关闭物品栏 E
key.hotbar.[1-9] 快捷栏[1-9] 1-9
创造模式 key.saveToolbarActivator 保存物品工具栏 C
key.loadToolbarActivator 加载物品工具栏 X
多人游戏 key.chat 打开聊天栏 T
key.playerlist 玩家列表 Tab ↹
key.command 输入命令 /
杂项 key.fullscreen 全屏显示切换 F11
key.smoothCamera 切换电影视角
key.togglePerspective 切换视角 F5
key.screenshot 截图 F2
key.advancements 进度 L
key.spectatorOutlines 高亮玩家(旁观者)

NBT标签的值:nbt

 nbt用于获取方块、实体或命令存储NBT标签的值,其以NBT路径的形式书写。

 block entity storage用于指定要获取标签的方块、实体或命令存储。

 block的值是一组方块坐标,以“<x> <y> <z>”的形式书写。其可以使用相对坐标,这时以生成文本的位置为基准点。

下面的对象将会显示执行者下面的方块的“Items”标签的值:

{
  "nbt":"Items",
  "block":"~ ~-1 ~"
}

 entity的值是目标选择器。如果选择到了多个实体,那么获取的值将会依次列举。

下面的对象将会显示最近玩家的“Health”标签的值:

{
  "nbt":"Health",
  "entity":"@p"
}

 storage的值是命名空间ID。

下面的对象将会显示存储test:a中“a”标签的值:

{
  "nbt":"a",
  "storage":"test:a"
}

 block entity storage只能使用其中的一个。若存在多个,则按以下优先级选择最终要使用的元素:

 block >  entity >  storage

将获取的值解析为原始JSON文本:interpret
HappyBirchSign

位于147 78 48处的“happy sign”。

 interpret是一个布尔值。当其为“true”时,由 nbt获取的值将会解析为原始JSON文本并显示。

假设在147 78 48处有一个白桦木告示牌,其“Text1”的值如下:

'{"italic":true,"color":"dark_red","text":"I am a happy sign XD"}'

如果直接使用 nbt获取标签的值,结果会直接输出为字符串,不会进行任何解析:

{"italic":true,"color":"dark_red","text":"I am a happy sign XD"}

但如果加入 interpret元素并将其设为“true”:

{
  "nbt":"Text1",
  "block":"147 78 48",
  "interpret":true
}

这会将获取到的值继续以原始JSON文本解析,效果:

I am a happy sign XD

文本显示元素的优先级

一个对象里必须要有一个文本显示元素,但如果存在多个文本显示元素,其将会按照优先级决定最终要使用的文本显示元素。

文本显示元素的优先级如下:

 text >  translate >  score >  selector >  keybind >  nbt

因此,对于下面这个元素:

{
  "nbt":"",
  "block":"0 0 0",
  "translate":"block.minecraft.stone",
  "selector":"@e[type=zombie]",
  "keybind":"key.inventory"
}

因为对象里所有的文本显示元素中 translate的优先级最高,所以输出的文本将使用元素 translate

与文本产生互动

我们可以与文本产生互动。

将特定文字填入聊天栏:insertion

 insertion元素可以让玩家按住⇧ Shift点击文字时,将特定的一串文字输入进玩家的聊天栏中。输入的文本不会替换聊天栏里原有的文本。该元素只有在使用/tellraw显示时才会有意义。

{
  "text":"155652",
  "insertion":"155652"
}

如果按住⇧ Shift点击文本,在玩家的聊天栏内将会输入“155652”。

点击文字时产生事件:clickEvent

 clickEvent可以用于指定在点击文本时产生的事件。该元素是一个复合标签,值应该用花括号括起。

花括号内必须要有参数 action value action是点击文本后执行的事件。 value是要执行的事件的值。

 action支持以下值:

 action的值 描述  value的值 可用性
open_url 打开网页 网页地址(http://example.com) 聊天、成书
run_command 发送命令 字符串 聊天、成书、告示牌
change_page 切换页码 正整数 成书
suggest_command 输入命令 字符串 聊天
copy_to_clipboard 复制内容至剪贴板 字符串 聊天、成书

悬浮在文字之上时显示说明提示:hoverEvent

 hoverEvent可以用于指定悬浮在文字上时产生的提示文本。该元素是一个复合标签,值应该用花括号括起。

花括号内必须要有参数 action value action是提示文本的类型。 value是提示文本的内容。

 action支持以下值:

 action的值 描述  value的值 备注
show_text 显示文字 原始JSON文本 如果要使用原始JSON文本对象,值必须为 复合标签
show_item 显示物品 {id:"",Count:,tag:{}}  value为字符串,里面的内容需要转义。
show_entity 显示实体 {type:"",id:"",name:"",tag:{}}  value为字符串,里面的内容需要转义。

原始JSON文本对象间的关系

你可以使用列表,并将多个原始JSON文本对象放入列表中。列表中的每个元素将会依次显示。

下面这个例子拥有2个对象:

[
  {
    "text": "Welcome to ",
    "color": "dark_red"
  },
  {
    "text": "Minecraft!",
    "color": "blue"
  }
]

效果:

Welcome to Minecraft!

父对象与子对象

在原始JSON文本对象列表中,第一个对象的样式将会影响所有后续的对象。因此,我们可以说第一个对象便是父对象,其余的对象都是子对象。

下面这个例子中,因为子对象继承了父对象的样式,所以整个文本都会采用深红色+下划线的样式:

[
  {
    "text": "Welcome to ",
    "color": "dark_red",
	"underlined": true
  },
  {
    "text": "Minecraft"
  },
  "!"
]

效果:

Welcome to Minecraft!

我们可以让第一个元素为空值,这样父对象就会没有样式,因此也不会有任何样式影响后续的文本:

[
  "",
  {
    "text": "Welcome to ",
    "color": "dark_red",
	"underlined": true
  },
  {
    "text": "Minecraft"
  },
  "!"
]

效果:

Welcome to Minecraft!

继承对象的属性:extra

 extra内的原始JSON文本将会继承该元素的所有属性。

{
    "text": "Welcome to ",
    "color": "dark_red",
	"underlined": true,
	"hoverEvent":{
	  "action":"show_text",
	  "value":{
	    "text":"Minecraft!"
	  }
	},
	"extra":[
	  {
	    "text":"Minecraft!"
	  }
	]
}

效果:

Welcome to Minecraft!

可以看到, extra内的{"text":"Minecraft!"}继承了原对象的 color underlined hoverEvent元素。

另见

Advertisement