模块与行为包管理
在 SFMC 中,服务器的功能与玩法(如经济、领地、挂机检测、菜单等)均以独立的功能模块(Module)形式提供。
本文介绍如何在服务器中搜索、安装、启停模块,以及系统如何将多个独立模块自动装配为原生 BDS 行为包。
如果希望自行开发与发布模块,请查阅 模块开发指南。
1. 模块体系结构
SFMC 模块采用模块化设计与集中打包:
- npm 分发:模块以标准 npm 包发布(官方模块如
@sfmc-bds/module-economy,社区模块如@author/sfmc-module-myfeature),具备明确的语义化版本。 - 社区索引:
sfmc-modules仓库维护可用模块目录,供 CLI 检索与下载。 - 动态组装:已启用的所有模块会在开服前由打包工具自动编译并整合为单个行为包
sfmc-modules,直接注入当前世界。
2. 常用管理命令
在 sfmc 控制台或终端中,可通过 mod 子命令进行模块管理:
检索与安装
安装源说明(--from):
- 默认从 npm 源安装:
@sfmc-bds/module-<id>或@scope/sfmc-module-<id>。 - 支持本地目录软链接(便于本地调试):
sfmc mod install <id> --from dir:<绝对路径> --link。
启停与卸载
mod list 输出说明
执行 mod list 会扫描 <SFMC_ROOT>/modules/packages/ 下的所有模块,输出格式示例如下:
状态符号说明:
字段含义:
id:模块安装目录名。当目录名与模块内部manifest.json的逻辑 ID 不一致时,显示为目录名(逻辑ID)。执行mod enable/mod disable时支持使用任一名称。state:当前启停状态(on表示参与行为包编译,off表示排除)。files/size:模块源码文件数与总体积(已排除node_modules、.git等目录)。fingerprint:模块当前代码的 SHA-256 指纹截断,用于判断是否需要重新打包。
mod enable 与 mod disable 会将状态持久化写入 <SFMC_ROOT>/modules/module-lock.json。
在 BDS 运行期间修改了模块状态后,必须执行 mod reload 或重启 BDS 才能在游戏中生效。
3. 行为包装配机制
当安装了多个模块时,SFMC 会在开服前自动合并模块代码并注入权限:
产物路径一览
装配流程
收集模块清单
扫描 modules/packages/*/sapi 下的所有模块,读取其 manifest.json 声明的依赖与权限。
过滤启停状态
依据 modules/module-lock.json 中标记为 "enabled": true 的模块进行筛选,禁用模块不参与编译。
编译整合
以 installHostBootstrap() 宿主脚本为入口,使用 esbuild 将各模块代码编译合并为 scripts/main.js。
部署至世界
将生成产物同步至世界的 behavior_packs 目录,并更新 world_behavior_packs.json 声明。
若服主禁用了所有模块,装配系统仍会生成一个合法的空行为包骨架,确保服务端不会因资源包缺失报错。
4. 本地开发挂接(--link)
模块开发者在本地开发时,可通过软链接(Symlink)挂接作者本地仓库进行调试:
配合 VS Code / Cursor 官方扩展 SFMC Module 的 Watch 功能,保存代码时扩展会自动增量编译并通知 BDS 热重载。
5. 模块索引目录
以下模块列表在构建文档站时自动拉取自官方 sfmc-modules 索引库:
来源:https://raw.githubusercontent.com/Tanya7z/sfmc-modules/main/index.json · 17 个模块
| id | tag | 安装 |
|---|---|---|
activity-log | — | sfmc> mod install activity-log |
afk | — | sfmc> mod install afk |
area | — | sfmc> mod install area |
chat | — | sfmc> mod install chat |
chat-sounds | — | sfmc> mod install chat-sounds |
clean | — | sfmc> mod install clean |
coop | — | sfmc> mod install coop |
data-backup | — | sfmc> mod install data-backup |
economy | — | sfmc> mod install economy |
fly-area | — | sfmc> mod install fly-area |
gamemode-area | — | sfmc> mod install gamemode-area |
inventory-switcher | — | sfmc> mod install inventory-switcher |
land | — | sfmc> mod install land |
online-time | — | sfmc> mod install online-time |
peace-area | — | sfmc> mod install peace-area |
qa | — | sfmc> mod install qa |
spawn-protect | — | sfmc> mod install spawn-protect |
跨模块调用接口请查阅 模块服务调用目录。