# 點擊事件
`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分項處理。