一套 Minecraft Bedrock Script API (SAPI) 行为包 + Node.js 仓顶服务的 monorepo。
- 提供基于Minecraft SAPI的原生SDK
- 外置模块化管理
- 多功能、适用BDS的cli工具
- 为模块提供Sqlite数据库管理SDK及其路由服务
- 依赖与LLBOT的QQ桥接,群服互通服务
SFMC 把 Minecraft SAPI扩成一套完整的服务端体系:
- 模块化设计体系,基于
modules/packages/<id>/的模块包结构 —— 通过modules/catalog.json注册并由ModuleRegistry装载 - 仓顶服务 (
db-serverSQLite REST API /qq-bridgeQ群 ⇄ 服务器互通 /bds-toolsBDS 进程管理) - 使用 sea 打包的 cli 程序 —— 一键启动与管理BDS及SFMC的相关服务,上手简单,即开即用
- SDK 工具包
@sfmc/sdk—— 位于modules/sdk/@sfmc-sdk/,跨 SAPI / Node 两侧共享底层契约,让原生脚本的开发更加顺畅与强大。
flowchart TB
%% ============== BDS 侧 ==============
subgraph BDS["Minecraft BDS (host)"]
BP["BP 进程<br/>behavior_packs/.../scripts/main.js"]
INST["模块实例 (SAPI 进程内)<br/>catalog.json 中 enabled 的模块"]
REG["ModuleRegistry<br/>register / bootAll / bootAfterWorldLoad"]
CONF["ConfigManager<br/>GET /api/sfmc/configs/all 一次拉全"]
BP --> REG
REG --> INST
REG -. "启动时快照" .-> CONF
end
%% ============== BP 构建管线 ==============
subgraph PIPE["BP 构建管线"]
PKGS["modules/packages/<id>/<br/>sapi/src/index · resource_pack/"]
ESBUILD["esbuild bundle<br/>build/modules/.../main"]
PKG_MGR["pack-manager<br/>assembleBehaviorPack"]
DEPLOY["BDS worlds/<level>/<br/>behavior_packs/sfmc-modules/"]
PKGS -- "esbuild 聚合" --> ESBUILD
ESBUILD -- "组装资源包" --> PKG_MGR
PKG_MGR -- "载入资源包" --> DEPLOY
DEPLOY -. "BDS 重启加载" .-> BP
end
%% ============== 仓顶服务 ==============
subgraph SVC["仓顶服务"]
DB["db-server<br/>SQLite + REST API"]
QQ["qq-bridge<br/> 反向 WS"]
BDS_T["bds-tools<br/>check-update · 进程管理"]
end
%% ============== 模块源 ==============
subgraph MODS["模块源"]
REMOTE_MODS["Tanya7z/sfmc-modules<br/>模块注册表"]
LOCAL_MODS["本仓 modules/packages/<id>/"]
CAT["catalog.json<br/>模块清单"]
LOCK["module-lock.json<br/>模块状态"]
SDK["sdk/@sfmc-sdk<br/>基础工具包<br/>SAPI / Node 共享"]
end
%% ============== 外部 ==============
subgraph EXT["外部"]
LLBOT["协议侧"]
QQUSERS["QQ 群服用户"]
BDS_USER["MC 玩家"]
end
%% ============== 数据流 ==============
REMOTE_MODS -- "Release → fetch" --> LOCAL_MODS
LOCAL_MODS --> PKGS
LOCAL_MODS --> CAT
%% SAPI ↔ db-server
INST -- "HTTP GET/POST/... /api/sfmc/*" --> DB
CONF -- "HTTP GET /api/sfmc/configs/all" --> DB
%% module-lock 写回路
DB -. "refreshModules()<br/>(重启 BDS 生效)" .-> REG
LOCK -- "构建时读 + 启/禁" --> PKGS
CAT -- "注册元数据" --> PKGS
%% SDK 共享
SDK -. "compile-time deps" .-> PKGS
SDK -. "compile-time deps" .-> DB
%% QQ 桥消息流
QQUSERS <-->|QQ 消息| LLBOT
LLBOT -- "WS" --> QQ
QQ -- "HTTP" --> DB
DB -- "HTTP" --> LLBOT
%% 玩家
BDS_USER <-->|SAPI events| BP
classDef pipeBox fill:#FFE5E5,stroke:#FF6B6B,stroke-width:2px
classDef svcBox fill:#E8F5E9,stroke:#43A047
classDef modBox fill:#EDE7F6,stroke:#7B68EE
classDef sdkBox fill:#FFF8E1,stroke:#F9A825
classDef bdsBox fill:#E3F2FD,stroke:#1976D2
classDef extBox fill:#FFF3E0,stroke:#FB8C00
class PKGS,ESBUILD,PKG_MGR,DEPLOY pipeBox
class DB,QQ,BDS_T svcBox
class REMOTE_MODS,LOCAL_MODS,CAT,LOCK modBox
class SDK sdkBox
class BP,INST,REG,CONF bdsBox
class LLBOT,QQUSERS,BDS_USER extBox
flowchart LR
A["作者<br/>写模块"] -->|manifest.json| B["modules/packages/<id>/"]
B -->|sfmc behavior-pack build| C["esbuild bundle<br/>+ pack-manager 组装"]
C -->|deployToBDS| D["BDS worlds/<level>/<br/>behavior_packs/sfmc-modules/"]
D -->|restart BDS| E["SAPI 启动 catalog 中<br/>enabled 的模块"]
B -->|db-server 启动时扫| F["db-server 路由注册"]
E <-->|HttpDB| F
SFMC 提供两条等价的上手路径,选你最舒服的就行。
# 1. 下载对应平台的 sfmc.exe(从 GitHub Releases),放到一个空目录
# 2. 自检环境
node tools/check-ootb.js # 或者直接在 exe 同目录跑 ./sfmc.exe wizard
# 3. 首次启动会跑 wizard:填 BDS 路径 / LLBot 路径 / 备份目录,
# 然后选 1+ 个模块 → 自动 install → build → deploy 到 BDS
./sfmc.exe # 等同 sfmc
# 4. REPL 起动后,装更多模块不用重启 BDS(锁变更就行)
sfmc> module install <id>
sfmc> behavior-pack build && behavior-pack deploy
# 5. 启动全部服务
sfmc> start -all# 1. clone + 装依赖
git clone https://github.com/DogeLakeDev/ScriptsForMinecraftServer
cd ScriptsForMinecraftServer
npm install
# 2. 自检 + 跑 wizard(填 BDS/LLBot/备份目录)
node tools/check-ootb.js
node sfmc/dist/main.js # 同 sfmc
# 3. 装模块(默认从第一方 sfmc-modules 注册表)
node tools/fetch-module.mjs install peace
node tools/fetch-module.mjs search # 看可用模块
# 4. 写自定义 BP / 自定义模块 → 改完
npm run build --workspaces # 重 build 全部 SDK + 装配工具
sfmc> behavior-pack build && behavior-pack deploy
# 5. 启动
sfmc> start -all两条路共用同一份:
- 第一方模块注册表
Tanya7z/sfmc-modules(GitHub Releases) tools/fetch-module.mjs拉模块sfmc behavior-pack build/deploy走同一套 bds-tools/pack-managermodules/module-lock.json启/禁状态
SEA 不含固定 BP — 行为包是你装了模块后实时装配出来的。未知来源模块(不在第一方 index)会触发顶部黄字警告,确认无误可继续。
ScriptsForMinecraftServer/
├── bds-tools/ BDS 自动更新 + 进程管理
├── db-server/ SQLite HTTP REST API (port 3001)
├── qq-bridge/ QQ 桥(LLBot OneBot 11)
├── sfmc/ REPL 管理 CLI (走 SEA)
├── remote-controller/ 远程 agent
├── modules/
│ ├── catalog.json 22 业务模块清单
│ ├── module-lock.json 启/禁状态
│ ├── sdk/@sfmc-sdk/ 单一伞包
│ └── packages/ 25 个业务模块
├── tools/ 自检 + 构建 + fetch-module.mjs
├── configs-default/ 默认配置 JSON
├── build-sea.mjs SEA 构建入口
└── docs/ 中英双语文档
├── user-guide.zh.md
├── marketplace.zh.md
└── dev/{module-author,sdk-reference,manifest-contract}.zh.md
| 中文 | English | 面向 |
|---|---|---|
| 使用文档 | User Guide | 运维 / 用户 |
| 模块管理指南 | Module Management | 运维(SEA 装模块) |
| 模块作者指南 | Module Author Guide | SAPI 模块开发者 |
| SDK 三抽屉 API | SDK Reference | 模块作者(查表) |
| manifest 契约 | Manifest Contract | 模块作者(写契约) |
| CLAUDE.md | 同 | 给 Claude Code 的项目说明 |
| 组件 | 要求 |
|---|---|
| Node.js | 22.5+(db-server 原生 node:sqlite)+ 18+(SAPI 打包) |
| OS | Windows 10/11(主要),Linux/macOS 也支持 |
| BDS | Bedrock Dedicated Server 1.26.x |
| 磁盘 | ~500 MB(含 BP + 服务 + node_modules) |
Windows 上需给 BDS 配 Loopback Exemption(命令已合并到 wizard):
CheckNetIsolation LoopbackExempt -is -n=Microsoft.MinecraftUWP_8wekyb3d8bbwe| 端口 | 用途 |
|---|---|
3001 |
db-server REST API(BP / sfmc / qq-bridge 都打这里) |
3002 |
qq-bridge 接入 LLBot OneBot 11 的反向 WebSocket |
3004 |
db-server → LLBot(MC→QQ 直连,不开 3003) |
- ✅ Stage I:per-module manifest + emit-manifest + db-server reader
- ✅ Stage J:
shared/*迁入@sfmc/sdk,22 模块迁出 - ✅ Stage K:SEA slim —— 模块从 SEA 剥离,populate 由
tools/fetch-module.mjs完成 - 🚧 Stage L:模块 zip 自动解压、
sfmc module install --enable-and-deploy一条龙 - 🚧 Stage M:模块签名 / 公钥验证(取代纯 SHA-256 指纹)
- 🚧 Stage N+:服务网格(多 BDS 实例 / 跨节点)