跳到正文
本頁目錄

💡 插件加載相關 API

這裡提供了一些與加載器操作相關的接口。

Properties

屬性類型描述
ll.languageStringLeviLamina使用的語言。(例如zh_Hans、en和ru_RU)
ll.majorInteger主版本號(如 2.1.0 裡的 2)
ll.minorInteger次版本號(如 2.1.0 裡的 1)
ll.revisionInteger修訂版本號(如 2.1.0 裡的 0)
ll.statusInteger版本狀態 (0為Dev, 1為Beta, 2為Release)
ll.scriptEngineVersionString腳本引擎的版本
ll.isWineBoolean是否處於Wine環境下
ll.isDebugModeBoolean是否處於debug模式
ll.isBetaBoolean當前版本是否為測試版
ll.isDevBoolean當前版本是否為開發版
ll.isReleaseBoolean當前版本是否為發佈版本
ll.pluginsRootStringLeviLamina模組的根目錄

獲取 LegacyScriptEngine 版本字符串

Warning

在0.9.6之前的版本中,該函數返回的是LeviLamina的版本。

ll.versionString()

  • 返回值:加載器版本
  • 返回值類型: String

獲取有關插件的信息

ll.getPluginInfo(name)

  • 參數:
    • name: String 插件名稱
  • 返回值: 插件對象
  • 返回值類型: 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 插件卸載時調用的函數

遠程函數調用

導出函數

為了可以讓開發者開發的前置插件能夠為其他插件提供接口和服務,這裡提供了遠程函數調用功能,讓一個原生模組或腳本 插件可以調用另一個插件中已有的函數。

ll.exports(func,namespace,name)

  • 參數:
    • func : Function
      要導出的函數
    • namespace : String
      函數的命名空間名,只是方便用於區分不同插件導出的API
    • name : String
      函數的導出名稱。其他插件根據導出名稱來調用這個函數
  • 返回值:是否成功導出
  • 返回值類型: Boolean

注意:如果導出的函數的命名空間和名字與另一個已經導出的函數完全相同,將會導出失敗。選定命名空間和導出名稱時請適當選擇。

導入函數

當你已經得知有插件導出函數之後,為了可以使用他導出的函數,首先需要將這個函數導入到你自己的腳本系統中
腳本引擎提供了接口 import 來導入其他插件已經導出的函數。

ll.imports(namespace,name)

  • 參數:
    • namespace : String
      要導入的函數使用的命名空間名稱
    • name : String
      要導入的函數使用的導出名稱
  • 返回值:導入的函數
  • 返回值類型: Function

ll.imports 的返回值是一個函數。當你調用這個函數時,跨插件調用的流程將在後臺自動完成。調用函數的參數將被包裝並傳遞給遠程函數,此函數的返回值即是遠程函數執行完畢之後返回的返回值。

遠程調用參數類型對照,其中Type可以為其他受支持的類型

C++層類型腳本引擎類型內部類型(備註)
std::nullptr_tNullstd::nullptr_t
boolBooleanbool
__int64, double...Integer / FloatRemoteCall::NumberType
std::stringStringstd::string
std::vector<Type>Arraystd::vector<Type>
std::unordered_map<std::string,Type>Objectstd::unordered_map<std::string,Type>
Actor*EntityActor*
Player*PlayerPlayer*
ItemStack*, std::unique_ptr<ItemStack>ItemRemoteCall::ItemType
Block*, BlockInstanceBlockRemoteCall::BlockType
BlockActor*BlockEntityBlockActor*
Container*ContainerContainer*
Vec3,std::pair<Vec3,int>FloatPosRemoteCall::WorldPosType
BlockPos,std::pair<BlockPos, int>IntPosRemoteCall::BlockPosType
CompoundTag*,std::unique_ptr<CompoundTag>NbtCompoundRemoteCall::NbtType

遠程調用函數舉例說明

比如,有一個插件導出了某個函數,函數導出使用的命名空間為 AAA,導出函數名稱為 Welcome
當你使用 welcome = ll.imports("AAA","Welcome"); 完成導入之後,你就可以直接在下面執行:

welcome("hello",2,true);

函數的參數將被自動轉發到對應的目標函數執行,執行完畢之後將返回回應的目標函數的返回值,整個過程都是自動完成的。

注意!在調用函數的時候,需要保證你傳入的參數和目標函數接受的參數數量和類型都是正確且一一對應的。否則,將會發生錯誤。

判斷遠程函數是否已導出

ll.hasExported(namespace,name)

  • 參數:
    • namespace : String
      函數使用的命名空間名稱
    • name : String
      函數使用的導出名稱
  • 返回值:函數是否已導出
  • 返回值類型: Boolean

將字符串作為腳本代碼執行

ll.eval(str)

  • 參數:
    • str : String
      要作為腳本代碼執行的字符串
  • 返回值:執行結果
  • 返回值類型: 任意类型