首頁(yè) 游戲

Minecraft指令手冊(cè)

第一百二十五章 玩家與JSON的交互事件 上

Minecraft指令手冊(cè) 你好MC 2635 2020-08-18 18:58:28

  看,這是一段JSON文本輸出的文字。

  只不過(guò)這段文字就是一段文字,你無(wú)法操控它,或者是它操控你(???)。

  如果你真的可以點(diǎn)擊這段文字并產(chǎn)生一些作用,比如打開(kāi)了一個(gè)新的網(wǎng)站,你點(diǎn)擊文字的做法,就叫做你與文本的“交互事件”。

  在JSON文本中,專門管理玩家與JSON文本的交互事件元素統(tǒng)稱為“交互事件”。

  下面,我們就來(lái)研究研究,這些交互事件元素,到底該怎么用。

  第一個(gè):insertion。

  第一個(gè)也就是最簡(jiǎn)單的一個(gè)。insertion的作用就是當(dāng)玩家按住Shift并點(diǎn)擊insertion所在對(duì)象顯示的文字時(shí),游戲就會(huì)自動(dòng)將insertion的值填入聊天框中,且并不會(huì)覆蓋已在聊天框輸入的文字,比如:

  {“text“:“按住Shift點(diǎn)擊有驚喜“,“insertion“:“驚喜!“}

  運(yùn)行之后你就會(huì)發(fā)現(xiàn)輸出了:

  按住Shift點(diǎn)擊有驚喜

  這樣一段普普通通的消息。但如果你點(diǎn)擊T鍵打開(kāi)消息界面,并按住Shift點(diǎn)擊文字,你就會(huì)發(fā)現(xiàn)聊天欄自動(dòng)輸入了:“驚喜!”二字。

  這就是insertion的用法,是不是特別簡(jiǎn)單?

  只不過(guò)該元素只有出現(xiàn)在聊天欄時(shí),比如使用tellraw執(zhí)行才有意義,你直接寫(xiě)在告示牌或者是書(shū)里是沒(méi)有任何用處的。

  然后第二個(gè):clickEvent

  clickEvent元素的作用就是當(dāng)玩家點(diǎn)擊文字(注意沒(méi)有按Shift,是直接點(diǎn)擊的那種)所產(chǎn)生的事情。所以clickEvent從該層面上來(lái)講就和超鏈接很類似了(自信點(diǎn),把“類似”去掉)。

  既然是超鏈接,這讓你想到了什么?

  首當(dāng)其沖的肯定就是打開(kāi)網(wǎng)址,沒(méi)錯(cuò),clickEvent確實(shí)可以實(shí)現(xiàn)。

  然后呢?然后我們就不要再聯(lián)想了,直接看看clickEvent到底該怎么用吧。

  clickEvent元素的值是一個(gè)對(duì)象,即:

  {“clickEvent“:{}}

  在clickEvent值里面有兩個(gè)參數(shù):

  action和value。

  這兩個(gè)參數(shù)都是必須填的,其中action為設(shè)置點(diǎn)擊后會(huì)產(chǎn)生什么樣的事情,value就是點(diǎn)擊產(chǎn)生的事情所需要的值。

  action有六種事件:

  open_url——使用系統(tǒng)默認(rèn)瀏覽器打開(kāi)value的網(wǎng)址

  open_file——打開(kāi)位于value路徑的文件

  run_command——運(yùn)行value中的指令

  suggest_command——打開(kāi)聊天欄并輸入value里的值,會(huì)覆蓋原本輸入的消息

  change_page——翻頁(yè)到value頁(yè)

  copy_to_clipboard——將value里的值復(fù)制到粘貼板

  open_url是最常用的事件,當(dāng)玩家點(diǎn)擊的時(shí)候游戲會(huì)跳出一個(gè)界面:

  你確定你要打開(kāi)以下網(wǎng)頁(yè)?

  

  然后下面還有一行粉紅色的字:

  永遠(yuǎn)不要打開(kāi)從你不信任的人得到的鏈接!

  接著就是三個(gè)選項(xiàng):是、復(fù)制到剪貼板、否

  如果選是,那么游戲?qū)?huì)使用默認(rèn)瀏覽器打開(kāi);如果選復(fù)制到剪貼板,將會(huì)真的復(fù)制到你的剪貼板,只不過(guò)網(wǎng)頁(yè)需要你自己打開(kāi)瀏覽器復(fù)制進(jìn)去;如果選否,那么恭喜你,啥也不會(huì)發(fā)生,只不過(guò)界面被關(guān)掉了而已。

  那么如果我們要點(diǎn)擊的時(shí)候打開(kāi)百度搜索首頁(yè)該怎么辦?

  很簡(jiǎn)單:

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

  運(yùn)行,點(diǎn)擊一下“百度搜索”再點(diǎn)擊“是”你就發(fā)現(xiàn)你打開(kāi)了百度。

  等等,這樣子做的話,那么我們是不是可以在服務(wù)器里做出一個(gè)網(wǎng)址大全?

  嗯,一個(gè)很不錯(cuò)的想法,可惜你的想法早在1999年就被李興平想到了,只不過(guò)鑒于你是在服務(wù)器里做的網(wǎng)址大全.......或許會(huì)因?yàn)槠涮厥庑晕嗟挠脩簦?p>  然后是第二個(gè):open_file

  open_file和open_url類似,只不過(guò)open_url是打開(kāi)網(wǎng)上的網(wǎng)址,而open_file是打開(kāi)本地的文件,比如:

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

  點(diǎn)擊就可以打開(kāi)C盤.......?為什么不能打開(kāi)?

  為什么呢?

  我們找到Minecraft WIKI,會(huì)發(fā)現(xiàn)上面說(shuō)了一句話:“

  且出于安全原因禁止玩家使用?!?p>  原來(lái)如此!Mojang竟然考慮得如此周到!不愧是Mojang!

  所以open_file無(wú)法在游戲里運(yùn)行,但是在游戲外,比如你開(kāi)發(fā)的mod,就可以運(yùn)行。

  open_file在Minecraft的作用就是用于游戲自動(dòng)產(chǎn)生的消息中,比如你按了F2截圖,你就會(huì)發(fā)現(xiàn)你可以點(diǎn)擊消息中的帶有下劃線文字部分來(lái)打開(kāi)你的截圖照片。

 ?。ǖ鹊龋敲从迷贛C函數(shù)中可以運(yùn)行嗎?)

  第三個(gè):run_command

  run_command就比較直白了:運(yùn)行指令。比如:

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

  運(yùn)行,并點(diǎn)擊一下文字,你會(huì)發(fā)現(xiàn)你獲得了一顆鉆石!

  但如果你忘記在value的開(kāi)頭打上/,那么你就會(huì)發(fā)現(xiàn)你發(fā)送了一條消息:give @p diamond

  這是怎么回事?

  這就要聯(lián)系到run_command的運(yùn)作方式了。

  在聊天消息以及書(shū)里,當(dāng)一位玩家點(diǎn)擊了帶有run_command屬性的clickEvent那段文字,游戲就會(huì)默認(rèn)該玩家為指令執(zhí)行者,并自動(dòng)在該玩家的聊天欄輸入value里的指令并發(fā)送。

  所以說(shuō),run_command就只是點(diǎn)擊發(fā)送消息咯?

  沒(méi)錯(cuò)就是這樣的,具體能不能執(zhí)行只能看該玩家的權(quán)限等級(jí)了。

  那么該怎么樣讓不夠等級(jí)的玩家也能使用run_command運(yùn)行指令呢?

  用告示牌就行了。

  但是在告示牌上面怎么寫(xiě)JSON啊?

  很簡(jiǎn)單,用指令放置一個(gè)帶有JSON的告示牌就行了,比如上面這條指令就可以:

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

 ?。ㄗⅲ捍藶?.13版本指令,低于該版本或高于該版本均無(wú)法使用,其他版本:

  低于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\“}}“})

  運(yùn)行一下,你就會(huì)發(fā)現(xiàn)出現(xiàn)了一個(gè)告示牌,如果你一直點(diǎn)這個(gè)告示牌,那么你就一直會(huì)獲得鉆石。(注意不是左鍵啊,是右鍵)

  而且,就算你撤了你的op,你還是可以獲得鉆石。

  并且!在告示牌上,你是不需要在value的開(kāi)頭加上\的。

  為什么?

  因?yàn)樵诟媸九粕?,你點(diǎn)擊了告示牌,游戲會(huì)檢查告示牌的JSON,發(fā)現(xiàn)了clickEvent,游戲就會(huì)發(fā)現(xiàn)這個(gè)JSON不簡(jiǎn)單,于是檢查了一下clickEvent,發(fā)現(xiàn)了run_command。

  此時(shí)游戲恍然大悟,然后游戲就把value交給了服務(wù)器處理。服務(wù)器會(huì)把這條value按照命令方塊處理指令的方式來(lái)處理,這個(gè)時(shí)候指令執(zhí)行地點(diǎn)就是告示牌,指令執(zhí)行者就是命令方塊。

  而命令方塊處理指令本身也就不需要加上/,自然告示牌上的JSON運(yùn)行指令也就不需要加上/了。

  第四個(gè):suggest_command

  suggest_command很簡(jiǎn)單,就是玩家點(diǎn)擊時(shí)將value的值覆蓋(注意這個(gè)詞)到玩家的聊天欄輸入框,玩家可以自由選擇要回車,還是刪掉。這很簡(jiǎn)單就不再多說(shuō)了。

  第五個(gè):change_page

  change_page這個(gè)是專門給書(shū)用的,就是在書(shū)里點(diǎn)擊文字就可以自動(dòng)跳轉(zhuǎn)到value值的頁(yè)面,比如:

  /give @a written_book{author:“你好MC“,title:“《Minecraft指令手冊(cè)》第一卷“,pages:[“{\“text\“:\“第五章:坐標(biāo)\“,\“clickEvent\“:{\“action\“:\“change_page\“,\“value\“:4}}“,““,““,““]}

 ?。ù藶?.13版本指令)

  獲得一本由你好MC寫(xiě)的“《Minecraft指令手冊(cè)》第一卷”,然后在第一頁(yè)里顯示著:

  第五章:坐標(biāo)

  點(diǎn)擊這串文字,就會(huì)自動(dòng)跳轉(zhuǎn)到3-4頁(yè)。

  如果你細(xì)心觀察上面的指令,你就會(huì)發(fā)現(xiàn)這里的value不是字符串,而是數(shù)字。

  沒(méi)錯(cuò),change_page屬性的value只能是數(shù)字值,不能選擇字符串或者是布爾值。

  這就是change_page的用法。

  第六個(gè):copy_to_clipboard

  這是在1.15版本才加入的新功能,作用就是玩家點(diǎn)擊時(shí)可以自動(dòng)將value值復(fù)制到玩家的剪貼板,通過(guò)這個(gè)功能或許可以方便我們讓服務(wù)器更加的智能化。

  由于篇幅有限,剩下的內(nèi)容我們下章再講。

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

  clickEvent各事件可用性:

  open_url——聊天界面、書(shū)

  open_file——無(wú)法在游戲里使用

  run_command——聊天界面、書(shū)、告示牌

  suggest_command——聊天界面

  change_page——書(shū)

  copy_to_clipboard——聊天界面、書(shū)

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