首頁 游戲

Minecraft指令手冊

第一百二十六章 玩家與JSON的交互事件 下

Minecraft指令手冊 你好MC 2273 2020-08-19 17:36:32

  現(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文本。)

按 “鍵盤左鍵←” 返回上一章  按 “鍵盤右鍵→” 進(jìn)入下一章  按 “空格鍵” 向下滾動(dòng)
目錄
目錄
設(shè)置
設(shè)置
書架
加入書架
書頁
返回書頁
指南