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