# 点击事件
`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"}}
```

由于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}]}"}}
```

由于超过了长度上限,实际输入部分到逗号就终结了,命令并未完整,自然无法成功执行
> 如果是在**告示牌**内使用的话,则没有这个长度限制
## suggest_command-建议命令
`suggest_command`,建议命令
其功能为点击时,将点击者输入栏中的内容**替换**为`value`中设定的内容
格式
```
"clickEvent":{"action":"suggest_command","value":"[值]"}
```
例如:
```
/tellraw @a {"text":"Hello World","clickEvent":{"action":"suggest_command","value":"hi"}}
```

## open_url-打开链接
open_url,打开链接(一般是叫浏览器打开的,然而打开前会有一段警告询问玩家是否要打开未知链接)
基本格式为:
```
"clickEvent":{"action":"open_url","value":"[值]"}
```
值的部分必须填一个以`http://`开头的网址
按下去,系统就会询问是否打开网页,同意以后就会打开浏览器跳转至页面
例子:
```
/tellraw @a {"text":"Hello World","clickEvent":{"action":"open_url","value":"http://www.google.com"}}
```



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

按下以后:

# 悬浮事件
`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"}}
```

后者需求完整的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"}}}
```


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

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

# insertion-插入
insertion是一个单独的属性
其格式为:
```
"insertion":"[值]"
```
其功能为,shift+点击该JSON文本后,在聊天栏输入插入`值`的内容
和`suggest_command`不同,此操作并**不会覆盖**已有输入
而是在输入的最后添加
例子:
```
/tellraw @a {"text":"Hello World","insertion":"|after click"}
```

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