开发指南
此页面面向希望为 ResourcePackServer 贡献代码或基于它构建工具链的开发者。
项目结构
ResourcePackServer/
├── main.py # Root entry point
├── pyproject.toml # Project metadata & dependencies
├── src/
│ ├── mcdreforged.plugin.json # MCDR plugin metadata
│ └── resource_pack_server/
│ ├── __init__.py
│ ├── __main__.py # python -m entry point
│ ├── server.py # HTTP server core (shared)
│ ├── config.py # Configuration classes
│ ├── logger.py # Dual-mode logger
│ ├── constants.py # Plugin constants
│ ├── hash_utils.py # SHA1 hashing utilities
│ ├── pack_merger.py # Multi-pack merge logic
│ ├── cli/
│ │ ├── __init__.py
│ │ └── cli_entrypoint.py # Standalone CLI (argparse)
│ └── mcdr/
│ ├── __init__.py
│ ├── mcdr_globals.py # MCDR global references
│ └── mcdr_entrypoint.py # MCDR plugin hooks
└── docs/ # Sphinx documentation
架构
双模式设计
ResourcePackServer 遵循与 PrimeBackup 相同的模式:
环境检测:
ServerInterface.psi_opt()返回None→ 独立模式共享核心:
server.py、pack_merger.py、config.py与模式无关双入口:
cli/cli_entrypoint.py用于 CLI,mcdr/mcdr_entrypoint.py用于 MCDR日志器:检测 MCDR 环境,使用
psi.logger或自行创建
资源包合并
pack_merger.py 实现了确定性的多包合并:
资源包以
{filename: bytes}字典形式读入内存从低优先级到高优先级合并 → 高优先级覆盖
pack.mcmeta有特殊处理:最高优先级的元数据为基础;所有包的description字段被拼接pack.png取自第一个拥有此文件的包(最高优先级)结果被缓存;当任何源包的
mtime更改时缓存失效
构建文档
# Install doc dependencies
pip install -r docs/requirements.docs.txt
# Build (default language: zh_CN)
cd docs
./build_docs.sh
# Build English version
./build_docs.sh en_US
# Live preview with auto-reload
sphinx-autobuild source build/html
# Extract/update translation strings
make gettext
sphinx-intl update -p build/gettext -l zh_CN -l en_US