OhMyMCOhMyMC
模组平台

自动管理 Curseforge 整合包

16 次阅读

通过设置MODPACK_PLATFORM, MOD_PLATFORMTYPEAUTO_CURSEFORGE。可以实现 CurseForge 整合包的自动化管理

API 密钥配置

使用 CurseForge API 密钥

申请 CurseForge API 密钥

  1. 访问开发者控制台生成密钥。
  2. 设置环境变量 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

重要

mod 需要选择正确的 Java 版本镜像标签,否则可能无法运行。

大多数 mod 需要大量的内容,建议设置 MEMORY 至少为 4G ,其中默认值为 1GB。

使用指南

指定整合包

方式一:页面直链

使用 CF_PAGE_URL 指定整合包页面或文件链接,如

-e TYPE=AUTO_CURSEFORGE -e CF_PAGE_URL=https://www.curseforge.com/minecraft/modpacks/all-the-mods-8

方式二:短标识符

通过 CF_SLUG 指定 URL 中的短标识符。slug 是 URL 中 /modpacks/ 后面的字符。

cf-slug

-e TYPE=AUTO_CURSEFORGE -e CF_SLUG=all-the-mods-8

版本锁定

默认情况下将使用最新的文件,如果是需要指定版本,可以使用以下选项

  • CF_PAGE_URL ,包含特定文件的完整 URL
  • CF_FILE_ID , 数字文件 ID
  • CF_FILENAME_MATCHER , 通过字符串匹配所需要的文件

下面显示了从哪里获取特定文件的 URL 以及文件 ID 的位置:

cf-file-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

手动下载

对于不支持自动下载的模组/整合包/世界文件:

  1. 挂载容器路径 /downloads (CF_DOWNLOADS_REPO 可以自定义修改路径)
volumes:
  ./downloads:/downloads
  1. 将手动下载的文件放入对应的文件目录中 (mod modpack worlds)

未发布的整合包

使用本地整合包文件:

  • ZIP 文件:设置 CF_MODPACK_ZIP 为容器内路径。

  • 清单文件:设置 CF_MODPACK_MANIFEST 为 json 路径,仍然需要提供 modpack slug 或页面 url 。

    注意:environment 中的路径为容器内的路径,容器内文件的路径是通过 volumes 挂载进去的,注意位置关系。

例如

docker-compose.yml
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

导出的清单文件应如下所示:

manifest.json
{
  "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,通过逗号分隔多个文件

备注

CF_FORCE_INCLUDE_MODS 不会下载额外的模组。

有关其他的 mods,请参阅 从 CurseForge 自动下载

在模组页面右侧查看项目 ID:

cf-project-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 样式路径可以包含以下通配符:

SymbolBehavior
*匹配除斜杠外的任意数量字符
**匹配任意数量任意字符,包括斜杠
?匹配一个字符

重要

以下 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)。如果模组加载器的某些文件损坏,此选项非常有用。

最后更新于