点击事件

clickEvent是JSON最重要的功能之一。
其功能为:点击相关文字的时候执行某些操作。
提供了一个对输入(点击)产生反馈(action)的功能。

基本格式为:

"clickEvent":{"action":"<动作>","value":"<值>"}

将其放置在对象内使用(和样式类似,都是文本对象的一个属性,只是这属性比较复杂而已)

请注意,clickEvent不适用于标题及advancement的description。
告示牌的话最多只能设置4个,之后告示牌部分会有讲解。

而每个文本对象只能设置一个点击事件和悬浮事件,继承下来的事件会被覆盖。

advancement的title的clickEvent只能在聊天栏公告获得进度时点击,不能在进度面板点击

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"}}

18

由于run_command是使点击者执行命令,所以同一个命令由不同人点击,结果也不同
例如分别由SYL和Tester点击上面的命令:
19

在多人游戏时,需要注意一点,在tellraw命令、书本内使用CE时,如果点击者没有OP权限
那么是无法执行需要OP权限的命令的
例如say无法被普通玩家执行,那么如果在没有OP权限的情况点击文字:
20

如果是在告示牌内使用的话,则带有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}]}"}}

21

由于超过了长度上限,实际输入部分到逗号就终结了,命令并未完整,自然无法成功执行

如果是在告示牌内使用的话,则没有这个长度限制

suggest_command-建议命令

suggest_command,建议命令
其功能为点击时,将点击者输入栏中的内容替换value中设定的内容

格式

"clickEvent":{"action":"suggest_command","value":"<值>"}

例如:

tellraw @a {"text":"Hello World","clickEvent":{"action":"suggest_command","value":"hi"}}

22

open_url-打开链接

open_url,打开链接(一般是叫浏览器打开的,然而打开前会有一段警告询问玩家是否要打开未知链接)

基本格式为:

"clickEvent":{"action":"open_url","value":"<值>"}

值的部分必须填一个以http://https://开头的网址
按下去,系统就会询问是否打开网页,同意以后就会打开浏览器跳转至页面
例子:

tellraw @a {"text":"Hello World","clickEvent":{"action":"open_url","value":"http://www.google.com"}}

1

60

24

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.\"}"]}

30

按下以后:
31

悬浮事件

hoverevent是JSON的另一个实用功能
类似CE,HE也是一个反馈机制,不过这次是对鼠标移上文字时,这个动作进行反馈
简单来说就是鼠标移上去文字,会有个悬浮框显示一些信息

基本格式为:

"hoverEvent":{"action":"<动作>","value":"<值>"}

hoverevent不适用于标题advancement告示牌

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"}}

26

后者需求完整的JSON文本,但支援如样式代码等功能
例子:

tellraw @a {"text":"Hello World","hoverEvent":{"action":"show_text","value":{"text":"hello again","color":"gold"}}}

27

甚至是其他的JSON结构,例如:

tellraw @a {"text":"Hello World","hoverEvent":{"action":"show_text","value":{"score":{"name":"SYL_qiuyifeng","objective":"test"},"color":"gold"}}}

28

29

show_item-显示物品

显示物品,可以显示一个物品的信息
其效果与在背包内查看物品信息一致

格式为:

"hoverEvent":{"action":"show_item","value":"<物品NBT标签>"}

物品标签请参考之后的NBT教程
例子:(关于\",即转义的内容,请参阅相应章节)

tellraw @a {"text":"Hello World","hoverEvent":{"action":"show_item","value":"{id:\"minecraft:iron_pickaxe\"}"}}

N8

例子二:

tellraw @a {"text":"Hello World","hoverEvent":{"action":"show_item","value":"{id:\"minecraft:iron_pickaxe\",tag:{display:{Lore:[\"keep digging\"]}}}"}}

N7

show_entity-显示实体

show_entity,显示生物
此功能必须在玩家使用了F3+H打开了附加信息显示后才能运作

这个功能提供的显示,和运行命令/say @e或其他类似命令后
将鼠标移上去实体名称后显示的实体信息一致
效果如下:
34

基本格式为:

"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\"}}}

35

insertion-插入

insertion是一个单独的属性
其格式为:

"insertion":"<值>"

其功能为,shift+点击该JSON文本后,在聊天栏输入插入的内容
suggest_command不同,此操作并不会覆盖已有输入
而是在输入的最后添加

例子:

tellraw @a {"text":"Hello World","insertion":"|after click"}

25

before click是已经输入的内容,|after click是点击后插入的内容


即使知道了那么多的功能,如果JSON文本只能做到单一颜色,单一功能,还是比较单调啊。
不用怕!我们可以进行分项处理,一次过显示多个文本对象,显示不同的样式、类型以及事件。
接下来将会讲解JSON分项处理。

results matching ""

    No results matching ""