最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【綜述&教程】基于GameTest框架編寫(xiě)模組

2021-06-27 17:37 作者:乾山瑤  | 我要投稿

注意

此文發(fā)布于2021年06月27日

第一次修訂于2021年11月01日

請(qǐng)關(guān)注您當(dāng)下的閱讀時(shí)間以確保其時(shí)效性

閱讀本文要求您對(duì)附加包開(kāi)發(fā)的基礎(chǔ)知識(shí)具有一定了解

導(dǎo)讀

? ? ? 此文為基巖版GameTest框架發(fā)展現(xiàn)狀、應(yīng)用及使用教程的綜述,主要分為四個(gè)章節(jié)。

? ? ? 第一章為緒論部分,主要綜述了GameTest框架是什么,包含什么內(nèi)容,及其發(fā)展現(xiàn)狀。

? ? ? 第二章為使用GameTest框架編寫(xiě)模組的簡(jiǎn)易入門(mén)教程,它可以幫助您快速上手。

? ? ? 第三章為本文的總結(jié)及對(duì)GameTest框架未來(lái)發(fā)展的展望,個(gè)人拙見(jiàn),望輕噴。

? ? ? 關(guān)鍵詞:GameTest框架,Plugin系統(tǒng),附加包,模組,Minecraft基巖版。

目錄

第一章 緒論

1.1 引言

1.2 GameTest框架

1.3 mojang-gametest模塊

1.4 mojang-minecraft模塊

1.5 發(fā)展現(xiàn)狀

第二章 簡(jiǎn)易入門(mén)

2.1 清單文件配置

2.2 腳本編寫(xiě)

結(jié)語(yǔ)及展望

第一章 緒論

1.1 引言

? ? ?2021年初,官方開(kāi)放了GameTest框架接口,旨在提供開(kāi)發(fā)者一個(gè)方便的游戲內(nèi)容測(cè)試途徑,當(dāng)然,當(dāng)時(shí)誰(shuí)也沒(méi)想到這玩意兒能拿來(lái)寫(xiě)模組??山?jīng)歷了不到半年的發(fā)展后,官方不僅為其添加了一定數(shù)量的接口函數(shù),甚至引入了事件訂閱系統(tǒng),這時(shí)候,GameTest框架用于模組編寫(xiě)這一話(huà)題逐漸引起了社區(qū)內(nèi)開(kāi)發(fā)者的關(guān)注與討論。鑒于目前國(guó)內(nèi)社區(qū)該領(lǐng)域資料較為稀缺,多數(shù)開(kāi)發(fā)者對(duì)其也知之甚少,故而特撰此文,對(duì)GameTest框架應(yīng)用于模組編寫(xiě)領(lǐng)域這一課題本人目前的所知所感進(jìn)行一個(gè)系統(tǒng)的綜述。本人水平有限,望大佬們不吝斧正。

1.2 GameTest框架

? ? ? GameTest框架(en: GameTest Framework是Mojang官方提供給開(kāi)發(fā)者們使用其開(kāi)放接口的一種方式,歸屬于官方API一類(lèi),全平臺(tái)可用(目前原主機(jī)端除外)。其與腳本引擎類(lèi)似,通過(guò)在清單文件中添加類(lèi)型為“javascript”的模塊,依托于行為包產(chǎn)生效用。官方目前暫未公開(kāi)對(duì)該系統(tǒng)做出正式命名,而是將其歸在了GameTest框架的范疇內(nèi),且官方表示未來(lái)“GameTest框架”作為這個(gè)腳本系統(tǒng)的名字肯定是不合適。其目前在社區(qū)內(nèi)也有稱(chēng)呼其為“Plugin系統(tǒng)”的(discord社區(qū)中有些官方人員也是這么稱(chēng)呼它的)。關(guān)于Plugin這一名稱(chēng)的起源,最初該模塊類(lèi)型的值為“plugin”,后Mojang將其更改為“javascript”,但Plugin這一名稱(chēng)卻被沿用了下來(lái)。

? ? ? 相較于腳本引擎,GameTest框架是基于另一個(gè)JS引擎,QuickJs引擎,采取不同方式編寫(xiě)的一套腳本API。GameTest框架開(kāi)放接口的方式主要表現(xiàn)為口類(lèi)——即通過(guò)提供接口類(lèi)來(lái)暴露方法及預(yù)制類(lèi)。接口類(lèi)可以分為兩種:一種是靜態(tài)接口類(lèi),這種接口類(lèi)沒(méi)有構(gòu)造函數(shù),不可實(shí)例化,不可被繼承,其中儲(chǔ)存了各種方法或是一些子接口類(lèi),例如MinecraftBlockTypes就是一個(gè)靜態(tài)接口類(lèi):

MinecraftBlockTypes類(lèi)的文檔(部分)

? ? ? 另一種接口類(lèi)則是擁有構(gòu)造函數(shù)的、可實(shí)例化的類(lèi),開(kāi)發(fā)者可通過(guò)這種接口類(lèi)創(chuàng)建相應(yīng)的實(shí)例對(duì)象,例如BlockLocation就是一個(gè)可實(shí)例化的接口類(lèi)。

BlockLocation類(lèi)的文檔(部分)

? ? ? 相比腳本引擎的“ECS架構(gòu)”,此模式更加模塊化,語(yǔ)法上相對(duì)更為簡(jiǎn)潔,一定程度上可減輕腳本編寫(xiě)過(guò)程中由架構(gòu)導(dǎo)致的代碼冗雜問(wèn)題。

? ? ? GameTest框架目前包含了兩個(gè)接口模塊:mojang-gametest與mojang-minecraft,它們本質(zhì)上是官方開(kāi)放的兩個(gè)接口類(lèi)。mojang-gametest模塊是用于測(cè)試游戲內(nèi)容的主要接口模塊,gametest功能也就是這個(gè)模塊實(shí)現(xiàn)的。gametest功能是官方提供的通過(guò)gametest指令執(zhí)行腳本函數(shù)來(lái)測(cè)試游戲內(nèi)容一個(gè)工具箱。mojang-minecraft模塊則儲(chǔ)存了官方提供的有關(guān)游戲內(nèi)容的各種接口,目前已更新了一定數(shù)量的接口類(lèi)。

1.3 mojang-gametest模塊

? ? ??mojang-gametest模塊是GameTest框架中的一大模塊,其主要的用途就是實(shí)現(xiàn)了gametest功能。gametest功能是官方提供的一個(gè)工具箱,可用于構(gòu)建和測(cè)試創(chuàng)造者們添加到游戲內(nèi)的任何新內(nèi)容。舉個(gè)例子,假設(shè)某開(kāi)發(fā)者在其附加包中新增了某個(gè)會(huì)主動(dòng)撿起掉落在地上盔甲并裝佩的生物,想要對(duì)該生物的行為進(jìn)行測(cè)試,檢驗(yàn)其是否符合預(yù)期(即在附近有掉落盔甲時(shí)會(huì)主動(dòng)撿起并裝佩),此時(shí)他便可通過(guò)GameTest框架中的mojang-gametest模塊構(gòu)建一個(gè)特定的gametest測(cè)試單元來(lái)進(jìn)行測(cè)試,在代碼中通過(guò)斷言類(lèi)函數(shù)(mojang-gametest模塊提供的一類(lèi)函數(shù),一般以assert開(kāi)頭,作為測(cè)試條件存在,如:assertEntityHasArmor() 函數(shù),斷言實(shí)體佩戴有某種盔甲,如無(wú),則拋出錯(cuò)誤)與達(dá)成類(lèi)函數(shù)(用于判定測(cè)試是否成功的函數(shù),一般以succeed開(kāi)頭,使用時(shí)會(huì)以特定規(guī)則執(zhí)行傳入的函數(shù),如函數(shù)執(zhí)行完畢后未拋出錯(cuò)誤,則返回測(cè)試成功,反之,返回測(cè)試失?。┰O(shè)置當(dāng)該生物佩戴了指定盔甲時(shí)即測(cè)試成功。此時(shí)如果測(cè)試失敗,則會(huì)輸出失敗提示及相關(guān)的一些游戲信息,幫助開(kāi)發(fā)者迅速定位問(wèn)題所在。當(dāng)然這個(gè)例子顯然較為簡(jiǎn)單,實(shí)際上開(kāi)發(fā)者可自定義更加復(fù)雜的游戲測(cè)試單元,并通過(guò)輸出的測(cè)試信息得到一定的反饋,以達(dá)到快速改進(jìn)或完善內(nèi)容的目的。


斷言類(lèi)函數(shù)(截止1.17.20.20版本)

達(dá)成類(lèi)函數(shù)(截止1.17.20.20版本)

? ? ? 在實(shí)際使用中,開(kāi)發(fā)者通過(guò) /gametest 指令來(lái)執(zhí)行指定的測(cè)試單元。而這里的測(cè)試單元本質(zhì)上就是通過(guò)mojang-gametest模塊注冊(cè)的腳本代碼,其本質(zhì)上只是一個(gè)javascript函數(shù),里面包含了如測(cè)試結(jié)構(gòu)(由游戲中結(jié)構(gòu)方塊導(dǎo)出的結(jié)構(gòu)文件)的設(shè)置、判定斷言及測(cè)試執(zhí)行的時(shí)長(zhǎng)限定等內(nèi)容。

1.4 mojang-minecraft模塊

? ? ? mojang-minecraft模塊是GameTest框架中的另一模塊,也是GameTest框架用于編寫(xiě)模組的關(guān)鍵所在。該模塊包含了與游戲內(nèi)容相關(guān)的一些接口,用于幫助開(kāi)發(fā)者獲取游戲內(nèi)容并與之進(jìn)行交互。下面是截止1.17.20.20版本已加入的接口類(lèi)列表。

Minecraft模塊已加入的接口類(lèi)(截止1.17.20.20版本)

? ? ? 同時(shí),mojang-minecraft模塊已提供了事件訂閱功能,開(kāi)發(fā)者可通過(guò)該功能進(jìn)行游戲事件(包括但不僅僅包括游戲刻事件、天氣改變事件、玩家發(fā)送聊天信息事件、爆炸事件、方塊被活塞推動(dòng)會(huì)事件、生物被添加藥水效果事件等等)的訂閱。事件訂閱的加入意味著GameTest框架擁有了用于編寫(xiě)模組的潛力,但目前可訂閱的事件種類(lèi)較少,游戲內(nèi)容相關(guān)函數(shù)也并不完善,暫時(shí)不足以滿(mǎn)足編寫(xiě)模組的需求,隨著mojang的更新,更多事件及函數(shù)的加入將使得GameTest框架逐漸具備對(duì)游戲玩法進(jìn)行深入定制的能力,未來(lái)可期。

1.5 發(fā)展現(xiàn)狀

? ? ? GameTest框架的開(kāi)發(fā)仍處于初級(jí)階段,Mojang工作室近期在此方面的開(kāi)發(fā)與更新也較為活躍。截止本文最后一次修訂之日,已更新了11個(gè)事件,其中大致可以分為兩列:普通事件和before類(lèi)事件,before類(lèi)事件允許開(kāi)發(fā)者通過(guò)設(shè)定返回的事件對(duì)象的cancel屬性值來(lái)取消相應(yīng)的事件發(fā)生,例如通過(guò)設(shè)定BeforeChatEvent對(duì)象的cancel屬性為true可取消已發(fā)送聊天信息在消息欄的顯示。

已加入的事件列表(截止1.18.0.24版本)

? ? ? 同時(shí),官方人員曾透露稱(chēng),他們會(huì)考慮在新的API中加入數(shù)據(jù)儲(chǔ)存相關(guān)的內(nèi)容(注意是考慮,而非承諾XD),但為了保證安全性,肯定不會(huì)允許自由的讀寫(xiě)文件。

? ? ? 截止目前,GameTest框架的API接口并不完善,但已有開(kāi)發(fā)者使用這些相對(duì)簡(jiǎn)單的接口制作了一些有趣的小玩意兒。

第二章 簡(jiǎn)易入門(mén)

? ? ? 由于GameTest框架本質(zhì)還是屬于附加包中行為包的一部分,所以開(kāi)發(fā)相關(guān)內(nèi)容要求您對(duì)附加包開(kāi)發(fā)的基礎(chǔ)知識(shí)有一定了解,此處不再贅述。

2.1 清單文件配置

? ? ? GameTest框架是依托于行為包產(chǎn)生效用的,開(kāi)發(fā)者可通過(guò)在行為包的清單文件(manifest.json)中添加一個(gè)類(lèi)型為javascript的模塊來(lái)啟用它,如下所示:

? ? ? 與其他模塊的定義類(lèi)似,javascript模塊同樣需要定義描述、uuid、版本號(hào)等內(nèi)容,不同的是,這里的模塊類(lèi)型需要設(shè)置為javascript,同時(shí),相比其他模塊,javascript模塊多了一個(gè)entry屬性,用于指定入口腳本文件所在路徑,也就是被游戲執(zhí)行的腳本文件,如未指定,則游戲不會(huì)運(yùn)行,該路徑必須指向行為包根目錄中的scripts文件夾內(nèi)的某個(gè)目錄(可含子文件夾),示例中指定的文件為scripts文件夾下的main.js文件。也就是說(shuō),對(duì)于您的腳本文件來(lái)說(shuō)它的根目錄至少也得是行為包根目錄的scripts文件夾內(nèi)。

? ? ? 同時(shí),想要使用mojang-minecraft模塊與mojang-gametest模塊的接口,您必須在清單文件中添加對(duì)這兩個(gè)模塊的依賴(lài):

? ? ? 注意:此處的版本號(hào)與uuid都是固定的值,照抄即可,請(qǐng)勿更改。對(duì)于版本號(hào),在未來(lái)可能會(huì)隨著游戲版本的更新而更新,請(qǐng)注意關(guān)注官方的文檔以防止過(guò)時(shí)的版本號(hào)可能帶來(lái)的未知問(wèn)題。

? ? ? 此處完整的清單文件如下(注意使用自己的uuid):

2.2 腳本編寫(xiě)

? ? ? 配置好清單文件后,就可以開(kāi)始寫(xiě)代碼了。根據(jù)自古以來(lái)的慣例(x),此處實(shí)現(xiàn)一個(gè)Hello World的實(shí)例。按照entry指定的路徑創(chuàng)建好文件夾與js文件,此處我們?cè)谛袨榘夸浵滦陆ㄒ粋€(gè)scripts文件夾,并在其中新建一個(gè)main.js腳本文件,文件結(jié)構(gòu)如下:

? ? ? 向main.js中寫(xiě)入如下代碼:

? ? ? 上面的代碼實(shí)現(xiàn)了當(dāng)玩家進(jìn)入游戲后,在主世界內(nèi)會(huì)不停向聊天欄輸出一個(gè)Hello World信息的效果,由于是使用了tick事件,所以輸出的頻率為20次/秒。大致執(zhí)行過(guò)程是:玩家進(jìn)入游戲=>tick事件以20次/秒的頻率被觸發(fā)=>onTick函數(shù)以相同頻率被回調(diào)。

? ? ? 當(dāng)然由于此處只是訂閱了tick事件,并未對(duì)回調(diào)函數(shù)做出什么操作,所以onTick函數(shù)和之后的訂閱語(yǔ)句二者也可以簡(jiǎn)寫(xiě)成匿名函數(shù)的形式:

? ? ? 將行為包打包并導(dǎo)入游戲中,新建一個(gè)世界,應(yīng)用剛導(dǎo)入的行為包并將GameTest框架實(shí)驗(yàn)玩法打開(kāi),進(jìn)入游戲便可看到滿(mǎn)屏的Hello World了。

打開(kāi)GameTest框架實(shí)驗(yàn)玩法
上述代碼測(cè)試效果

? ? ? 此處只是提供了一個(gè)簡(jiǎn)單的入門(mén)教程,更多接口內(nèi)容請(qǐng)查閱官方的文檔(見(jiàn)參考文獻(xiàn)部分)。

結(jié)語(yǔ)與展望

?? ? ?本文綜述了GameTest框架是什么及其目前的發(fā)展?fàn)顩r,總的來(lái)說(shuō)GameTest框架還是個(gè)新生的事物,還需要官方的開(kāi)發(fā)與完善,但從目前寥寥幾個(gè)接口中我們也不難看出,它的潛力是巨大的。由于GameTest框架是全平臺(tái)可用(目前原主機(jī)平臺(tái)除外)的接口,這意味著移動(dòng)端也可使用此接口集合,這為其在國(guó)內(nèi)基巖版社區(qū)的發(fā)展提供了良好的基礎(chǔ),對(duì)于國(guó)內(nèi)基巖版爪機(jī)黨玩家來(lái)說(shuō)也是一個(gè)福音。同時(shí),就目前已更新的接口來(lái)看,GameTest框架對(duì)游戲玩法的定制能力無(wú)疑會(huì)比腳本引擎更加強(qiáng)大,官方開(kāi)發(fā)者memcpy曾在社區(qū)中表示:“/gametest指令與腳本(的開(kāi)發(fā)進(jìn)度)是齊頭并進(jìn)的......這(GameTest框架)是一個(gè)新的API集合,獨(dú)立于2018版(注:此處“2018版”指腳本引擎)”。從這段話(huà)中,至少可以確定的是,GameTest框架與腳本引擎之間的關(guān)系是相互獨(dú)立的,就我個(gè)人的觀點(diǎn)來(lái)看,甚至是迭代關(guān)系(修訂按:這一觀點(diǎn)在本文發(fā)布不久后的社區(qū)問(wèn)答中被證實(shí)了hhh)。至于GameTest框架是否真的會(huì)取代腳本引擎,就讓時(shí)間來(lái)告訴我們答案吧。

memcpy在社區(qū)內(nèi)的發(fā)言

?? ? ?本文發(fā)布不久后(2021.08.06),在官方舉辦一場(chǎng)關(guān)于GT框架的問(wèn)答會(huì)上,官方人員也表示腳本引擎將在GameTest框架覆蓋其現(xiàn)有內(nèi)容后被移除,這也標(biāo)志著腳本引擎這一舊腳本系統(tǒng)進(jìn)入了退出基巖版歷史舞臺(tái)的倒計(jì)時(shí),而GameTest框架作為基巖版的新一代腳本系統(tǒng),也正大踏步向前走去,基巖版附加包接口中的一顆新星,正在冉冉升起,還請(qǐng)各位擦亮雙眼,一同見(jiàn)證它的成長(zhǎng)吧。

參考文獻(xiàn)

[1]?微軟官方.創(chuàng)作者文檔.2021.https://docs.microsoft.com/en-us/minecraft/creator/

[2] Discord社群聊天記錄:Bedrock Addon頻道

[3]?Minecraft Wiki.2021.https://minecraft.fandom.com/wiki/Minecraft_Wiki

致謝

? ? ? 感謝Mojang Studio的開(kāi)發(fā)與工作,設(shè)計(jì)提供了架構(gòu)更加合理,功能更加強(qiáng)大的新一代腳本API給社區(qū),并提供了一些文檔供社區(qū)開(kāi)發(fā)者學(xué)習(xí),在GameTest框架的接口方面,官方的文檔給予了我很大幫助,同時(shí)Mojang工作人員與在社區(qū)的活躍發(fā)言及對(duì)新API相關(guān)問(wèn)題的解答也使得我對(duì)GameTest框架有了更加深入的了解,為此文的撰寫(xiě)提供了基礎(chǔ)。

? ? ? 同時(shí)在此文的撰寫(xiě)上,我也受到了許多開(kāi)發(fā)者同僚的幫助:感謝 @方法放寒假?提供的部分資料支持,咩咩對(duì)很多開(kāi)發(fā)技術(shù)相關(guān)內(nèi)容都很熟悉,在GameTest框架的發(fā)展歷史這塊內(nèi)容的編寫(xiě)上也多虧了他在群里提供的一些資料(知識(shí)儲(chǔ)備)才能夠?qū)懞谩8兄x?@yq?提供的部分資料(知識(shí)儲(chǔ)備)與靈感,感謝參與部分技術(shù)性名詞譯名敲定討論的開(kāi)發(fā)者們。

? ? ? 感謝各位花時(shí)間閱此拙作,希望能給各位帶來(lái)了些什么。






【綜述&教程】基于GameTest框架編寫(xiě)模組的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
密云县| 武川县| 太康县| 乌鲁木齐县| 扎赉特旗| 新沂市| 黄陵县| 新和县| 阿坝| 波密县| 炉霍县| 百色市| 民县| 大丰市| 崇左市| 罗山县| 广西| 广宁县| 仙游县| 安乡县| 安徽省| 栖霞市| 弥渡县| 新邵县| 宁武县| 普安县| 丰顺县| 乌兰察布市| 司法| 彝良县| 寿宁县| 浦东新区| 汝阳县| 油尖旺区| 钦州市| 小金县| 富民县| 铜山县| 灯塔市| 开封市| 湄潭县|