跳到正文
本頁目錄

Mod API

作用

Mod API 是原生模組的生命週期入口。它使用 <pl/Mod.hpp>、 ll::mod::NativeMod::current(),以及通過 PL_REGISTER_MOD 註冊的長期存活 C++ 對象。

頭文件

C++
#include <pl/Mod.hpp>

註冊

C++
#include <pl/Mod.hpp>

class MyMod {
public:
  static MyMod &instance();

  MyMod();

  [[nodiscard]] ll::mod::NativeMod &getSelf() const { return mSelf; }

  bool load();
  bool enable();
  bool disable();
  bool unload();

private:
  ll::mod::NativeMod &mSelf;
};

PL_REGISTER_MOD(MyMod, MyMod::instance())
C++
MyMod::MyMod() : mSelf(*ll::mod::NativeMod::current()) {}

load() 是必需的。enable()、disable()、unload() 是可選的;缺失時註冊 helper 會按成功處理。

每個原生模組庫在一個源文件中使用一次 PL_REGISTER_MOD。

生命週期

方法建議職責
load()讀取配置、創建目錄、準備模組自有狀態。
enable()註冊 hook、input callback 和運行期 UI。
disable()撤銷面向遊戲的行為並註銷運行期 UI。
unload()在 disable 後釋放剩餘 C++ 狀態。

每個方法成功返回 true,失敗返回 false。

NativeMod

ll::mod::NativeMod 提供 manifest 元數據、包路徑、Java VM、生命週期狀態和模組 專屬 logger。

C++
bool MyMod::load() {
  auto &self = getSelf();
  std::filesystem::create_directories(self.getConfigDir());
  self.getLogger().info("Loading {}", self.getName());
  return true;
}

常用成員:

成員用途
getJavaVM()當前 JavaVM *。
getLogger()當前模組的 pl::log::Logger。
getId()穩定的運行期模組 id。
getName()manifest 中的顯示名。
getAuthor()manifest 中的作者。
getVersion()manifest 中的版本。
getEntryPath()已解析的入口文件路徑。
getEntryFileName()manifest 中的入口文件名。
getIconPath()已解析的圖標路徑,未配置時為空路徑。
getModDir()模組包根目錄。
getDataDir()<mod root>/data。
getConfigDir()<mod root>/config。
getResourceDir()<mod root>/resources。
getManifestPath()已解析的 manifest.json 路徑。
getLibraryPath()已解析的 native library 路徑。
getState()當前原生模組生命週期狀態。
isLoaded() / isEnabled() / isDisabled()常用狀態判斷。

運行期 UI、浮動按鈕和 HUD 覆蓋層繪製見 Mod Menu API。

注意

  • 註冊實例必須在進程生命週期內保持有效。
  • 不要讓異常跨越生命週期邊界;捕獲失敗並返回 false。
  • 用戶可編輯配置應放在 getSelf().getConfigDir() 下。