部署规则
通过规则引擎精细控制模组的部署方式——按条件跳过、重定向或重命名文件。
Last updated on
什么是部署规则?
部署规则让你可以控制单个模组(或一组模组)在部署时的处理方式。告别一刀切的方式,你可以编写如下规则:
- "在 Fabric 实例中跳过此模组"
- "将此数据包重定向到 Paxi 文件夹"
- "把此模组的文件名改成稳定名称"
规则存放在 profile.json 的 setup.rules 下,也可以在实例的 Setup 页面编辑。
规则结构
一条规则由两部分组成:
- 选择器——这条规则应用于哪些包?
- 操作——对匹配的包执行哪些动作?
选择器
选择器是布尔表达式,通过包的属性进行匹配。每个选择器是一个带 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。你的资源包不会在每次更新时被取消选择。
添加规则
- 打开你的实例,进入 Setup 标签页。
- 打开实例的 Rules 编辑器。
- 添加新规则:定义选择器和操作。
- 保存。规则将在下次部署时生效。
规则与标签
标签和规则协同工作。典型的工作流程:
- 为模组添加标签,使用有意义的标签名(参见 标签)。
- 编写规则,针对这些标签进行操作。
这为你提供了一个可维护的系统——修改模组的标签即可,无需逐条编辑规则。