Polymerium
进阶

部署规则

通过规则引擎精细控制模组的部署方式——按条件跳过、重定向或重命名文件。

Last updated on

什么是部署规则?

部署规则让你可以控制单个模组(或一组模组)在部署时的处理方式。告别一刀切的方式,你可以编写如下规则:

  • "在 Fabric 实例中跳过此模组"
  • "将此数据包重定向到 Paxi 文件夹"
  • "把此模组的文件名改成稳定名称"

规则存放在 profile.json 的 setup.rules 下,也可以在实例的 Setup 页面编辑。

规则结构

一条规则由两部分组成:

  1. 选择器——这条规则应用于哪些包?
  2. 操作——对匹配的包执行哪些动作?

选择器

选择器是布尔表达式,通过包的属性进行匹配。每个选择器是一个带 type 的 JSON 对象:

type匹配依据字段
pref包引用(精确或部分匹配)pref
repository来源仓库repository
tag标签名tag
kind资源类型kind

kind 的取值为 mod、resourcePack、shaderPack、dataPack 与 world。

选择器可以通过布尔运算符组合,操作数放在 children 数组里:

  • and——所有子选择器都必须匹配
  • or——任意一个子选择器匹配即可
  • not——反转选择器的匹配结果

例如,匹配所有来自 CurseForge 的数据包:

{
  "type": "and",
  "children": [
    { "type": "repository", "repository": "curseforge" },
    { "type": "kind", "kind": "dataPack" }
  ]
}

操作

一条规则可以组合以下三种操作:

字段作用
"skipping": true完全不部署此包
"destination": "<文件夹>"部署到指定文件夹,而不是默认位置
"normalizing": true把文件重命名为包的项目名加原扩展名

destination 相对于运行目录(build/)。skipping 与 normalizing 省略时为 false,规则本身也可以用 "enabled": false 关闭。

常见用例

跳过服务端模组

如果你有一些不应出现在客户端实例中的服务端模组:

{
  "selector": { "type": "tag", "tag": "server-only" },
  "skipping": true
}

为 Paxi 重定向数据包

不同的加载器使用不同的数据包路径。如果你使用 Paxi:

{
  "selector": { "type": "kind", "kind": "dataPack" },
  "destination": "datapacks/"
}

规范化资源包文件名

资源包文件名通常包含版本号——例如 Sapphire-v2.1.zip。当资源包更新到 Sapphire-v2.2.zip 时,文件名发生了变化,Minecraft 会忘记你的资源包选择,你每次都必须重新启用它。

normalizing 会把部署的文件重命名为包的项目名加原扩展名,让名称在更新中保持稳定:

{
  "selector": { "type": "pref", "pref": "pref://modrinth/sapphire" },
  "normalizing": true
}

项目名来自安装该包的仓库,所以无论作者使用什么版本号,文件都叫 Sapphire.zip。你的资源包不会在每次更新时被取消选择。

添加规则

  1. 打开你的实例,进入 Setup 标签页。
  2. 打开实例的 Rules 编辑器。
  3. 添加新规则:定义选择器和操作。
  4. 保存。规则将在下次部署时生效。

规则与标签

标签和规则协同工作。典型的工作流程:

  1. 为模组添加标签,使用有意义的标签名(参见 标签)。
  2. 编写规则,针对这些标签进行操作。

这为你提供了一个可维护的系统——修改模组的标签即可,无需逐条编辑规则。

On this page