开发指南

此页面面向希望为 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 相同的模式:

  1. 环境检测ServerInterface.psi_opt() 返回 None → 独立模式

  2. 共享核心server.pypack_merger.pyconfig.py 与模式无关

  3. 双入口cli/cli_entrypoint.py 用于 CLI,mcdr/mcdr_entrypoint.py 用于 MCDR

  4. 日志器:检测 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