第一百二十五章 玩家与JSON的交互事件 上
看,这是一段JSON文本输出的文字。
只不过这段文字就是一段文字,你无法操控它,或者是它操控你(???)。
如果你真的可以点击这段文字并产生一些作用,比如打开了一个新的网站,你点击文字的做法,就叫做你与文本的“交互事件”。
在JSON文本中,专门管理玩家与JSON文本的交互事件元素统称为“交互事件”。
下面,我们就来研究研究,这些交互事件元素,到底该怎么用。
第一个:insertion。
第一个也就是最简单的一个。insertion的作用就是当玩家按住Shift并点击insertion所在对象显示的文字时,游戏就会自动将insertion的值填入聊天框中,且并不会覆盖已在聊天框输入的文字,比如:
{“text“:“按住Shift点击有惊喜“,“insertion“:“惊喜!“}
运行之后你就会发现输出了:
按住Shift点击有惊喜
这样一段普普通通的消息。但如果你点击T键打开消息界面,并按住Shift点击文字,你就会发现聊天栏自动输入了:“惊喜!”二字。
这就是insertion的用法,是不是特别简单?
只不过该元素只有出现在聊天栏时,比如使用tellraw执行才有意义,你直接写在告示牌或者是书里是没有任何用处的。
然后第二个:clickEvent
clickEvent元素的作用就是当玩家点击文字(注意没有按Shift,是直接点击的那种)所产生的事情。所以clickEvent从该层面上来讲就和超链接很类似了(自信点,把“类似”去掉)。
既然是超链接,这让你想到了什么?
首当其冲的肯定就是打开网址,没错,clickEvent确实可以实现。
然后呢?然后我们就不要再联想了,直接看看clickEvent到底该怎么用吧。
clickEvent元素的值是一个对象,即:
{“clickEvent“:{}}
在clickEvent值里面有两个参数:
action和value。
这两个参数都是必须填的,其中action为设置点击后会产生什么样的事情,value就是点击产生的事情所需要的值。
action有六种事件:
obr /en_url——使用系统默认浏览器打开value的网址
obr /en_file——打开位于value路径的文件
run_command——运行value中的指令
suggest_command——打开聊天栏并输入value里的值,会覆盖原本输入的消息
change_br /age——翻页到value页
cobr /y_to_clibr /board——将value里的值复制到粘贴板
obr /en_url是最常用的事件,当玩家点击的时候游戏会跳出一个界面:
你确定你要打开以下网页?
然后下面还有一行粉红色的字:
永远不要打开从你不信任的人得到的链接!
接着就是三个选项:是、复制到剪贴板、否
如果选是,那么游戏将会使用默认浏览器打开;如果选复制到剪贴板,将会真的复制到你的剪贴板,只不过网页需要你自己打开浏览器复制进去;如果选否,那么恭喜你,啥也不会发生,只不过界面被关掉了而已。
那么如果我们要点击的时候打开百度搜索首页该怎么办?
很简单:
{“text“:“百度搜索“,“clickEvent“:{“action“:“obr /en_url“,“value“:“
运行,点击一下“百度搜索”再点击“是”你就发现你打开了百度。
等等,这样子做的话,那么我们是不是可以在服务器里做出一个网址大全?
嗯,一个很不错的想法,可惜你的想法早在1999年就被李兴平想到了,只不过鉴于你是在服务器里做的网址大全.......或许会因为其特殊性吸引更多的用户?
然后是第二个:obr /en_file
obr /en_file和obr /en_url类似,只不过obr /en_url是打开网上的网址,而obr /en_file是打开本地的文件,比如:
{“text“:“你猜猜这有什么用“,“clickEvent“:{“action“:“obr /en_file“,“value“:“C:\\“}}
点击就可以打开C盘.......?为什么不能打开?
为什么呢?
我们找到Minecraft WIKI,会发现上面说了一句话:“
且出于安全原因禁止玩家使用。”
原来如此!Mojang竟然考虑得如此周到!不愧是Mojang!
所以obr /en_file无法在游戏里运行,但是在游戏外,比如你开发的mod,就可以运行。
obr /en_file在Minecraft的作用就是用于游戏自动产生的消息中,比如你按了F2截图,你就会发现你可以点击消息中的带有下划线文字部分来打开你的截图照片。
(等等,那么用在MC函数中可以运行吗?)
第三个:run_command
run_command就比较直白了:运行指令。比如:
{“text“:“你猜猜这有什么用“,“clickEvent“:{“action“:“run_command“,“value“:“/give @br / diamond“}}
运行,并点击一下文字,你会发现你获得了一颗钻石!
但如果你忘记在value的开头打上/,那么你就会发现你发送了一条消息:give @br / diamond
这是怎么回事?
这就要联系到run_command的运作方式了。
在聊天消息以及书里,当一位玩家点击了带有run_command属性的clickEvent那段文字,游戏就会默认该玩家为指令执行者,并自动在该玩家的聊天栏输入value里的指令并发送。
所以说,run_command就只是点击发送消息咯?
没错就是这样的,具体能不能执行只能看该玩家的权限等级了。
那么该怎么样让不够等级的玩家也能使用run_command运行指令呢?
用告示牌就行了。
但是在告示牌上面怎么写JSON啊?
很简单,用指令放置一个带有JSON的告示牌就行了,比如上面这条指令就可以:
/setblock ~~~ minecraft:sign{Text1:“{\“text\“:\“你猜猜这有什么用\“,\“clickEvent\“:{\“action\“:\“run_command\“,\“value\“:\“give @br / diamond\“}}“}
(注:此为1.13版本指令,低于该版本或高于该版本均无法使用,其他版本:
低于1.13——/setblock ~~~ minecraft:standing_sign 0 rebr /lace {Text1:“{\“text\“:\“你猜猜这有什么用\“,\“clickEvent\“:{\“action\“:\“run_command\“,\“value\“:\“give @br / diamond\“}}“}
高于1.13——/setblock ~~~ minecraft:oak_sign{Text1:“{\“text\“:\“你猜猜这有什么用\“,\“clickEvent\“:{\“action\“:\“run_command\“,\“value\“:\“give @br / diamond\“}}“})
运行一下,你就会发现出现了一个告示牌,如果你一直点这个告示牌,那么你就一直会获得钻石。(注意不是左键啊,是右键)
而且,就算你撤了你的obr /,你还是可以获得钻石。
并且!在告示牌上,你是不需要在value的开头加上\的。
为什么?
因为在告示牌上,你点击了告示牌,游戏会检查告示牌的JSON,发现了clickEvent,游戏就会发现这个JSON不简单,于是检查了一下clickEvent,发现了run_command。
此时游戏恍然大悟,然后游戏就把value交给了服务器处理。服务器会把这条value按照命令方块处理指令的方式来处理,这个时候指令执行地点就是告示牌,指令执行者就是命令方块。
而命令方块处理指令本身也就不需要加上/,自然告示牌上的JSON运行指令也就不需要加上/了。
第四个:suggest_command
suggest_command很简单,就是玩家点击时将value的值覆盖(注意这个词)到玩家的聊天栏输入框,玩家可以自由选择要回车,还是删掉。这很简单就不再多说了。
第五个:change_br /age
change_br /age这个是专门给书用的,就是在书里点击文字就可以自动跳转到value值的页面,比如:
/give @a written_book{author:“你好MC“,title:“《Minecraft指令手册》第一卷“,br /ages:[“{\“text\“:\“第五章:坐标\“,\“clickEvent\“:{\“action\“:\“change_br /age\“,\“value\“:4}}“,““,““,““]}
(此为1.13版本指令)
获得一本由你好MC写的“《Minecraft指令手册》第一卷”,然后在第一页里显示着:
第五章:坐标
点击这串文字,就会自动跳转到3-4页。
如果你细心观察上面的指令,你就会发现这里的value不是字符串,而是数字。
没错,change_br /age属性的value只能是数字值,不能选择字符串或者是布尔值。
这就是change_br /age的用法。
第六个:cobr /y_to_clibr /board
这是在1.15版本才加入的新功能,作用就是玩家点击时可以自动将value值复制到玩家的剪贴板,通过这个功能或许可以方便我们让服务器更加的智能化。
由于篇幅有限,剩下的内容我们下章再讲。
——————————————
clickEvent各事件可用性:
obr /en_url——聊天界面、书
obr /en_file——无法在游戏里使用
run_command——聊天界面、书、告示牌
suggest_command——聊天界面
change_br /age——书
cobr /y_to_clibr /board——聊天界面、书