💡 插件加載相關 API
這裡提供了一些與加載器操作相關的接口。
Properties
| 屬性 | 類型 | 描述 |
|---|---|---|
ll.language | String | LeviLamina使用的語言。(例如zh_Hans、en和ru_RU) |
ll.major | Integer | 主版本號(如 2.1.0 裡的 2) |
ll.minor | Integer | 次版本號(如 2.1.0 裡的 1) |
ll.revision | Integer | 修訂版本號(如 2.1.0 裡的 0) |
ll.status | Integer | 版本狀態 (0為Dev, 1為Beta, 2為Release) |
ll.scriptEngineVersion | String | 腳本引擎的版本 |
ll.isWine | Boolean | 是否處於Wine環境下 |
ll.isDebugMode | Boolean | 是否處於debug模式 |
ll.isBeta | Boolean | 當前版本是否為測試版 |
ll.isDev | Boolean | 當前版本是否為開發版 |
ll.isRelease | Boolean | 當前版本是否為發佈版本 |
ll.pluginsRoot | String | LeviLamina模組的根目錄 |
獲取 LegacyScriptEngine 版本字符串
Warning
在0.9.6之前的版本中,該函數返回的是LeviLamina的版本。
ll.versionString()
- 返回值:加載器版本
- 返回值類型:
String
獲取有關插件的信息
ll.getPluginInfo(name)
- 參數:
- name:
String插件名稱
- name:
- 返回值: 插件對象
- 返回值類型:
Plugin- 對於返回的某個插件對象 plugin,有如下這些屬性:
| 屬性 | 描述 | 類型 |
|---|---|---|
| plugin.name | 插件名稱 | String |
| plugin.desc | 插件描述 | String |
| plugin.type | 插件類型 | String |
| plugin.version | 插件版本(數組形式) | Array<Integer,Integer,Integer> |
| plugin.versionStr | 插件版本 | String |
| plugin.filePath | 插件路徑 | String |
| plugin.others | 其他信息 | Object |
獲取當前插件的信息
ll.getCurrentPluginInfo()
- 返回值: 插件對象
- 返回值類型:
Plugin
列出所有已加載的插件
ll.listPlugins()
- 返回值:已加載的所有的插件名字列表
- 返回值類型:
Array<String,String,...>
列出所有加載的插件信息
ll.getAllPluginInfo()
- 返回值: 包含所有已加載插件的插件對象的列表
- 返回值類型:
Array<Plugin,Plugin,...>
設置插件卸載時調用的函數
Warning
該函數僅在0.9.6及更高版本中可用。
ll.onUnload(func)
- 參數:
- func:
Function插件卸載時調用的函數
- func:
遠程函數調用
導出函數
為了可以讓開發者開發的前置插件能夠為其他插件提供接口和服務,這裡提供了遠程函數調用功能,讓一個原生模組或腳本 插件可以調用另一個插件中已有的函數。
ll.exports(func,namespace,name)
- 參數:
- func :
Function
要導出的函數 - namespace :
String
函數的命名空間名,只是方便用於區分不同插件導出的API - name :
String
函數的導出名稱。其他插件根據導出名稱來調用這個函數
- func :
- 返回值:是否成功導出
- 返回值類型:
Boolean
注意:如果導出的函數的命名空間和名字與另一個已經導出的函數完全相同,將會導出失敗。選定命名空間和導出名稱時請適當選擇。
導入函數
當你已經得知有插件導出函數之後,為了可以使用他導出的函數,首先需要將這個函數導入到你自己的腳本系統中
腳本引擎提供了接口 import 來導入其他插件已經導出的函數。
ll.imports(namespace,name)
- 參數:
- namespace :
String
要導入的函數使用的命名空間名稱 - name :
String
要導入的函數使用的導出名稱
- namespace :
- 返回值:導入的函數
- 返回值類型:
Function
ll.imports 的返回值是一個函數。當你調用這個函數時,跨插件調用的流程將在後臺自動完成。調用函數的參數將被包裝並傳遞給遠程函數,此函數的返回值即是遠程函數執行完畢之後返回的返回值。
遠程調用參數類型對照,其中Type可以為其他受支持的類型
| C++層類型 | 腳本引擎類型 | 內部類型(備註) |
|---|---|---|
std::nullptr_t | Null | std::nullptr_t |
bool | Boolean | bool |
__int64, double... | Integer / Float | RemoteCall::NumberType |
std::string | String | std::string |
std::vector<Type> | Array | std::vector<Type> |
std::unordered_map<std::string,Type> | Object | std::unordered_map<std::string,Type> |
Actor* | Entity | Actor* |
Player* | Player | Player* |
ItemStack*, std::unique_ptr<ItemStack> | Item | RemoteCall::ItemType |
Block*, BlockInstance | Block | RemoteCall::BlockType |
BlockActor* | BlockEntity | BlockActor* |
Container* | Container | Container* |
Vec3,std::pair<Vec3,int> | FloatPos | RemoteCall::WorldPosType |
BlockPos,std::pair<BlockPos, int> | IntPos | RemoteCall::BlockPosType |
CompoundTag*,std::unique_ptr<CompoundTag> | NbtCompound | RemoteCall::NbtType |
遠程調用函數舉例說明
比如,有一個插件導出了某個函數,函數導出使用的命名空間為 AAA,導出函數名稱為 Welcome
當你使用 welcome = ll.imports("AAA","Welcome"); 完成導入之後,你就可以直接在下面執行:
welcome("hello",2,true);
函數的參數將被自動轉發到對應的目標函數執行,執行完畢之後將返回回應的目標函數的返回值,整個過程都是自動完成的。
注意!在調用函數的時候,需要保證你傳入的參數和目標函數接受的參數數量和類型都是正確且一一對應的。否則,將會發生錯誤。
判斷遠程函數是否已導出
ll.hasExported(namespace,name)
- 參數:
- namespace :
String
函數使用的命名空間名稱 - name :
String
函數使用的導出名稱
- namespace :
- 返回值:函數是否已導出
- 返回值類型:
Boolean
將字符串作為腳本代碼執行
ll.eval(str)
- 參數:
- str :
String
要作為腳本代碼執行的字符串
- str :
- 返回值:執行結果
- 返回值類型:
任意类型