LSE 插件開發概述
⛳ 放在前面
LegacyScriptEngine(以下簡稱LSE/腳本引擎)是一個 Minecraft 基岩版專用服務器 Bedrock Dedicated Server(以下簡稱BDS)的插件框架,提供強大的跨語言腳本插件支持能力和穩定的開發API支持。
歡迎參與到腳本引擎的插件開發中來!
從這裡開始,你將逐步熟悉腳本插件開發的基本要素和流程。
在接觸開發之前,你需要對腳本引擎有一個成體系的認識。這裡的文檔,首先將幫助你建立一個大概的知識框架。
首先熟悉他們,這將是你學習開發的過程中非常重要的一環。
💊 數據類型
眾所周知,類型系統通常都是一個設計框架中比較關鍵的部分。
因此,首先,你需要熟悉幾種在使用 API 文檔的過程中會頻繁用到的數據類型。
這些數據類型的名詞會頻繁出現在開發文檔當中,請務必首先對他們足夠熟悉。
通用數據類型約定
雖然腳本語言通常是弱類型的,不需要關注具體的數據類型,但由於腳本引擎支持多種不同的腳本語言,為了方便對接API,下面定義一些通用的數據類型,以及到對應腳本語言類型的映射關係。
| 引擎數據類型 | JavaScript 數據類型 | Lua 數據類型 | 數據類型說明 |
|---|---|---|---|
Null | null/undefined | nil | 空,未定義,不存在等等 |
Integer | Number | number | 整數 |
Float | Number | number | 浮點數(小數,實數) |
String | String | string | 字符串 |
Boolean | Boolean | boolean | 布爾型 |
Function | Function | function | 函數(方法) |
Array | Array | table | 數組(列表) |
Object | Object | table | 對象(映射,字典,表) |
ByteBuffer | ArrayBuffer | table | 字節數組 |
文檔中的 任意类型 表示可以使用上述任意一種類型的值。
除了上述了標準類型之外,還存在一些引擎自定義的對象類型。
IntPos- 整數 座標對象(詳見 基礎遊戲接口)FloatPos- 浮點數 座標對象(詳見 基礎遊戲接口)Player- 玩家對象(詳見 玩家)- 在腳本引擎內實際註冊的類名:LLSE_PlayerEntity- 實體對象(詳見 實體)- 在腳本引擎內實際註冊的類名:LLSE_EntityBlock- 方塊對象(詳見 方塊)- 在腳本引擎內實際註冊的類名:LLSE_BlockBlockEntity- 方塊實體對象(詳見 方塊實體)- 在腳本引擎內實際註冊的類名:LLSE_BlockEntityItem- 物品欄物品對象(詳見 物品)- 在腳本引擎內實際註冊的類名:LLSE_ItemDevice- 玩家設備信息對象(詳見 玩家)- 在腳本引擎內實際註冊的類名:LLSE_DeviceContainer- 容器對象(詳見 容器)- 在腳本引擎內實際註冊的類名:LLSE_ContainerObjective- 計分項對象(詳見 計分板)- 在腳本引擎內實際註冊的類名:LLSE_ObjectivePacket- 數據包對象(詳見 數據包)- 在腳本引擎內實際註冊的類名:LLSE_PacketNBT- NBT Tag對象(詳見 NBT)SimpleForm- 普通表單對象(詳見 表單構建器)- 在腳本引擎內實際註冊的類名:LLSE_SimpleFormCustomForm- 自定義表單對象(詳見 表單構建器)- 在腳本引擎內實際註冊的類名:LLSE_CustomFormConf- 配置文件對象(詳見 配置文件)DB- 數據庫對象(詳見 數據庫)File- 文件對象(詳見 文件讀寫)WSClient- WebSocket 客戶端對象(詳見 網絡)Enum- 枚舉類型,通常儲存於某些類型中,提供一些限定範圍的可選項
📌 API文檔描述約定
眾所周知,一個好的幫助文檔自然離不開統一簡潔的格式和一目瞭然的外觀。
因此,為了文檔的格式統一和規範,接下來,需要統一規定一下腳本引擎的幫助文檔描述約定。
對於接下來你看到的所有API文檔,都有這樣的寫作規則:
-
關於文檔中對 函數參數類型 的描述:
函數參數將按照 參數名 : 參數類型 格式描述
例如: cmd :String表示一個字符串類型的變量cmd
如果參數類型出現Array<...>表示一個以<>內的變量為內容的數組 / 列表 -
關於文檔中對 可選參數 的描述:
如果在參數描述處出現可选参数則代表你可以不傳入這個參數。
當你不傳入這個參數的時候,引擎將使用描述中給出的默認值。
在API接口參數中,可選參數會被[ ]框起來。
形如:pl.tell(msg[,type]),這裡的type就屬於可選參數
在熟悉上面這些基礎設施之後,你可以開始逐步閱讀其他各特定內容的文檔了。
如果碰到遺忘了的東西,可以多翻回來看看。
📜 插件開發小貼士
這裡,有一些在開發插件的時候的建議,希望可以幫到你
- 不要重複造輪子
在條件允許的情況下,儘量使用他人已經編寫好的特定功能的庫,而不是每個功能都自己編寫一遍。這樣,有利於生態的整合和發展。 - 為用戶思考
在設計界面和配置的時候,最好考慮到用戶的感受。UI和命令等對外交互的內容儘量做到清晰和一目瞭然,符合常規的使用習慣。 - 多角度思考創新
鼓勵大家向其他平臺已有的優秀插件學習,也歡迎大家作出自己的創新。
📡 調試插件
你可以輸入這些命令來進入相應的調試模式:
jsdebug: JavaScript調試模式nodejsdebug: Node.js調試模式luadebug: Lua調試模式pydebug: Python調試模式
在調試模式下,你輸入的所有文本將被解析為腳本並實時執行,就像瀏覽器的開發工具的控制台那樣。如果發生任何錯誤,你會看到一個錯誤報告。
你可以再次輸入相同的命令(jsdebug/nodejsdebug/luadebug/pydebug)並回車以退出調試模式。