跳到正文
本頁目錄

創造你的首個腳本插件

本指南旨在展示創建你的第一個插件的非常簡單和直接的過程--以及在考慮做什麼和如何做時的一些最佳做法。建議有使用JavaScript的經驗,但不是必須的。JavaScript是一種對初學者非常友好的語言,所以不要被淹沒了!

先決條件

在開發你的第一個插件之前,我們需要設置你的開發環境。你用來編程的軟件由你自己選擇,但建議使用可信和可靠的軟件。

  • Atom 是輕量級的編輯器,在本教程中很好用。
  • VSCode 也是一個廣泛使用的編輯器,具有很多強大的功能。

你還需要建立一個乾淨的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)。

JSON
{
    "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來實現。

JavaScript
mc.listen("onJoin", (player) => {
    log(`${player.name}已经加入服务器。`);
});

參考資料: 事件監聽文檔

為了測試你的插件,只需啟動服務器,服務器應該能夠識別你的插件併成功加載它。LeviLamina控制台將記錄您創建的任何日誌,以及您的插件或API失敗時的任何錯誤。開發時的迭代很重要。經常測試,每一步都要確保當問題出現時,你清楚地知道你改變了什麼,並能想出解決方案來解決它。

你可以引用mc類,以及其他特殊的類和構造函數。mc類是你的插件的麵包和黃油,將允許你做很多很酷的事情。遊戲內容接口有所有的方法和屬性供你使用。

參考:遊戲元素接口文檔

例如,我們可以使用玩家對象並直接對其採取行動,以發送信息/操縱玩家。

JavaScript
mc.listen("onJoin", (player) => {
    log(`${player.name}已经加入服务器。`);
    player.sendToast('欢迎!', '感谢您游玩本服!');
});

我們可以引用玩家對象的屬性,並使用它來執行其他動作。

JavaScript
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倉庫上開立一個問題,來回答您的問題、意見或擔憂。