自动管理 Curseforge 整合包
约 3045 字大约 10 分钟 阅读量
2025-02-16
通过设置MODPACK_PLATFORM
, MOD_PLATFORM
或 TYPE
为 AUTO_CURSEFORGE
。可以实现 CurseForge 整合包的自动化管理
API 密钥配置
使用 CurseForge API 密钥
申请 CurseForge API 密钥
- 访问开发者控制台生成密钥。
- 设置环境变量
CF_API_KEY
。
转义处理
例如你申请到的密钥为 $11$22$33aaaaaaaaaaaaaaaaaaaaaaaaaa
。
申请的密钥中若有 $
符号,需要使用双 $$
进行转义。
在 docker compose 文件中
environment:
CF_API_KEY: "$$11$$22$$33aaaaaaaaaaaaaaaaaaaaaaaaaa"
如使用 docker run
则需要使用单引号包裹
docker run ... -e CF_API_KEY='$11$22$33aaaaaaaaaaaaaaaaaaaaaaaaaa'
安全建议
为了避免暴漏 API 密钥,建议由docker compose 自动加载 .env 文件管理密钥。
environment:
CF_API_KEY: ${CF_API_KEY}
若使用 docker run
可以通过 --env
显式指定文件。
docker run --env-file=.env itzg/minecraft-server
使用指南
指定整合包
方式一:页面直链
使用 CF_PAGE_URL
指定整合包页面或文件链接,如
- "https://www.curseforge.com/minecraft/modpacks/all-the-mods-8"
- "https://www.curseforge.com/minecraft/modpacks/all-the-mods-8/files/4248390"
-e TYPE=AUTO_CURSEFORGE -e CF_PAGE_URL=https://www.curseforge.com/minecraft/modpacks/all-the-mods-8
方式二:短标识符
通过 CF_SLUG
指定 URL 中的短标识符。slug 是 URL 中 /modpacks/
后面的字符。
-e TYPE=AUTO_CURSEFORGE -e CF_SLUG=all-the-mods-8
版本锁定
默认情况下将使用最新的文件,如果是需要指定版本,可以使用以下选项
CF_PAGE_URL
,包含特定文件的完整 URLCF_FILE_ID
, 数字文件 IDCF_FILENAME_MATCHER
, 通过字符串匹配所需要的文件
下面显示了从哪里获取特定文件的 URL 以及文件 ID 的位置:
以下示例均参考 ATM8 1.0.7 版本:
CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/all-the-mods-8/files/4248390
CF_SLUG: all-the-mods-8
CF_FILE_ID: "4248390"
CF_SLUG: all-the-mods-8
CF_FILENAME_MATCHER: 1.0.7
手动下载
对于不支持自动下载的模组/整合包/世界文件:
- 挂载容器路径
/downloads
(CF_DOWNLOADS_REPO
可以自定义修改路径)
volumes:
./downloads:/downloads
- 将手动下载的文件放入对应的文件目录中 (
mod
modpack
worlds
)
未发布的整合包
使用本地整合包文件:
- ZIP 文件:设置
CF_MODPACK_ZIP
为容器内路径。 - 清单文件:设置
CF_MODPACK_MANIFEST
为 json 路径,仍然需要提供 modpack slug 或页面 url 。 注意:environment
中的路径为容器内的路径,容器内文件的路径是通过volumes
挂载进去的,注意位置关系。
例如
services:
mc:
image: itzg/minecraft-server
environment:
EULA: true
MODPACK_PLATFORM: AUTO_CURSEFORGE
# allocate from https://console.curseforge.com/ and set in .env file
CF_API_KEY: ${CF_API_KEY}
CF_MODPACK_MANIFEST: /manifests/manifest.json
CF_SLUG: "custom"
volumes:
- ./manifests:/manifests:ro
导出的清单文件应如下所示:
{
"minecraft": {
"version": "1.20.4",
"modLoaders": [
{
"id": "fabric-0.15.3",
"primary": true
}
]
},
"manifestType": "minecraftModpack",
"manifestVersion": 1,
"name": "Custom",
"author": "",
"files": [
{
"projectID": 351725,
"fileID": 4973035,
"required": true
},
{
"projectID": 306612,
"fileID": 5010374,
"required": true
}
],
"overrides": "overrides"
}
排除客户端模组
有时需要排除一些模组,例如哪些未正确声明为客户端模组的模组,也有一些模组错误的标记为了仅限客户端。以下介绍 排除/包含 模组的方法。
- 排除模组:
CF_EXCLUDE_MODS=
项目前缀或 IDS,通过逗号分隔多个文件 - 包含模组:
CF_FORCE_INCLUDE_MODS=
项目前缀或 IDS,通过逗号分隔多个文件
在模组页面右侧查看项目 ID:
对于更复杂的场景,通过 CF_EXCLUDE_INCLUDE_FILE
指定 JSON 排除文件,这是在镜像中默认的内置文件,此文件可以在 Github 此处找到。
如果是要修改上述设置,需要设置 CF_FORCE_SYNCHRONIZE=true
强制重新运行排除规则。
重要
提供这些选项是为了使您能够快速的启动和运行服务器,如有问题请通过报告相应的 mod 项目问题来获得帮助。
理想情况下,mod 开发人员应该 对单边 mod 正确注册。可以理解的是,这些代码更改可能并不简单,因此 mod 作者还可以在发布时将 “客户端” 添加到游戏版本中。
排除覆盖文件
Modpack zip 文件通常包含一个override
子目录,其中可能包含配置文件、世界数据和额外的 mod 文件。所有这些文件都将被提取到容器的“/data”路径中。如果需要从提取中排除这些文件中的任何一个,例如不兼容的 mods,那么可以使用逗号或换行符分隔的 Ant-style 路径列表(见下文)来设置CF_OVERRIDES_EXCLUSIONS
变量,以确保覆盖(或/data
)目录时进行排除。
Ant-style 路径
Ant 样式路径可以包含以下通配符:
Symbol | Behavior |
---|---|
* | 匹配除斜杠外的任意数量字符 |
** | 匹配任意数量任意字符,包括斜杠 |
? | 匹配一个字符 |
重要
以下 compose 文件 environment
条目展示了如何排除 Iris 和 Sodium 模组。
CF_OVERRIDES_EXCLUSIONS: mods/iris*.jar,mods/sodium*.jar
或者使用换行符,这样可以提高可维护性。
CF_OVERRIDES_EXCLUSIONS: |
mods/iris*.jar
mods/sodium*.jar
World/Level Data
通过 CF_SET_LEVEL_FROM
指定世界数据来源:
WORLD_FILE
从世界文件加载OVERRIDES
从覆盖目录加载
忽略缺失的文件
有些模组使用模组包中的临时文件,并在完成后删除它们。其他模组会自我修补,并“禁用”原始模组 jar 文件,例如 gregtech。为了避免安装程序检测到缺失文件并重新安装,可以通过传递逗号或换行符分隔的列表来忽略这些文件,使用 CF_IGNORE_MISSING_FILES 变量。
相关信息
警告日志将显示哪些文件在上次安装时缺失,例如:
Re-installing due to missing files from modpack: [mods/gregtech-2.6.2-beta.jar]
重要
在 Compose 文件中配置
environment:
CF_IGNORE_MISSING_FILES: |
mods/gregtech-2.6.2-beta.jar
额外选项
其他可用的配置选项:
CF_PARALLEL_DOWNLOADS
(默认值为 4):指定执行多少个并行下载模组。CF_OVERRIDES_SKIP_EXISTING
(默认值为 false):如果设置为 true,覆盖文件中已存在的文件会被跳过。注意,如果存在世界数据始终会被跳过。CF_FORCE_REINSTALL_MODLOADER
(默认值为 false):如果设置为 true,将强制重新安装模组包声明的模组加载器(如 Forge)。如果模组加载器的某些文件损坏,此选项非常有用。