Skip to content

manifest.json ​

每个 Mod 都必须有一个 manifest.json。上传到服务器时填写的表单字段与这里的字段一一对应。

字段 ​

字段类型必填默认说明
idstring✅—唯一标识。仅允许 a-z、0-9、-,且首字符为字母或数字(正则 ^[a-z0-9][a-z0-9-]*$,大小写不敏感)
namestring✅—显示名称
versionstring1.0.0语义化版本,用于缓存与更新判断
authorstringanonymous / unknown作者名
descriptionstring''一句话说明,浏览页会显示
mainstringindex.js入口文件名(相对 /mods/<id>/);也允许是绝对 URL(上传的 Mod 走这条)
tagsstring[][]标签,用于浏览页搜索与展示
permissionsstring[][]声明需要的能力(声明式,便于审计与后续校验)
dependenciesstring[][]依赖的其他 Mod id;安装时会检查它们是否已安装
hashstringnull代码哈希(上传接口字段,可选,用于完整性校验)

完整示例 ​

json
{
  "id": "auto-highlight",
  "name": "自动高亮敌人",
  "version": "1.0.0",
  "author": "findor-team",
  "description": "进入战斗时自动高亮所有敌人",
  "main": "index.js",
  "tags": ["战斗", "高亮", "自动化"],
  "permissions": ["features", "models", "events", "commands", "storage"],
  "dependencies": []
}

permissions 可声明项 ​

值对应能力
features通过 ctx.features 挂载自己的功能开关
modelsctx.models(访问游戏 Model 实例与 gameObject)
eventsctx.events(订阅全局事件,见事件清单)
commandsctx.commands(注册 / <modId>:name 聊天命令)
storagectx.storage(按 Mod 隔离的 localStorage 存储)
protocolctx.protocol(C→S 发包、S→C 本地调用、包钩子)
uictx.ui(通知、自定义页面、对话框)
actionsctx.actions(拦截/改写游戏 Action)

权限目前是声明式的

加载器会保存 permissions 字段,但当前不做强制拦截——即声明了什么并不限制调用什么。请自觉只声明并只使用你真正需要的能力。

依赖与加载顺序 ​

dependencies 里的 Mod 必须已安装,否则安装会被拒绝并提示 缺少依赖: <id>。加载器会在启用时按依赖关系做拓扑排序,被依赖者先启用。

id 冲突 ​

同一个 id 不能重复:

  • 种子目录:mods/<id>/ 目录名即 id,与 registry.json 中的条目一一对应
  • 上传接口:服务端会先查 KV mod:<id>,已存在则返回 409 Mod already exists(并在响应里带上已存在的记录)

下一步:ctx 全量 API · 发布与安装

仅供学习交流 · 请在遵守游戏与服务条款的前提下使用