跳到正文
本頁目錄

LSE 插件開發概述

⛳ 放在前面

LegacyScriptEngine(以下簡稱LSE/腳本引擎)是一個 Minecraft 基岩版專用服務器 Bedrock Dedicated Server(以下簡稱BDS)的插件框架,提供強大的跨語言腳本插件支持能力和穩定的開發API支持。

歡迎參與到腳本引擎的插件開發中來!

從這裡開始,你將逐步熟悉腳本插件開發的基本要素和流程。

在接觸開發之前,你需要對腳本引擎有一個成體系的認識。這裡的文檔,首先將幫助你建立一個大概的知識框架。
首先熟悉他們,這將是你學習開發的過程中非常重要的一環。

💊 數據類型

眾所周知,類型系統通常都是一個設計框架中比較關鍵的部分。
因此,首先,你需要熟悉幾種在使用 API 文檔的過程中會頻繁用到的數據類型。
這些數據類型的名詞會頻繁出現在開發文檔當中,請務必首先對他們足夠熟悉。

通用數據類型約定

雖然腳本語言通常是弱類型的,不需要關注具體的數據類型,但由於腳本引擎支持多種不同的腳本語言,為了方便對接API,下面定義一些通用的數據類型,以及到對應腳本語言類型的映射關係。

引擎數據類型JavaScript 數據類型Lua 數據類型數據類型說明
Nullnull/undefinednil空,未定義,不存在等等
IntegerNumbernumber整數
FloatNumbernumber浮點數(小數,實數)
StringStringstring字符串
BooleanBooleanboolean布爾型
FunctionFunctionfunction函數(方法)
ArrayArraytable數組(列表)
ObjectObjecttable對象(映射,字典,表)
ByteBufferArrayBuffertable字節數組

文檔中的 任意类型 表示可以使用上述任意一種類型的值。

除了上述了標準類型之外,還存在一些引擎自定義的對象類型。

  • IntPos - 整數 座標對象(詳見 基礎遊戲接口)
  • FloatPos - 浮點數 座標對象(詳見 基礎遊戲接口)
  • Player - 玩家對象(詳見 玩家)- 在腳本引擎內實際註冊的類名:LLSE_Player
  • Entity - 實體對象(詳見 實體)- 在腳本引擎內實際註冊的類名:LLSE_Entity
  • Block - 方塊對象(詳見 方塊)- 在腳本引擎內實際註冊的類名:LLSE_Block
  • BlockEntity - 方塊實體對象(詳見 方塊實體)- 在腳本引擎內實際註冊的類名:LLSE_BlockEntity
  • Item - 物品欄物品對象(詳見 物品)- 在腳本引擎內實際註冊的類名:LLSE_Item
  • Device - 玩家設備信息對象(詳見 玩家)- 在腳本引擎內實際註冊的類名:LLSE_Device
  • Container - 容器對象(詳見 容器)- 在腳本引擎內實際註冊的類名:LLSE_Container
  • Objective - 計分項對象(詳見 計分板)- 在腳本引擎內實際註冊的類名:LLSE_Objective
  • Packet - 數據包對象(詳見 數據包)- 在腳本引擎內實際註冊的類名:LLSE_Packet
  • NBT - NBT Tag對象(詳見 NBT)
  • SimpleForm - 普通表單對象(詳見 表單構建器)- 在腳本引擎內實際註冊的類名:LLSE_SimpleForm
  • CustomForm - 自定義表單對象(詳見 表單構建器)- 在腳本引擎內實際註冊的類名:LLSE_CustomForm
  • Conf - 配置文件對象(詳見 配置文件)
  • DB - 數據庫對象(詳見 數據庫)
  • File - 文件對象(詳見 文件讀寫)
  • WSClient - WebSocket 客戶端對象(詳見 網絡)
  • Enum - 枚舉類型,通常儲存於某些類型中,提供一些限定範圍的可選項

📌 API文檔描述約定

眾所周知,一個好的幫助文檔自然離不開統一簡潔的格式和一目瞭然的外觀。
因此,為了文檔的格式統一和規範,接下來,需要統一規定一下腳本引擎的幫助文檔描述約定。

對於接下來你看到的所有API文檔,都有這樣的寫作規則:

  1. 關於文檔中對 函數參數類型 的描述:
    函數參數將按照 參數名 : 參數類型 格式描述
    例如: cmd : String 表示一個字符串類型的變量cmd
    如果參數類型出現Array<...>表示一個以<>內的變量為內容的數組 / 列表

  2. 關於文檔中對 可選參數 的描述:
    如果在參數描述處出現 可选参数 則代表你可以不傳入這個參數。
    當你不傳入這個參數的時候,引擎將使用描述中給出的默認值。
    在API接口參數中,可選參數會被[ ]框起來。
    形如:pl.tell(msg[,type]),這裡的type就屬於可選參數

在熟悉上面這些基礎設施之後,你可以開始逐步閱讀其他各特定內容的文檔了。
如果碰到遺忘了的東西,可以多翻回來看看。

📜 插件開發小貼士

這裡,有一些在開發插件的時候的建議,希望可以幫到你

  • 不要重複造輪子
    在條件允許的情況下,儘量使用他人已經編寫好的特定功能的庫,而不是每個功能都自己編寫一遍。這樣,有利於生態的整合和發展。
  • 為用戶思考
    在設計界面和配置的時候,最好考慮到用戶的感受。UI和命令等對外交互的內容儘量做到清晰和一目瞭然,符合常規的使用習慣。
  • 多角度思考創新
    鼓勵大家向其他平臺已有的優秀插件學習,也歡迎大家作出自己的創新。

📡 調試插件

你可以輸入這些命令來進入相應的調試模式:

  • jsdebug: JavaScript調試模式
  • nodejsdebug: Node.js調試模式
  • luadebug: Lua調試模式
  • pydebug: Python調試模式

在調試模式下,你輸入的所有文本將被解析為腳本並實時執行,就像瀏覽器的開發工具的控制台那樣。如果發生任何錯誤,你會看到一個錯誤報告。

你可以再次輸入相同的命令(jsdebug/nodejsdebug/luadebug/pydebug)並回車以退出調試模式。