属性基础修饰符

属性基础修饰符

一个数据驱动的模组,用于修改生物的默认属性

工具

属性基础修改器(ABM)允许你修改任意生物任意属性的默认基础值。

本模组为服务端模组。

端 是否需要安装
专用服务器 是
内置服务器 是
单人游戏客户端 是
纯客户端 否

本模组是数据驱动的。如果遇到问题,建议阅读 数据包 – Minecraft Wiki。

你可以在数据包中定义多条规则来应用修改器。

注册规则

规则通过数据包中的 JSON 文件注册。

规则文件应位于 data/<namespace>/abm_rules/<name>.json。

如果规则注册成功,其 ID 将为 <namespace>:<name>。

与其他数据包内容一样,服务器重新加载数据时,所有规则都会被重新加载。具体来说,是在重新加载世界或使用 reload 命令时。

JSON 格式:

  • <root> Compound{}
    • include Compound{} 一个包含过滤器。只有此处指定的类型才会被包含。可选,省略时包含所有类型的生物。
      • type String* | *Array[] 列出需要包含的生物。
        • String 一个 ID 或一个标签(以 # 开头)。例如 minecraft:zombie、#minecraft:undead。
      • spawn_group String 表示包含该生成组中的所有生物。必须是 monster、creature、ambient、water_creature、underground_water_creature、water_ambient、misc 或 axolotls 之一。与 type 共存时无效。
    • exclude Compound{} 一个排除过滤器。格式与 include 相同。可选,省略时不排除任何生物。
    • modifies Array[] 定义修改方式。
      • Compound{} 定义一个属性及修改方式。如果生物缺少该属性的默认值,则跳过此修改。
        • attribute String 属性的 ID。例如 minecraft:max_health。
        • modifiers Array[] 修改方式。基础值按顺序依次计算。
          • Compound{} 一种修改方式。
            • type String 修改类型(运算符)。必须是 set、add 或 multiply 之一。
            • value Number 此修改的值。将被解析为 double 值。
    • default_enable Boolean 是否默认启用此规则。更多信息请参见“调试命令”。可选,默认为 true。

示例:(部分 ID 可能不正确)

{
    "include": {
        "spawn_group": "monster"
    },
    "exclude": {
        "type": "#c:bosses"
    },
    "modifies": [
        {
            "attribute": "minecraft:max_health",
            "modifiers": [
                {
                    "type": "add",
                    "value": 100
                }
            ]
        },
        {
            "attribute": "minecraft:armor",
            "modifiers": [
                {
                    "type": "set",
                    "value": 10
                }
            ]
        }
    ]
}

这里有一个 example_data_pack。

调试命令

abmrule <rule_id> [enable|disable]

你可以通过此命令启用或禁用一条规则。

此命令用于调试。

当规则被重新加载时,此状态将被重置为其默认值。具体来说,即规则 JSON 文件中定义的 default_enable。

常见问题

  • 使用 reload 命令重新加载规则后,某些生物没有被修改。

这是预期行为。

重新加载后,先前召唤的生物可能不会更新其默认属性,除非它在代码中被“重新创建”(通常是当生物的区块被加载时)。

不过,建议召唤一个新的生物以减少不确定性,并确保其具有最新的默认属性。

如果你希望先前召唤的生物更新,建议重新进入世界。

  • 如何在创建世界之前定义规则,就像配置文件一样?

在某些情况下,例如制作整合包时,许多人会遇到这个问题。

建议通过低代码模组或 Paxi 制作全局数据包。