Skip to content

Mod API

作用

Mod API 是 native mod 的生命周期入口。它使用 <pl/Mod.hpp>ll::mod::NativeMod::current(),以及通过 PL_REGISTER_MOD 注册的长期存活 C++ 对象。

头文件

cpp
#include <pl/Mod.hpp>

注册

cpp
#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())
cpp
MyMod::MyMod() : mSelf(*ll::mod::NativeMod::current()) {}

load() 是必需的。enable()disable()unload() 是可选的;缺失时注册 helper 会按成功处理。

每个 native mod library 在一个源文件中使用一次 PL_REGISTER_MOD

生命周期

方法建议职责
load()读取配置、创建目录、准备 mod 自有状态。
enable()注册 hook、input callback 和运行期 UI。
disable()撤销面向游戏的行为并注销运行期 UI。
unload()在 disable 后释放剩余 C++ 状态。

每个方法成功返回 true,失败返回 false

NativeMod

ll::mod::NativeMod 提供 manifest 元数据、包路径、Java VM、生命周期状态和 mod 专属 logger。

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

常用成员:

成员用途
getJavaVM()当前 JavaVM *
getLogger()当前 mod 的 pl::log::Logger
getId()稳定运行期 mod id。
getName()manifest 中的显示名。
getAuthor()manifest 中的作者。
getVersion()manifest 中的版本。
getEntryPath()已解析的入口文件路径。
getEntryFileName()manifest 中的入口文件名。
getIconPath()已解析的图标路径,未配置时为空路径。
getModDir()mod 包根目录。
getDataDir()<mod root>/data
getConfigDir()<mod root>/config
getResourceDir()<mod root>/resources
getManifestPath()已解析的 manifest.json 路径。
getLibraryPath()已解析的 native library 路径。
getState()当前 native mod 生命周期状态。
isLoaded() / isEnabled() / isDisabled()常用状态判断。

运行期 UI、浮动按钮和 HUD 覆盖层绘制见 Mod Menu API

注意

  • 注册实例必须在进程生命周期内保持有效。
  • 不要让异常跨越生命周期边界;捕获失败并返回 false
  • 用户可编辑配置应放在 getSelf().getConfigDir() 下。