多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 点击事件 `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分项处理。