登陆注册
66052300000139

第139章 玩家与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有六种事件:

open_url——使用系统默认浏览器打开value的网址

open_file——打开位于value路径的文件

run_command——运行value中的指令

suggest_command——打开聊天栏并输入value里的值,会覆盖原本输入的消息

change_page——翻页到value页

copy_to_clipboard——将value里的值复制到粘贴板

open_url是最常用的事件,当玩家点击的时候游戏会跳出一个界面:

你确定你要打开以下网页?

然后下面还有一行粉红色的字:

永远不要打开从你不信任的人得到的链接!

接着就是三个选项:是、复制到剪贴板、否

如果选是,那么游戏将会使用默认浏览器打开;如果选复制到剪贴板,将会真的复制到你的剪贴板,只不过网页需要你自己打开浏览器复制进去;如果选否,那么恭喜你,啥也不会发生,只不过界面被关掉了而已。

那么如果我们要点击的时候打开百度搜索首页该怎么办?

很简单:

{“text“:“百度搜索“,“clickEvent“:{“action“:“open_url“,“value“:“

运行,点击一下“百度搜索”再点击“是”你就发现你打开了百度。

等等,这样子做的话,那么我们是不是可以在服务器里做出一个网址大全?

嗯,一个很不错的想法,可惜你的想法早在1999年就被李兴平想到了,只不过鉴于你是在服务器里做的网址大全.......或许会因为其特殊性吸引更多的用户?

然后是第二个:open_file

open_file和open_url类似,只不过open_url是打开网上的网址,而open_file是打开本地的文件,比如:

{“text“:“你猜猜这有什么用“,“clickEvent“:{“action“:“open_file“,“value“:“C:\\“}}

点击就可以打开C盘.......?为什么不能打开?

为什么呢?

我们找到Minecraft WIKI,会发现上面说了一句话:“

且出于安全原因禁止玩家使用。”

原来如此!Mojang竟然考虑得如此周到!不愧是Mojang!

所以open_file无法在游戏里运行,但是在游戏外,比如你开发的mod,就可以运行。

open_file在Minecraft的作用就是用于游戏自动产生的消息中,比如你按了F2截图,你就会发现你可以点击消息中的带有下划线文字部分来打开你的截图照片。

(等等,那么用在MC函数中可以运行吗?)

第三个:run_command

run_command就比较直白了:运行指令。比如:

{“text“:“你猜猜这有什么用“,“clickEvent“:{“action“:“run_command“,“value“:“/give @p diamond“}}

运行,并点击一下文字,你会发现你获得了一颗钻石!

但如果你忘记在value的开头打上/,那么你就会发现你发送了一条消息:give @p diamond

这是怎么回事?

这就要联系到run_command的运作方式了。

在聊天消息以及书里,当一位玩家点击了带有run_command属性的clickEvent那段文字,游戏就会默认该玩家为指令执行者,并自动在该玩家的聊天栏输入value里的指令并发送。

所以说,run_command就只是点击发送消息咯?

没错就是这样的,具体能不能执行只能看该玩家的权限等级了。

那么该怎么样让不够等级的玩家也能使用run_command运行指令呢?

用告示牌就行了。

但是在告示牌上面怎么写JSON啊?

很简单,用指令放置一个带有JSON的告示牌就行了,比如上面这条指令就可以:

/setblock ~~~ minecraft:sign{Text1:“{\“text\“:\“你猜猜这有什么用\“,\“clickEvent\“:{\“action\“:\“run_command\“,\“value\“:\“give @p diamond\“}}“}

(注:此为1.13版本指令,低于该版本或高于该版本均无法使用,其他版本:

低于1.13——/setblock ~~~ minecraft:standing_sign 0 replace {Text1:“{\“text\“:\“你猜猜这有什么用\“,\“clickEvent\“:{\“action\“:\“run_command\“,\“value\“:\“give @p diamond\“}}“}

高于1.13——/setblock ~~~ minecraft:oak_sign{Text1:“{\“text\“:\“你猜猜这有什么用\“,\“clickEvent\“:{\“action\“:\“run_command\“,\“value\“:\“give @p diamond\“}}“})

运行一下,你就会发现出现了一个告示牌,如果你一直点这个告示牌,那么你就一直会获得钻石。(注意不是左键啊,是右键)

而且,就算你撤了你的op,你还是可以获得钻石。

并且!在告示牌上,你是不需要在value的开头加上\的。

为什么?

因为在告示牌上,你点击了告示牌,游戏会检查告示牌的JSON,发现了clickEvent,游戏就会发现这个JSON不简单,于是检查了一下clickEvent,发现了run_command。

此时游戏恍然大悟,然后游戏就把value交给了服务器处理。服务器会把这条value按照命令方块处理指令的方式来处理,这个时候指令执行地点就是告示牌,指令执行者就是命令方块。

而命令方块处理指令本身也就不需要加上/,自然告示牌上的JSON运行指令也就不需要加上/了。

第四个:suggest_command

suggest_command很简单,就是玩家点击时将value的值覆盖(注意这个词)到玩家的聊天栏输入框,玩家可以自由选择要回车,还是删掉。这很简单就不再多说了。

第五个:change_page

change_page这个是专门给书用的,就是在书里点击文字就可以自动跳转到value值的页面,比如:

/give @a written_book{author:“你好MC“,title:“《Minecraft指令手册》第一卷“,pages:[“{\“text\“:\“第五章:坐标\“,\“clickEvent\“:{\“action\“:\“change_page\“,\“value\“:4}}“,““,““,““]}

(此为1.13版本指令)

获得一本由你好MC写的“《Minecraft指令手册》第一卷”,然后在第一页里显示着:

第五章:坐标

点击这串文字,就会自动跳转到3-4页。

如果你细心观察上面的指令,你就会发现这里的value不是字符串,而是数字。

没错,change_page属性的value只能是数字值,不能选择字符串或者是布尔值。

这就是change_page的用法。

第六个:copy_to_clipboard

这是在1.15版本才加入的新功能,作用就是玩家点击时可以自动将value值复制到玩家的剪贴板,通过这个功能或许可以方便我们让服务器更加的智能化。

由于篇幅有限,剩下的内容我们下章再讲。

——————————————

clickEvent各事件可用性:

open_url——聊天界面、书

open_file——无法在游戏里使用

run_command——聊天界面、书、告示牌

suggest_command——聊天界面

change_page——书

copy_to_clipboard——聊天界面、书

同类推荐
  • 传奇女玩家

    传奇女玩家

    新书《大漠红云:绝世女刀客》已发布,欢迎入坑。网游修仙哪家强?勇闯传说远名扬!《传说》,一款可以睡眠游戏的全息网游,一经推出便风靡全球。游戏女大神于小凡意外身亡附体重生于龙凤胎哥哥身上,凭借一副神奇眼镜将虚拟和现实完美对接,带领一群女玩家造就了一段不灭网游修仙传说,也彻底揭开了游戏背后的秘密,原来这一切竟是……
  • 三国群英之踏上颠峰

    三国群英之踏上颠峰

    欢迎来到三国群英世界,本书没有YY,女主一定会有但不会多。
  • 网游秩序之神

    网游秩序之神

    他,本是一个安安分分的市井小民,一个虚拟网游却是让他改变了自己的一生,一个逆天的种族职业,一条曲折的成长之路,最终却会如何?(秩序里无悲剧,无郁闷,新人新书,求收藏!)
  • 三国为你杀之拐个高富帅

    三国为你杀之拐个高富帅

    玩个正常游戏都能玩出与众不同的状况的妹子你伤得起么?蓝翎只不过是想好好玩个棋牌游戏,却莫名其妙跑出了个名叫“拐个高富帅”的支线任务,不玩还不行。本文是一只悲催的妹子拼命完成坑爹的任务想要拐只高富帅却最终被高富帅拐走的故事。
  • 地下城与勇士:重创历史

    地下城与勇士:重创历史

    一次意外,引发了一场穿越世界的大转变,当他们来到这个世界后,才发现自己就是游戏中设定的角色。当他们熟悉这个世界后,才发现自己的使命根本不是好好活在这个世界这么简单!寻找先驱者…他们的处境到底有多艰难?!
热门推荐
  • 搏逆狂沙

    搏逆狂沙

    领袖就应该是一往无前的,可是我不是领袖啊,我只是个小弟,站在人群之中,我的身边有太多太多的人正在奋不顾身的往前冲,我怎能后退。你知道的,最痛的不是你死去了,而是你身边的人都死去了,而你还活着......
  • 都市之超异能学生

    都市之超异能学生

    一个穷学生因一场变故获得了异能从而有了翻天腹地的变化。
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 王源之薰衣草的初夏

    王源之薰衣草的初夏

    他从三年前离开了她,她又因他的离开而出车祸导致失忆.....
  • 都市风流帝王

    都市风流帝王

    燃情物欲都市,地下风流帝王,叱咤风云霸道,情勾尤物逍遥……
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 纪元改造者

    纪元改造者

    这是个关于人类纪元的梦,我一直都在做这个梦。有幸我今天得到了一个对我来说很重要的人的认可,我想尝试把这个梦写下来。可能应为我是以做梦的方式写出来的,有些地方不符合现实逻辑,此书致我的梦,也致我深爱着的一个人。
  • 我应该是富二代

    我应该是富二代

    这是一个儿子认爹的故事。(随便看看就行了,觉得不嫌麻烦的可以点收藏,评论和推荐我就不求了!)
  • 烽帝

    烽帝

    楚家有子,名为烽帝!一个浩大的玄幻世界,光怪陆离,神秘无尽。热血似火山沸腾,激情若瀚海汹涌,欲望如深渊无止境……
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!