# 点击事件
`clickEvent`是JSON最重要的功能之一
其功能为:点击相关文字的时候执行某些操作
提供了一个对输入(点击)产生反馈(action)的功能
基本格式为:
```
"clickEvent":{"action":"[动作]","value":"[值]"}
```
将其放置在对象内使用(和样式类似,都是文本对象的一个**属性**,只是这属性比较复杂而已)
请注意,`clickEvent`不适用于标题及`advancement`,在**告示牌**的话最多只能设置4个,之后**告示牌**部分会有讲解
## 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](https://box.kancloud.cn/25be9533dca547a616dae9f97f3b9576_648x37.png)
由于run_command是使点击者执行命令,所以同一个命令由不同人点击,结果也不同
例如分别由SYL和Tester点击上面的命令:
![19](https://box.kancloud.cn/1cc95b2355c1ff68de690140c2e88866_648x55.png)
在多人游戏时,需要注意一点,在`tellraw`命令、书本内使用CE时,如果点击者没有OP权限
那么是无法执行需要OP权限的命令的
例如`/say`无法被普通玩家执行,那么如果在没有OP权限的情况点击文字:
![20](https://box.kancloud.cn/18251151c90008cba8521f71180c9530_326x37.png)
> 如果是在**告示牌**内使用的话,则带有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](https://box.kancloud.cn/e63ee9d212c128738ade683dd5a104ff_552x55.png)
由于超过了长度上限,实际输入部分到逗号就终结了,命令并未完整,自然无法成功执行
> 如果是在**告示牌**内使用的话,则没有这个长度限制
## suggest_command-建议命令
`suggest_command`,建议命令
其功能为点击时,将点击者输入栏中的内容**替换**为`value`中设定的内容
格式
```
"clickEvent":{"action":"suggest_command","value":"[值]"}
```
例如:
```
/tellraw @a {"text":"Hello World","clickEvent":{"action":"suggest_command","value":"hi"}}
```
![22](https://box.kancloud.cn/f46d226bad2d48da81171b6179aaa4c5_846x70.png)
## open_url-打开链接
open_url,打开链接(一般是叫浏览器打开的,然而打开前会有一段警告询问玩家是否要打开未知链接)
基本格式为:
```
"clickEvent":{"action":"open_url","value":"[值]"}
```
值的部分必须填一个以`http://`开头的网址
按下去,系统就会询问是否打开网页,同意以后就会打开浏览器跳转至页面
例子:
```
/tellraw @a {"text":"Hello World","clickEvent":{"action":"open_url","value":"http://www.google.com"}}
```
![1](https://box.kancloud.cn/1b5b72c53fb3af46db42fe8a2d1d613e_648x18.png)
![60](https://box.kancloud.cn/28be571906ca6b1d0d7f854524b0e8c6_854x480.png)
![24](https://box.kancloud.cn/51d3dc1fb48c4f7b6c74706087364d94_869x516.png)
## 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](https://box.kancloud.cn/dc0900c75385945fdfcb559f6c96ec66_292x360.png)
按下以后:
![31](https://box.kancloud.cn/c3390aefe6d16974f272584022bb9d6a_292x360.png)
# 悬浮事件
`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](https://box.kancloud.cn/432abfa03cd821972d1e12ff65ea8e5c_648x40.png)
后者需求完整的JSON文本,但支援如样式代码等功能
例子:
```
/tellraw @a {"text":"Hello World","hoverEvent":{"action":"show_text","value":{"text":"hello again","color":"gold"}}}
```
![27](https://box.kancloud.cn/8c3d95ec41395397433c5d59c23372f9_648x40.png)
甚至是其他的JSON结构,例如:
```
/tellraw @a {"text":"Hello World","hoverEvent":{"action":"show_text","value":{"score":{"name":"SYL_qiuyifeng","objective":"test"},"color":"gold"}}}
```
![28](https://box.kancloud.cn/1809129c825b59ad89aa624175d8191c_132x38.png)
![29](https://box.kancloud.cn/8bffbf9fd8566a2c6495f88006142e02_648x44.png)
## show_item-显示物品
显示物品,可以显示一个物品的信息
其效果与在背包内查看物品信息一致
格式为:
```
"hoverEvent":{"action":"show_item","value":"[物品NBT标签]"}
```
物品标签请参考之后的NBT教程
例子:(关于\",即转义的内容,请参阅相应章节)
```
/tellraw @a {"text":"Hello World","hoverEvent":{"action":"show_item","value":"{id:\"minecraft:iron_pickaxe\"}"}}
```
![N8](https://box.kancloud.cn/4ab224b84724e941b117da2b24a131e9_710x139.png)
例子二:
```
/tellraw @a {"text":"Hello World","hoverEvent":{"action":"show_item","value":"{id:\"minecraft:iron_pickaxe\",tag:{display:{Lore:[\"keep digging\"]}}}"}}
```
![N7](https://box.kancloud.cn/9a2838ca6e953fb4c726d45d01300e00_648x176.png)
## show_entity-显示实体
show_entity,显示生物
此功能必须在玩家使用了F3+H打开了附加信息显示后才能运作
这个功能提供的显示,和运行命令`/say @e`或其他类似命令后
将鼠标移上去实体名称后显示的实体信息一致
效果如下:
![34](https://box.kancloud.cn/b1f0fed34b70aa7dcc7cd61e39c1e520_656x76.png)
基本格式为:
```
"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](https://box.kancloud.cn/437acb4aeac5af1d0969923fdaff989c_648x76.png)
# insertion-插入
insertion是一个单独的属性
其格式为:
```
"insertion":"[值]"
```
其功能为,shift+点击该JSON文本后,在聊天栏输入插入`值`的内容
和`suggest_command`不同,此操作并**不会覆盖**已有输入
而是在输入的最后添加
例子:
```
/tellraw @a {"text":"Hello World","insertion":"|after click"}
```
![25](https://box.kancloud.cn/84b1afa2a245daeecd017585ae389557_846x70.png)
`before click`是已经输入的内容,`|after click`是点击后插入的内容
-----
即使知道了那么多的功能,如果JSON文本只能做到单一颜色,单一功能,还是比较单调啊。
不用怕!我们可以进行分项处理,一次过显示多个JSON对象,显示不同的样式、类型以及事件。
接下来将会讲解JSON分项处理。