1 JSON文本实用手册
作者: 帅到掉渣的 sylqiuyifeng
本手册专注于JSON文本在游戏内的应用 (如/tellraw
, /title
, 成书
和告示牌
等)
其他的高级应用(如loottable
, advancement
等) 请参阅其他相关教程
2 JSON概观
2.1 简介
什么是JSON?引用术语来说
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript等)。 这些特性使JSON成为理想的数据交换语言
简单来说
JSON就是一种易于阅读以及交换信息的语言格式
2.2 格式
首先,JSON标准的格式为
"[名称]": [值]
值可以为一个数值,布尔值等
例如:
"Number":1
"Answer":true
对字符串来说,值需要被双引号括起来,即
"[名称]":"[值]"
例如:
"Name":"SYL"
如果是描述一个对象的话,把内容书写在花括号{}
中,以,
分隔内容
例如:
{"Name":"SYL","Gender":"Male"}
这里表达了名为SYL,性别为男的意思
如果是一个集合/数组,那么用[]
把对象括起来
例如:
{"CBL":[{"Name":"SYL","Gender":"Male"},{"Name":"Woody_Mo","Gender":"Male"}]}
这里描述了名为CBL的集合,包含了SYL和Woody_Mo这两个对象
3 JSON文本应用
在MC里面,目前用到JSON的地方有4个,/tellraw
,/title
,告示牌
和成书
,用于记录文字的样式和功能
比起传统的/say
,JSON可以自由编辑样式,甚至提供了交互功能,所以很适合作为信息输出/用户交互界面
其中最基本的概念是
每一段文字被视作为一个对象,由{}
括起来
对象内可设置"属性",决定了文字的内容,样式,功能等等
以下章节将一步步解释JSON在游戏内的应用
3.1 JSON文本基础
最基础的JSON文本结构可被分为3类:
text-文本
selector-选择符
score-分数
值得注意的是,这3类JSON结构在单个JSON文本(同一段文字)中只能设置一个
不然会互相覆盖,失去效果
3.1.1 text-文本
text可谓是游戏内最基本的JSON结构
功能十分简单,显示你指定的文字
最基本的格式为:
"text":"[文本内容]"
例如:
/tellraw @a {"text":"Hello World"}
顺带一提,在内容中插入\n
可以让文字换行(只限于成书
和tellraw
)
例如:
/tellraw @a {"text":"Hello\nWorld"}
3.1.2 selector-目标选择器
selector的作用如同在命令中使用的目标选择器,格式一致
基本格式为
"selector":"[选择符]"
选择符就如平时使用一般输入就可以了
例如:
/tellraw @a {"selector":"@p"}
如果世界内只有我和一只名为GGG的猪:
/tellraw @a {"selector":"@e"}
值得注意的是,选择器参数(即跟随在选择符后的[]部分)也可使用:
/tellraw @a {"selector":"@e[type=Pig]"}
3.1.3 score-分数
score用于显示特定目标的特定分数
格式为:
"score":{"name":"[对象名]","objective":"[分数名]"}
对象名
即为需要选中的对象,如指定玩家名称
分数名
就是来自哪一个分数
例如我们创建了一个名为test
的分数,有两个玩家在上面:
输入:
/tellraw @a {"score":{"name":"Tester","objective":"test"}}
name
支持选择符(但不能为多选,如@a
),我们放置了一个命令方块,并让SYL接近他
输入:
/tellraw @a {"score":{"name":"@p","objective":"test"}}
score
在/tellraw
还有一个特殊功能,name
部分输入*
的话
那么观察者自己将会作为对象
例如:
/tellraw @a {"score":{"name":"*","objective":"test"}}
SYL的视角:
Tester的视角:
3.1.4 translate-翻译文件(不常用)
translate其实就是在文本JSON里引用翻译文件的文字,格式为:
"translate":"翻译识别器"
,如"translate":"chat.link.warning"
然而翻译文件的文字可以有参数,这个时候我们就可以用with来传入参数,格式为:
"with":[参数字串列表]
,如"with":["a","b"]
translate的用处在玄素的帖子: http://www.mcbbs.net/thread-648470-1-1.html 里已经有很详细的描述了,所以大家如果有兴趣的话可以参考她的帖子。
不过倒是可以说一句,就是translate大多用作翻译(这不是废话么)和检测资源包这两方面,详情可以参考玄素的帖子,这里就不多说了。
3.2 样式代码
样式代码即为帮文字添加样式的代码
例如加粗,斜体,颜色等等
同时,样式代码不像text
/selector
/score
并不能重复
可以使用多个代码,以达成多种效果叠加
3.2.1 color-颜色
color代码,就是帮文字添加颜色的代码
基本格式为:
"color":"[颜色代码]"
实际使用时,添加在基本结构后方,使用,
分隔即可
所有的样式代码都是如此使用的,可以添加多于一个样式代码
例如:
/tellraw @a {"text":"Hello World","color":"dark_blue"}
3.2.2 bold-加粗
bold,加粗文字
基本格式:
"bold":true
如果是"bold":false
的话,文字就不会加粗
将样式代码设置为false的用途主要体现在extra-分项
/JSON array
中,后续将有说明
使用例子:
/tellraw @a {"text":"Hello World","bold":true}
如果是想搭配其他样式代码,如颜色使用的话:
/tellraw @a {"text":"Hello World","bold":true,"color":"dark_red"}
请注意,样式代码的先后顺序并无影响
其他样式代码同理,不再作示范
3.2.3 italic-斜体
italic,斜体
基本格式:
"italic":true
使用例子:
/tellraw @a {"text":"Hello World","italic":true}
3.2.4 underlined-下划线
underlined,下划线
基本格式:
"underlined":true
使用例子:
/tellraw @a {"text":"Hello World","underlined":true}
3.2.5 strikethrough-删除线
strikethrough,删除线
基本格式:
"strikethrough":true
使用例子:
/tellraw @a {"text":"Hello World","strikethrough":true}
3.2.6 obfuscated-混淆文字
obfuscated,混淆文字
这个是一个特别的样式代码
生效条件是文本内容必须为英文
效果为不断跳动变换的乱码文字
基本格式:
"obfuscated":true
使用例子:
/tellraw @a {"text":"Hello World","obfuscated":true}
请自行脑补跳动效果
如果不是英文的话不会起效,例如:
/tellraw @a {"text":"世界你好","obfuscated":true}
3.3 点击事件
clickEvent
是JSON最重要的功能之一
其功能为:点击相关文字的时候执行某些操作
提供了一个对输入(点击)产生反馈(action)的功能
基本格式为:
"clickEvent":{"action":"[动作]","value":"[值]"}
将其放置在JSON文本内使用
请注意,clickEvent
不适用于标题,在告示牌
的话最多只能设置4个,之后告示牌
部分会有讲解
3.3.1 run_command-运行命令
run_command是一个十分常用的动作
其功能为让点击者执行设定的命令
基本格式为:
"clickEvent":{"action":"run_command","value":"[需执行命令]"}
并且CE(clickevent的简称)可以和样式代码一起使用
例如:
/tellraw @a {"text":"Hello World","color":"dark_red","clickEvent":{"action":"run_command","value":"/say hi"}}
由于run_command是使点击者执行命令,所以同一个命令由不同人点击,结果也不同
例如分别由SYL和Tester点击上面的命令:
在多人游戏时,需要注意一点,在/tellraw
使用CE时,如果点击者没有OP权限
那么是无法执行需要OP权限的命令的
例如/say
无法被普通玩家执行,那么如果在没有OP权限的情况点击文字:
但是如果是在告示牌
内使用的话,因为是视作告示牌执行命令,而告示牌带有2级OP权限,所以普通玩家也可以右键告示牌
执行命令
另一点就是,value
里面的命令长度不能太长
因为命令是视作在聊天栏输入之后按enter执行的
所以不能超越聊天栏的输入上限:256个字符
例如我使用以下/summon
命令:
(本例子为旧版本例子,当时输入上限为100个字符,所以此命令在新版本中可用,但若超出256个字符的话依旧会出现问题)
/tellraw @a {"text":"Hello World","color":"dark_red","clickEvent":{"action":"run_command","value":"/summon minecraft:creeper ~ ~ ~ {powered:1,ExplosionRadius:5,Attributes:[{Name:generic.movementSpeed,Base:0}],ActiveEffects:[{Ambient:1,Amplifier:0,Duration:999999999,Id:11}]}"}}
由于超过了长度上限,实际输入部分到逗号就终结了,命令并未完整,自然无法成功执行
3.3.2 suggest_command-建议命令
suggest_command
,建议命令
其功能为点击时,将点击者输入栏中的内容替换为value
中设定的内容
格式
"clickEvent":{"action":"suggest_command","value":"[值]"}
例如:
/tellraw @a {"text":"Hello World","clickEvent":{"action":"suggest_command","value":"hi"}}
3.3.3 open_url-打开链接
open_url,
基本格式为:
"clickEvent":{"action":"open_url","value":"[值]"}
值的部分必须填一个以http://
开头的网址
按下去,系统就会询问是否打开网页,同意以后就会打开浏览器跳转至页面
例子:
/tellraw @a {"text":"Hello World","clickEvent":{"action":"open_url","value":"http://www.google.com"}}
3.3.4 change_page-换页
此CE为成书
专用的CE
成书
的格式容后讲解
基本格式为:
"clickEvent":{"action":"change_page","value":"[值]"}
值
就是要跳到的页数
例如:(成书
的格式请参阅后面相关篇章)
/give @a minecraft:written_book 1 0 {title:"",author:"",pages:["{\"text\":\"Page 2\",\"clickEvent\":{\"action\":\"change_page\",\"value\":\"2\"}}","{\"text\":\"The second page.\"}"]}
按下以后:
3.4 悬浮事件
hoverevent
是JSON的另一个实用功能
类似CE,HE也是一个反馈机制,不过这次是对鼠标移上文字时,这个动作进行反馈
简单来说就是鼠标移上去文字,会有个悬浮框显示一些信息
基本格式为:
"hoverEvent":{"action":"[动作]","value":"[值]"}
当然,hoverevent
不适用于标题
和告示牌
3.4.1 show_text-显示文本
show_text,显示文本
功能自然为显示文字
基本格式为:
"hoverEvent":{"action":"show_text","value":"[值]"}
或者
"hoverEvent":{"action":"show_text","value":{JSON文本}}
前者使用上比较方便简单,但不支持如样式等设定
使用例子:
/tellraw @a {"text":"Hello World","hoverEvent":{"action":"show_text","value":"hello again"}}
后者需求完整的JSON文本,但支援如样式代码等功能
例子:
/tellraw @a {"text":"Hello World","hoverEvent":{"action":"show_text","value":{"text":"hello again","color":"gold"}}}
甚至是其他的JSON结构,例如:
/tellraw @a {"text":"Hello World","hoverEvent":{"action":"show_text","value":{"score":{"name":"SYL_qiuyifeng","objective":"test"},"color":"gold"}}}
3.4.2 show_item-显示物品
显示物品,可以显示一个物品的信息
其效果与在背包内查看物品信息一致
格式为:
"hoverEvent":{"action":"show_item","value":"[物品NBT标签]"}
物品标签请参考相关NBT教程
例子:(关于\",即转义的内容,请参阅相应章节)
/tellraw @a {"text":"Hello World","hoverEvent":{"action":"show_item","value":"{id:\"minecraft:iron_pickaxe\"}"}}
例子二:
/tellraw @a {"text":"Hello World","hoverEvent":{"action":"show_item","value":"{id:\"minecraft:iron_pickaxe\",tag:{display:{Lore:[\"keep digging\"]}}}"}}
3.4.3 show_entity-显示实体
show_entity,显示生物
此功能必须在玩家使用了F3+H打开了附加信息显示后才能运作
这个功能提供的显示,和运行命令/say @e
或其他类似命令后
将鼠标移上去实体名称后显示的实体信息一致
效果如下:
基本格式为:
"hoverEvent":{"action":"show_entity","value":"{name:\"[名称]\",type:\"[生物ID]\",id:\"[UUID/文本]\"}"}
其中name
就是最上面显示的名字
type
就是生物id
id
呢,原意是用于显示UUID
的,但也可用作一般文本显示
例如:
/tellraw @a {"text":"Pig","hoverEvent":{"action":"show_entity","value":{\"type\":\"Pig\",\"name\":\"Bacon\",\"id\":\"Walking Bacon\"}}}
3.4.4 show_achievement-显示成就
1.12的advancement取代了achievement,此部分尚未知道如何改动,容后更新
show_achievement,显示成就
显示系统预定义好的成就或者统计
即在你达成成就的时候,将鼠标移上去系统提示中的成就名称,所得到的效果
基本格式为:
"hoverEvent":{"action":"show_achievement","value":"[值]"}
value
中,支援成就和统计信息
分别以achievement.[成就ID]
和stat.[统计ID]
的形式出现
相关ID请查阅英文WIKI
例如:
/tellraw @a {"text":"[Pig Fly]","hoverEvent":{"action":"show_achievement","value":"achievement.flyPig"}}
/tellraw @a {"text":"[Games quit]","hoverEvent":{"action":"show_achievement","value":"stat.leaveGame"}}
3.5 分项与数组
extra-分项
以及JSON array-JSON数组
提供了让多个不同的JSON文本同时存在的可能性
例如想让一条/tellraw
命令中使用多个不同样式的对象,或者是组合多个JSON结构时使用
同时它们在告示牌
和成书
之中也有重要的角色
并且继承
的特性有时能让一些样式上的设定变得方便
3.5.1 基础
extra-分项是一个附加在JSON文本中的数组对象
其格式为
extra:[{[JSON文本1]},{[JSON文本2]},......]
而JSON array则是由[]
包围的JSON文本,在需求JSON文本的命令/NBT中,可以直接使用[]
输入一个JSON数组,取代使用{}
来输入单一对象
使用一个简单的例子:
/tellraw @a {"text":"Hello World"}
最基础的一条/tellraw
命令也可以分别以extra
和array
的形式重写
array:
/tellraw @a [{"text":"Hello"},{"text":" World"}]
或者
/tellraw @a ["Hello"," World"]
(在array中,可以用双引号直接取代简单的text
对象,可以和完整的JSON文本混合使用)
extra:
/tellraw @a {"text":"Hello","extra":[{"text":" World"}]}
三者效果是完全一样的
extra内也可以添加多个JSON文本
例如:
/tellraw @a {"text":"Hello","extra":[{"text":" Minecraft"},{"text":" World"}]}
不过由于extra
和array
的效果和特性基本一致,出于array
比extra
使用上方便一点,以及格式上比较方便阅读和美观,个人推荐尽量使用array
3.5.2 应用
extra及array最大的应用,就是可以分别设置每一个JSON文本的属性
例如:
array:
/tellraw @a [{"text":"Hello","color":"red"},{"text":" Minecraft","color":"green"},{"text":" World","color":"blue"}]
extra:
/tellraw @a {"text":"Hello","color":"red","extra":[{"text":" Minecraft","color":"green"},{"text":" World","color":"blue"}]}
不仅仅是颜色之类的样式代码,还可以是CE和HE
例如:
array:
/tellraw @a [{"text":"Hello","color":"red"},{"text":" Minecraft","color":"green","clickEvent":{"action":"run_command","value":"/say Minecraft"}},{"text":" World","color":"blue","hoverEvent":{"action":"show_text","value":"World"}}]
extra:
/tellraw @a {"text":"Hello","color":"red","extra":[{"text":" Minecraft","color":"green","clickEvent":{"action":"run_command","value":"/say Minecraft"}},{"text":" World","color":"blue","hoverEvent":{"action":"show_text","value":"World"}}]}
由于命令比较长,下面将会把命令分解出来说明
这条/tellraw
命令分别有3个JSON文本:
第一个JSON文本(array内首个对象,或者是带有extra列表的那个对象),我们可称之为主项:
{"text":"Hello","color":red}
其设定为红色的"Hello"第二个对象:
{"text":" Minecraft","color":"green","clickEvent":{"action":"run_command","value":"/say Minecraft"}}
其设定为绿色的" Minecraft",点击执行/say Minecraft
第三个对象:
{"text":" World","color":"blue","hoverEvent":{"action":"show_text","value":"World"}}
其设定为蓝色的" World",悬浮时显示"World"
效果就会是:
不仅如此,它们还可以设置不同结构的JSON(例如组合text,score和selector)
例如:
array:
/tellraw @a [{"text":"Nearest Player:"},{"selector":"@p"}]
extra:
/tellraw @a {"text":"Nearest Player:","extra":[{"selector":"@p"}]}
这里有两个对象:
主项的文本:
"Nearest Player:"
和第二项的
@p
选择符
效果就是:
3.5.3 继承
extra
和array
都拥有继承的特性
所有分项
(array里面首个之后的对象/extra列表里面的所有对象)都会继承到主项
(array里面首个对象/带有extra列表的那个对象)的设定
举个例子帮助理解:
array:
/tellraw @a [{"text":"Hello","bold":true},{"text":" World"}]
extra:
/tellraw @a {"text":"Hello","bold":true,"extra":[{"text":" World"}]}
在本例中,只有主项设置了bold
属性,但是由于继承的特性,分项也同时拥有了粗体的样式
但是反之,分项的设定并不会影响主项,例如:
array:
/tellraw @a [{"text":"Hello"},{"text":" World","bold":true}]
extra:
/tellraw @a {"text":"Hello","bold":true,"extra":[{"text":" World","bold":true}]}
同时,分项之间并不会互相影响,并且继承而来的属性可以被覆盖
例如:
array:
/tellraw @a [{"text":"Hello","bold":true},{"text":" Minecraft","color":"green"},{"text":" World","bold":false}]
extra:
/tellraw @a {"text":"Hello","bold":true,"extra":[{"text":" Minecraft","color":"green"},{"text":" World","bold":false}]}
详细分析一下以上的命令,以上的/tellraw
拥有三个对象
主项为"Hello",拥有
bold
属性第二项" Minecraft",继承了
bold
属性,并且设定了颜色为绿色第三项" World",虽然应该继承主项的
bold
属性,但是bold:false
设定覆盖了继承而来的属性,同时也不受第二项的颜色属性影响
虽然本节没有使用CE/HE作为例子,但它们也是可以如同样式代码
一样被继承的,规则相同
如果有时需要设定一段格式差异较大的JSON文本,例如只想将第一段文字设定为粗体,其他都不要,那么后面的文本是不是都要设定bold:false
这么麻烦?
一个方便的做法为,将主项设置为空项,例如:
array:
/tellraw @a ["",{"text":"Hello","bold":true},{"text":" Minecraft","color":"green"},{"text":" World","italic":true}]
extra:
/tellraw @a {"text":"","extra":[{"text":"Hello","bold":true},{"text":" Minecraft","color":"green"},{"text":" World","italic":true}]}
这样即可确保每一个JSON文本的独立性,减少互相干扰
3.6 转义
转义是JSON应用中十分重要的课题
转义是指,有时候为了能让系统正确配对双引号"
(例如在引号部分内使用引号),我们需要用\
标示里面的双引号,变成\"
比如需要输出"Hello World"
,我使用了以下命令:
/tellraw @a {"text":""Hello World""}
但由于配对的问题,标识值
部分的引号和内容所需的引号配对了,系统无法正确识别命令,导致无法执行
JSON规定的转义方式为,将"
转为\"
,将\
转为\\
正确的命令为:
/tellraw @a {"text":"\"Hello World\""}
这样我们便能告知系统,"Hello World"
的引号和包围值
的引号如何正确配对
然后是需要更多转义的例子
例如我们需要修改以下命令:
/tellraw @a {"text":"Hello World","clickEvent":{"action":"run_command","value":"/tellraw @a {\"text\":\"Hello World\"}"}}
这是一个包含了CE的/tellraw
,点击会再次输出Hello World
如果我们需要修改成输出"Hello World"
,我们便需要在已经转义一次的引号内再加入一对引号
按照正确的转义方式,命令将修改为:
/tellraw @a {"text":"Hello World","clickEvent":{"action":"run_command","value":"/tellraw @a {\"text\":\"\\\"Hello World\\\"\"}"}}
需要注意,因为第二次转义,\
也需要被转义,所以正确的写法为\\\"
而非\\"
,三次转义为\\\\\\\"
,如此类推
最后需要提醒的一点是,并非一见到引号内的引号就需要额外转义多一次
而是需要小心分辨他们是否处于同一层次
例如我要输出""Hello World""
使用:
/tellraw @a {"text":"\"\\\"Hello World\\\"\""}
将会造成错误的输出
正确的写法应为:
/tellraw @a {"text":"\"\"Hello World\"\""}
3.7 告示牌
告示牌
支持使用JSON文本定义上面的文字,并且有三种指令可以自定义告示牌,分别为/give
(获得物品形式的告示牌
),/setblock
(直接放置),和/blockdata
(修改已有告示牌
)
格式分别为:
/give @p sign 1 0 {BlockEntityTag:{NBT}}
/setblock [x] [y] [z] minecraft:standing_sign/minecraft:wall_sign [数据值] [旧方块处理方式] {NBT}
/blockdata [x] [y] [z] {NBT}
其中告示牌
的NBT
格式如下:
{Text1:"{JSON文本}",Text2:"{JSON文本}",Text3:"{JSON文本}",Text4:"{JSON文本}"}
Text1/2/3/4
分别代表牌子的每一行的内容(在使用/entitydata
时,如果相关行内容不需编辑,可以不写相关行数的NBT)
请注意,由于Text1/2/3/4
本身不是JSON文本,而是NBT
,所以无需使用双引号包围,并且由于JSON文本被双引号包围,请注意里面引号需要转义
例子:
/blockdata ~ ~1 ~ {Text1:"{\"text\":\"Hello World\",\"bold\":true,\"color\":\"dark_green\"}",Text2:"{\"selector\":\"@p\"}"}
如需在同一行内使用多于一个JSON文本,请使用JSON array
或extra
例子:
/blockdata ~ ~1 ~ {Text1:"[\"\",{\"text\":\"Hello\",\"color\":\"green\"},{\"text\":\" World\",\"color\":\"red\"}]"}
最后是CE在牌子的应用
牌子的每一行都可以设置一个CE,即一个牌子最多可设置4个CE
但每一行的CE只能设置在主项,设置在分项的CE是无效的
例如:
/blockdata ~ ~1 ~ {Text1:"{\"text\":\"say 1\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/say 1\"}}",Text2:"{\"text\":\"say 2\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/say 2\"}}"}
值得注意的事项是
玩家右键点击牌子时执行命令,命令的执行坐标以牌子所处位置为起始点 (情况类似与/execute [点击者] [告示牌坐标] [命令])
所以当涉及到选择符的命令,例如
/say @e[c=2]
,这个命令将会以牌子为选择实体的起始点,这个情况下会选中距离牌子最近的两个实体而同样的,使用了相对坐标,例如
/setblock ~ ~ ~ minecraft:stone
,则会以牌子作为相对坐标的起始点,这个情况下会将牌子替换为石头特别注意,Mojang似乎对
c=1
这个选择器参数做出了特别处理,该参数无论如何都会选中点击者,如/say @e[c=1]
必定会选中点击者,不管中间有多少实体距离告示牌
比点击者更近
亦请注意,于1.12以后的版本,由于NBT语法分析器的改动,若需要在牌子中使用unicode-万国码
,即\u
,需要对其反斜杠进行转义,即写成\\u
的形式
3.8 成书
成书亦支持使用JSON文本定义书本的内容,获得方式只有一个,使用/give
命令
格式为:
/give @p written_book [数量] 0 {pages:["{JSON文本}","{JSON文本}",......],title:"[成书名称]",author:"[作者]"}
数量
,成书名称
和作者
不多作解释,而!(list)[list]pages
这个NBT 里面的每一个JSON文本都代表一页的内容
例如:
/give @p written_book 1 0 {pages:["{\"text\":\"page 1\"}","{\"text\":\"page 2\"}"],title:"Book",author:"SYL"}
如需在一页内使用多个JSON文本,自然需要使用JSON array
并且成书
也支援CE和HE
例如:
/give @p written_book 1 0 {pages:["[\"\",{\"text\":\"say hi\",\"underlined\":true,\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/say hi\"}},{\"text\":\"\nhello\",\"bold\":true,\"hoverEvent\":{\"action\":\"show_text\",\"value\":\"world\"}}]"],title:"Book",author:"SYL"}
分解以上命令说明
主项为
\"\"
,即空白的主项第二项为"say hi",点击后让玩家执行
/say hi
第三项为"\nhello",悬浮在文字上显示
world
需要注意的是,第三项内容前有
\n
换行符,所以它将在第二行显示
最终效果为:
点击say hi
请注意,于1.12以后的版本,由于NBT语法分析器的改动,若需要在牌子中使用unicode-万国码
或换行符
,即\u
和\n
,需要对其反斜杠进行转义,即写成\\u
以及\\n
的形式
以上命令若需在1.12后使用,请使用以下版本:
/give @p written_book 1 0 {pages:["[\"\",{\"text\":\"say hi\",\"underlined\":true,\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/say hi\"}},{\"text\":\"\\nhello\",\"bold\":true,\"hoverEvent\":{\"action\":\"show_text\",\"value\":\"world\"}}]"],title:"Book",author:"SYL"}
3.9 杂项
本部分将收纳应用方面的补充说明,他们可能是难以归纳进以上架构或者是平日甚少使用,所以收纳于此部分
3.9.1 unicode-万国码
JSON支援显示Unicode,格式为:
\u####
####
就是4个位的Unicode代码,具体请参考Unicode代码的网页
不过MC字库并不保证所有的Unicode都能正常显示
使用例子:
/tellraw @a {"text":"\u2622"}
/tellraw @a {"text":"\u2622\u269B"}
3.9.2 insertion-插入
insertion是一个单独的属性
其格式为:
"insertion":"[值]"
其功能为,shift+点击该JSON文本后,在聊天栏输入插入值的内容
和
suggest_command`不同,此操作并不会覆盖已有输入
而是在输入的最后添加
例子:
/tellraw @a {"text":"Hello World","insertion":"|after click"}
before click
是已经输入的内容,|after click
是点击后插入的内容