創造你的首個腳本插件
本指南旨在展示創建你的第一個插件的非常簡單和直接的過程--以及在考慮做什麼和如何做時的一些最佳做法。建議有使用JavaScript的經驗,但不是必須的。JavaScript是一種對初學者非常友好的語言,所以不要被淹沒了!
先決條件
在開發你的第一個插件之前,我們需要設置你的開發環境。你用來編程的軟件由你自己選擇,但建議使用可信和可靠的軟件。
你還需要建立一個乾淨的LeviLamina安裝,關於如何安裝LeviLamina的細節可以在 這裡 找到。這個服務器將被用來測試你的插件。
有了你的開發環境,並完成了服務器的安裝,你就可以開始了!
我現在該做什麼?
開發一個 LSE 插件,首先要創建你的插件文件夾和文件。在服務器安裝目錄的 plugins/ 文件夾中創建一個以插件命名的文件夾,例如
MyPlugin,並在其中創建你的腳本文件,例如 main.js。有些開發環境會允許你創建一個新文件並選擇一個位置,而其他開發環境則允許你在點擊"另存為"後才選擇。
接下來,在同一文件夾中創建 manifest.json 文件。這個文件用於向 LeviLamina 註冊你的插件:entry 是要運行的腳本文件,name
是插件名稱,type 指定由哪個引擎運行插件(JavaScript 為 lse-quickjs,其他引擎為 lse-nodejs、lse-lua 和
lse-python),dependencies 指定需要先加載的引擎(legacy-script-engine-quickjs、legacy-script-engine-nodejs、
legacy-script-engine-lua 或 legacy-script-engine-python)。
{
"entry": "main.js",
"name": "MyPlugin",
"type": "lse-quickjs",
"dependencies": [
{
"name": "legacy-script-engine-quickjs"
}
]
}如果你直接把單箇舊版腳本文件(例如 MyPlugin.js)放進 plugins/,LSE 會在服務器啟動時自動為它創建上述文件夾和
manifest.json;重啟服務器後,遷移後的插件就會被加載。
你可能會注意到,下面的代碼直接使用了 mc、log 等對象,卻沒有定義或導入它們。它們由 LegacyScriptEngine
提供,會在腳本運行時自動可用。這與你看到的任何其他沒有定義的變量/類的引用是一樣的。
現在我們已經創建了腳本文件和它的 manifest.json,接下來要做的就是創建一個事件監聽器。我們通過使用mc來實現。
mc.listen("onJoin", (player) => {
log(`${player.name}已经加入服务器。`);
});參考資料: 事件監聽文檔
為了測試你的插件,只需啟動服務器,服務器應該能夠識別你的插件併成功加載它。LeviLamina控制台將記錄您創建的任何日誌,以及您的插件或API失敗時的任何錯誤。開發時的迭代很重要。經常測試,每一步都要確保當問題出現時,你清楚地知道你改變了什麼,並能想出解決方案來解決它。
你可以引用mc類,以及其他特殊的類和構造函數。mc類是你的插件的麵包和黃油,將允許你做很多很酷的事情。遊戲內容接口有所有的方法和屬性供你使用。
參考:遊戲元素接口文檔
例如,我們可以使用玩家對象並直接對其採取行動,以發送信息/操縱玩家。
mc.listen("onJoin", (player) => {
log(`${player.name}已经加入服务器。`);
player.sendToast('欢迎!', '感谢您游玩本服!');
});我們可以引用玩家對象的屬性,並使用它來執行其他動作。
mc.listen("onJoin", (player) => {
log(`${player.name}已经加入服务器。`);
player.sendToast('欢迎!', '感谢您游玩本服!');
let loginReward = mc.newItem('minecraft:diamond', 1);
mc.spawnItem(loginReward, player.pos);
});這給我們帶來了最後的考慮。在製作插件時,儘量想一些簡單的、自我封閉的東西。每個開發者都想建立一個具有大量功能的大型插件,但這樣的項目很容易被放棄,因為它們從未真正完成。做一系列有特定目的的小插件。為這些插件添加功能,以實現配置和定製。找到你希望遊戲擁有的功能或事物,並使用LeviLamina中的方法來實現它們。使用LeviLamina的API確實有無限可能。
如果您在開發過程中遇到任何問題,可以通過加入LeviLamina 的相關交流群、在LegacyScriptEngine的GitHub倉庫上開立一個問題,來回答您的問題、意見或擔憂。