登陆注册
66052300000140

第140章 玩家与JSON的交互事件 下

现在,我们知道玩家和JSON文本的交互方式有按住某个键并点击,或者是直接点击文本。

只不过从广义上来讲,这都是要点击文本。那么有没有什么不用点击文本就可以与文本产生交互事件的元素呢?

有!这就是:hoverEvent

hoverEvent的作用是当玩家把鼠标指针移到文字上面时产生的事情,而不是点击。

hoverEvent和上一章讲的clickEvent比较类似,值都是一个对象,由action和value组成。

有了上一章的经验,这两个的作用也就不需要再讲了吧?

action有三种事件:

show_text——显示条平平无奇的JSON文本

show_item——显示一个物品的悬浮介绍文字

show_entity——显示一个实体

show_text无疑是最简单的,你可以这样:

{“text“:“快摸我!“,“hoverEvent“:{“action“:“show_text“,“value“:“太棒了!感觉怎么样?“}}

这样子就会输出一串文字:快摸我!

如果你把鼠标放在了上面,你就会发现上面出现了一串文字:太棒了!感觉怎么样?

你也可以这样:

{“text“:“快摸我!“,“hoverEvent“:{“action“:“show_text“,“value“:{“text“:“太棒了!感觉怎么样?“}}}

或是这样:

{“text“:“快摸我!“,“hoverEvent“:{“action“:“show_text“,“value“:[{“text“:“太棒了!感觉怎么样?“}]}}

甚至是这样:

{“text“:“快摸我!“,“hoverEvent“:{“action“:“show_text“,“value“:[{“translate“:“%s“,“with“:[{“translate“:“%s“,“with“:[{“translate“:“%s“,“with“:[{“translate“:“%s“,“with“:[{“text“:“太棒了!感觉怎么样?“}]}]}]}]}]}}

都是可以达到一样的效果的,你也可以添加一些别的元素,比如改变文字颜色什么的。

然后是show_item,这个的作用详细一点说,就是放在文字上面可以显示一个物品的详细信息,就像是你在背包里把光标移到物品上面一样。

show_item的value也是字符串,但是里面还要写一个对象,所以里面的引号前面都要加上转义符号,不理解的可以去上一章看看作者是怎么用指令放置一个带JSON的告示牌的,那条指令里面的JSON文本就跟这里的value是差不多的。

OK,那么具体要怎么做呢?

在第一百零八章,我们讲到了物品的通用标签:

“Count——物品堆叠的数量

Slot——物品所在的栏位(为掉落物时没有这个值)

id——物品id,神奇的是如果你不填,那么生成出来的掉落物就是一块石头

tag——这个接下来就是物品的非必填标签了,比如ench等都在里面。”

在这里,我们也需要用到物品的通用标签,这里我们拿悬浮显示一个“苹果”的悬浮文字举例。

我们需要先把value外边的JSON先给理清楚:

{“text“:“快摸我!“,“hoverEvent“:{“action“:“show_item“,“value“:““}}

然后我们就可以研究研究value该怎么写了,首先肯定要加上id,这是必须的:

“value“:“{id:\“minecraft:apple\“}“

然后你可以试着先执行一下:

{“text“:“快摸我!“,“hoverEvent“:{“action“:“show_item“,“value“:“{id:\“minecraft:apple\“}“}}

只不过光标一放上去,就显示了一条红色的文本:

Invalid Item

这句话的意思是:无效的物品

既然无效,那么肯定就是我们有必填项没填,可以试着加一下Count参数:

“value“:“{id:\“minecraft:apple\“,Count:1}“

然后再试一下:

{“text“:“快摸我!“,“hoverEvent“:{“action“:“show_item“,“value“:“{id:\“minecraft:apple\“,Count:1}“}}

你就会发现,你成功显示了一个苹果!

只不过显示苹果并没有什么奇特的,因为看起来这就跟普通的显示文本差不多啊?

其实并不一样,因为这个苹果文本和我们之前说过的translate显示出来的翻译文本差不多,你只要改变一下语言,再把光标一放,唉,立马就不一样了!而且还是实时更新,不需要更改语言后再执行一次。

只不过这还不是最特别的,你还可以尝试一下把苹果(apple)改成钻石剑:

{“text“:“快摸我!“,“hoverEvent“:{“action“:“show_item“,“value“:“{id:\“minecraft:diamond_sword\“,Count:1}“}}

然后光标再一放:

钻石剑

在主手时:

1.6攻击速度

7攻击伤害

是不是一模一样?

那么这有什么用处呢?

如果你平常仔细观察,你就会发现如果我们使用/give指令:

/give @s diamond_sword

这样子获得一个钻石剑,把光标放在提示消息上,也会出现一样的效果。

最后一个:show_entity

show_entity这个和show_item差不多,value值也是字符串,仍然需要转义,只不过从物品变成了实体而已:

{“text“:“快摸我!“,“hoverEvent“:{“action“:“show_entity“,“value“:“{}“}}

那么对象里面该填啥呢?可以填实体的name(名字)、type(种类)、tag(NBT标签)和id(UUID)。

这三个属性可以方便我们“伪造”出一个虚拟的实体,比如我们最基础的可以伪造一名叫做“人”的玩家:

{“text“:“快摸我!“,“hoverEvent“:{“action“:“show_entity“,.“value“:“{name:\“人\“,type:\“minecraft:player\“}“}}

但是当你把光标放在上面之后,你就会发现:“唉,咋啥都没有呢?”

别慌,我们可以再填一个id:

{“text“:“快摸我!“,“hoverEvent“:{“action“:“show_entity“,“value“:“{name:\“人\“,type:\“minecraft:player\“,id:\“b5bef018-4307-48c8-894c-391f7bc3d8db\“}“}}

运行之后,唉还是没有出现。

这到底是怎么回事?

额,这个作者也不知道,但估计是版本的问题,于是作者换了一个版本(1.13.2到1.12.2):

/tellraw @a {“text“:“快摸我!“,“hoverEvent“:{“action“:“show_entity“,“value“:“{name:\“人\“,type:\“minecraft:player\“,id:\“b5bef018-4307-48c8-894c-391f7bc3d8db\“}“}}

结果还是不行。

那么或许我们可以换一种思路——使用真实存在的玩家行不行?

为此作者又测试了一下,还是不行。

那就算了吧,可能是特性,毕竟如果错了,起码应该还有一个Invalid Entity的提示信息,啥也不显示估计是真的游戏bug了。

那么这就代表着本章结束了吗?

不,还没有!

Minecraft 1.16更新,Mojang不用了value(我们还可以用,是支持的),转而使用了contents参数。contents参数和value类似,但有些地方有稍稍改进,比如show_item和show_entity就再也不是字符串了,所以我们的显示钻石剑就要被迫改成:

{“text“:“快摸我!“,“hoverEvent“:{“action“:“show_item“,“contents“:{“id“:“minecraft:diamond_sword“,“Count“:1}}}

可以发现,1.16的NBT更加JSON了,参数都要加上引号了。

那么我们的show_entity能用了吗?可以测试一下:

/tellraw @a {“text“:“快摸我!“,“hoverEvent“:{“action“:“show_entity“,“contents“:{“name“:“人“,“type“:“minecraft:player“,“id“:“b5bef018-4307-48c8-894c-391f7bc3d8db“}}}

结果还是不行,但既然到了最新版本还不行,这是否代表着我们是填对的,只不过.......

没有可以显示的东西?

(注:1.16版本,实体的name标签已经支持了JSON文本。)

同类推荐
  • 玩儿命游戏玩儿命爱

    玩儿命游戏玩儿命爱

    看一眼美女就被揍,还有没有天理!我什么都比不过他,他从初中把我虐到高中,生生的把我变成了一个怂货。他玩儿上了一款游戏,是装有五感交互系统的虚拟现实游戏,被打了,那可是会疼的。老天有眼,玩游戏是我唯一强过他的地方。我终于有机会报仇了!老子要虐死你!
  • 我的世界奇幻之旅

    我的世界奇幻之旅

    mc小说:这本小说不想狗血的穿越之类的。虽然跟穿越差不多,但是意义不一样。这本小说的主人公忽然来到一个地方,他也不知道自己是谁,这里又是哪里?随后发现这个世界不再是想象中的那么简单....
  • 虚拟英雄

    虚拟英雄

    最新发售的游戏《realhero》在内陆大火,孙泉这个标准宅男怎么会放弃这个好机会,他迫不及待的买下了游戏却发现,整个游戏原来是一个拥有高智商的设计师对人性的挑战。只有当人们找出设计师的身份并击败他,大家才能离开。孙泉会是那个人吗?
  • 我真不想被覆灭

    我真不想被覆灭

    被拉进了自己即将通关的游戏?还成了最弱的那一方?有人要杀我?我知道那个家伙是谁第二天就给安排上。现场有命案发生?我看都不看现场就将手法演示,凶手指出。青梅竹马的帝国王子和图拉公主要结婚?我直接刷满图拉公主爱慕度,让帝国王子成为草原之王。英雄级NPC要去别国?我给了他最爱的喜之糖,他可高兴了,好感度MAX。“隔壁的国王是带预言家吗,怎么什么都知道,我还真不信他知道我们在这里密谋。”“没错!我就是带预言家!”
  • 最强全职

    最强全职

    现实中只要有特殊能力,进入游戏中便有一定几率领悟各种神奇技能!
热门推荐
  • 英汉口译红皮书

    英汉口译红皮书

    没有口译员的努力,各种国际活动的沟通便难以实现。口译以其独特的魅力吸引着众多口译爱好者,也让众多业外人士非常好奇。虽然口译这个职业在中国已经存在了几十年,但国内在口译领域的相关研究依然欠缺,特别是欠缺从实践角度出发的研究。
  • 网王之网球公主帮

    网王之网球公主帮

    【暧昧季节出品】(网王)高中等部合并下的新学期到来,下一场关东地区的网球联赛即将来临。她是对网球一知半解的中国转学生,却隐藏着一个不为人知的秘密……自信满满、任性洒脱、却满身小缺点的她,面对不二的细腻温柔,菊丸的孩子气爱慕,幸村的戏谑真情,跡部的霸道体贴,芥川的单纯暗恋……会怎么释然自己内心的骄傲?【此文女主非全能,平凡、有脾气。不喜勿入】(这是我的处女座,第一次入库起点已经写完,很多地方与原著有点矛盾,请大家原谅。)
  • 秘藉输入系统

    秘藉输入系统

    玩游戏的时候有没有想过,游戏的秘藉如果能在现实中使用该有多好!?高三学生黄杰真的实现了这一目标,开始了征服诸天万界的旅程。一切世界,一切宇宙,一切神魔鬼怪,一切仙侠玄幻,一切科技文明,一切超级英雄……在秘藉面前,没有不拜倒在黄杰脚下的。群号:313899483
  • 时之反

    时之反

    画纸上描绘出一座古旧的白色高塔,其间气流、云层、光线,仿佛全都停滞不前,只有一个人影立在塔前,一手高举,其间闪烁着十字星状的暗红色光芒。
  • 天行

    天行

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

    魔神座

    神魔大战,双座皆亡,转世轮回,再铸辉煌。亿年混乱,攻伐无端,星球陨灭,生灵涂炭,肉身不存,以虚修炼。尘天斗法,结束轩辕,方家崛起,一统江山。设定:虚体就是一种没有肉体的灵魂体,他们以追求拥有肉体为最终目标,其实只是人类的另类存在,叫法不同罢了。
  • 潇湘劫

    潇湘劫

    传言中的世界末日并没有如期而至只是一切却命中早已注定固我们始终坚信苦难只是不朽的开端
  • 鬼眼小萌妻:老公,请绕道

    鬼眼小萌妻:老公,请绕道

    “姐姐!我们去玩吧!”安家,一个13岁的小女孩拉着一个14岁的小女孩笑到。她们就是安偌和安娉婷。“好啊!去哪儿?”安偌笑了笑。
  • 一夜雪落心已寒

    一夜雪落心已寒

    红尘初妆,山河无疆。最初的面庞,碾碎梦魇无常,命格无双。雪落飞扬,一缕冷香远,逝雪深,笑意浅,管谁君临天下,一杯新茶闲数落花。清风起,天下寂,为你一笑,流水间随落花意。谁折你一枝新梅,看残雪纷飞;谁绾你相思不悔,任帘外雨霏霏。还你一场旧寐,看年华不归;谁知你愁肠几回,青丝或离人泪。
  • 梦在这里开始

    梦在这里开始

    一个从小受过专业的职业赏金猎人,在一次任务中,为了接近一名高中女学生,而动了真心。但是,真的会这么简单吗??