第一百二十六章 玩家與JSON的交互事件 下
現(xiàn)在,我們知道玩家和JSON文本的交互方式有按住某個(gè)鍵并點(diǎn)擊,或者是直接點(diǎn)擊文本。
只不過從廣義上來講,這都是要點(diǎn)擊文本。那么有沒有什么不用點(diǎn)擊文本就可以與文本產(chǎn)生交互事件的元素呢?
有!這就是:hoverEvent
hoverEvent的作用是當(dāng)玩家把鼠標(biāo)指針移到文字上面時(shí)產(chǎn)生的事情,而不是點(diǎn)擊。
hoverEvent和上一章講的clickEvent比較類似,值都是一個(gè)對象,由action和value組成。
有了上一章的經(jīng)驗(yàn),這兩個(gè)的作用也就不需要再講了吧?
action有三種事件:
show_text——顯示條平平無奇的JSON文本
show_item——顯示一個(gè)物品的懸浮介紹文字
show_entity——顯示一個(gè)實(shí)體
show_text無疑是最簡單的,你可以這樣:
{“text“:“快摸我!“,“hoverEvent“:{“action“:“show_text“,“value“:“太棒了!感覺怎么樣?“}}
這樣子就會(huì)輸出一串文字:快摸我!
如果你把鼠標(biāo)放在了上面,你就會(huì)發(fā)現(xiàn)上面出現(xiàn)了一串文字:太棒了!感覺怎么樣?
你也可以這樣:
{“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“:“太棒了!感覺怎么樣?“}]}]}]}]}]}}
都是可以達(dá)到一樣的效果的,你也可以添加一些別的元素,比如改變文字顏色什么的。
然后是show_item,這個(gè)的作用詳細(xì)一點(diǎn)說,就是放在文字上面可以顯示一個(gè)物品的詳細(xì)信息,就像是你在背包里把光標(biāo)移到物品上面一樣。
show_item的value也是字符串,但是里面還要寫一個(gè)對象,所以里面的引號前面都要加上轉(zhuǎn)義符號,不理解的可以去上一章看看作者是怎么用指令放置一個(gè)帶JSON的告示牌的,那條指令里面的JSON文本就跟這里的value是差不多的。
OK,那么具體要怎么做呢?
在第一百零八章,我們講到了物品的通用標(biāo)簽:
“Count——物品堆疊的數(shù)量
Slot——物品所在的欄位(為掉落物時(shí)沒有這個(gè)值)
id——物品id,神奇的是如果你不填,那么生成出來的掉落物就是一塊石頭
tag——這個(gè)接下來就是物品的非必填標(biāo)簽了,比如ench等都在里面?!?p> 在這里,我們也需要用到物品的通用標(biāo)簽,這里我們拿懸浮顯示一個(gè)“蘋果”的懸浮文字舉例。
我們需要先把value外邊的JSON先給理清楚:
{“text“:“快摸我!“,“hoverEvent“:{“action“:“show_item“,“value“:““}}
然后我們就可以研究研究value該怎么寫了,首先肯定要加上id,這是必須的:
“value“:“{id:\“minecraft:apple\“}“
然后你可以試著先執(zhí)行一下:
{“text“:“快摸我!“,“hoverEvent“:{“action“:“show_item“,“value“:“{id:\“minecraft:apple\“}“}}
只不過光標(biāo)一放上去,就顯示了一條紅色的文本:
Invalid Item
這句話的意思是:無效的物品
既然無效,那么肯定就是我們有必填項(xiàng)沒填,可以試著加一下Count參數(shù):
“value“:“{id:\“minecraft:apple\“,Count:1}“
然后再試一下:
{“text“:“快摸我!“,“hoverEvent“:{“action“:“show_item“,“value“:“{id:\“minecraft:apple\“,Count:1}“}}
你就會(huì)發(fā)現(xiàn),你成功顯示了一個(gè)蘋果!
只不過顯示蘋果并沒有什么奇特的,因?yàn)榭雌饋磉@就跟普通的顯示文本差不多?。?p> 其實(shí)并不一樣,因?yàn)檫@個(gè)蘋果文本和我們之前說過的translate顯示出來的翻譯文本差不多,你只要改變一下語言,再把光標(biāo)一放,唉,立馬就不一樣了!而且還是實(shí)時(shí)更新,不需要更改語言后再執(zhí)行一次。
只不過這還不是最特別的,你還可以嘗試一下把蘋果(apple)改成鉆石劍:
{“text“:“快摸我!“,“hoverEvent“:{“action“:“show_item“,“value“:“{id:\“minecraft:diamond_sword\“,Count:1}“}}
然后光標(biāo)再一放:
鉆石劍
在主手時(shí):
1.6攻擊速度
7攻擊傷害
是不是一模一樣?
那么這有什么用處呢?
如果你平常仔細(xì)觀察,你就會(huì)發(fā)現(xiàn)如果我們使用/give指令:
/give @s diamond_sword
這樣子獲得一個(gè)鉆石劍,把光標(biāo)放在提示消息上,也會(huì)出現(xiàn)一樣的效果。
最后一個(gè):show_entity
show_entity這個(gè)和show_item差不多,value值也是字符串,仍然需要轉(zhuǎn)義,只不過從物品變成了實(shí)體而已:
{“text“:“快摸我!“,“hoverEvent“:{“action“:“show_entity“,“value“:“{}“}}
那么對象里面該填啥呢?可以填實(shí)體的name(名字)、type(種類)、tag(NBT標(biāo)簽)和id(UUID)。
這三個(gè)屬性可以方便我們“偽造”出一個(gè)虛擬的實(shí)體,比如我們最基礎(chǔ)的可以偽造一名叫做“人”的玩家:
{“text“:“快摸我!“,“hoverEvent“:{“action“:“show_entity“,.“value“:“{name:\“人\“,type:\“minecraft:player\“}“}}
但是當(dāng)你把光標(biāo)放在上面之后,你就會(huì)發(fā)現(xiàn):“唉,咋啥都沒有呢?”
別慌,我們可以再填一個(gè)id:
{“text“:“快摸我!“,“hoverEvent“:{“action“:“show_entity“,“value“:“{name:\“人\“,type:\“minecraft:player\“,id:\“b5bef018-4307-48c8-894c-391f7bc3d8db\“}“}}
運(yùn)行之后,唉還是沒有出現(xiàn)。
這到底是怎么回事?
額,這個(gè)作者也不知道,但估計(jì)是版本的問題,于是作者換了一個(gè)版本(1.13.2到1.12.2):
/tellraw @a {“text“:“快摸我!“,“hoverEvent“:{“action“:“show_entity“,“value“:“{name:\“人\“,type:\“minecraft:player\“,id:\“b5bef018-4307-48c8-894c-391f7bc3d8db\“}“}}
結(jié)果還是不行。
那么或許我們可以換一種思路——使用真實(shí)存在的玩家行不行?
為此作者又測試了一下,還是不行。
那就算了吧,可能是特性,畢竟如果錯(cuò)了,起碼應(yīng)該還有一個(gè)Invalid Entity的提示信息,啥也不顯示估計(jì)是真的游戲bug了。
那么這就代表著本章結(jié)束了嗎?
不,還沒有!
Minecraft 1.16更新,Mojang不用了value(我們還可以用,是支持的),轉(zhuǎn)而使用了contents參數(shù)。contents參數(shù)和value類似,但有些地方有稍稍改進(jìn),比如show_item和show_entity就再也不是字符串了,所以我們的顯示鉆石劍就要被迫改成:
{“text“:“快摸我!“,“hoverEvent“:{“action“:“show_item“,“contents“:{“id“:“minecraft:diamond_sword“,“Count“:1}}}
可以發(fā)現(xiàn),1.16的NBT更加JSON了,參數(shù)都要加上引號了。
那么我們的show_entity能用了嗎?可以測試一下:
/tellraw @a {“text“:“快摸我!“,“hoverEvent“:{“action“:“show_entity“,“contents“:{“name“:“人“,“type“:“minecraft:player“,“id“:“b5bef018-4307-48c8-894c-391f7bc3d8db“}}}
結(jié)果還是不行,但既然到了最新版本還不行,這是否代表著我們是填對的,只不過.......
沒有可以顯示的東西?
(注:1.16版本,實(shí)體的name標(biāo)簽已經(jīng)支持了JSON文本。)