> For the complete documentation index, see [llms.txt](https://enchantedmobs.superiormc.cn/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://enchantedmobs.superiormc.cn/enchantedmobs-zhong-wen-wen-dang/features/bian-ji-guai-wu-neng-li.md).

# 编辑怪物能力

所有的怪物能力的配置文件全部储存在 `plugins/EnchantedMobs/powers` 文件夹中。

* 这些配置文件的名称（不含文件名称后缀）就是这个能力的 ID，每个 ID 都应该保持唯一性。
* 如果需要创建新的能力，就直接创建新的文件，并将对应的配置文本复制到该文件中即可。所有更改都需要重启插件以生效。部分功能还需要重启服务器生效。
* 怪物能力的配置文本遵循 YAML 格式。

### 动态数值

在怪物能力的配置文件中，几乎每个数字类型作为值的选项都支持数学公式和 `{level}` 变量符（代表怪物的等级值）。同时，也支持这样的格式：

```yaml
  random:
    ">=15;;<23": 0.3
    ">=23": 0.6
```

这样的格式代表当怪物的等级大于等于 **15** 而又小于 **23** 时，取值 **0.3**，当怪物的等级大于 **23** 时，取值 **0.6**。

### 配置示例

一个比较完整的能力示例文件如下：

```yaml
# Web Trap
# The projectile launched by a monster with this ability will generate a temporary spider web upon landing.

enabled: true
placeholder: '{lang:power.web_arrow}'

apply-rules:
  group: ranged_projectile
  group-unique: true
  weight: 5
  match-entity:
    equip:
      main-hand:
        material:
          - bow
          - crossbow
          - trident
  level-weight: 15~25

limit:
  random:
    ">=15;;<23": 0.3
    ">=23": 0.6
  cooldown:
    ">=15;;<22": 10
    ">=22": 5

on-projectile-hit:
  abilities:
    1:
      type: delay
      delay:
        ">=15;;<20": 20
        ">=20": -1
      abilities:
        1:
          type: place_block
          block: cobweb
          duration: '{level} * 4'
        2:
          type: sound
          sound: BLOCK_WOOL_PLACE
        3:
          type: particle
          particle: BLOCK
          count: 20
          block: cobweb
        4:
          type: remove

on-shoot-bow:
  abilities:
    1:
      type: mark

on-projectile-tick:
  abilities:
    1:
      type: particle
      particle: WHITE_ASH
      count: 6
      offset-x: 0.05
      offset-y: 0.05
      offset-z: 0.05
```

该配置内容中的部分选项介绍如下：

* enabled：是否启用该能力。
* placeholder：该能力的显示名称。
* apply-rules：该能力的抽取规则。在 [机制](/enchantedmobs-zhong-wen-wen-dang/start/ji-zhi.md) 一节中，我们已经介绍了这部分选项的内容。
* limit：该能力释放的限制：
  * random：该能力释放的几率，`1.0` 代表百分之百。
  * cooldown：该能力每次释放的冷却时间，以秒为单位。
  * times：该能力最多释放的次数。
* 其他以 on 开头的选项部分：触发该事件后拥有此能力的怪物将会执行的动作。如果不满足 `limit` 选项部分设置的限制，则动作不会执行，所有的动作共用一个限制。

### 能力触发事件

拥有能力的怪物可以在触发指定的事件后执行指定的动作。所有触发事件都包含这 4 种属性：

* 触发实体：哪个实体触发了这一事件。
* 传递实体：哪个实体传递这一事件的过程。
* 目标实体：这一事件最终作用于哪个实体。
* 位置：这个事件在哪个位置触发。

1事件只能由实体自身触发，能力造成的效果不会触发事件。

一个事件不一定全部包含这四种属性，所有事件如这四种属性的信息表如下所示：

<table><thead><tr><th width="198.5999755859375">事件</th><th>触发实体</th><th>传递实体</th><th>目标实体</th><th>位置</th></tr></thead><tbody><tr><td><code>on-projectile-hit</code><br>当抛掷物击中或者落地后触发。</td><td>射出抛掷物的实体</td><td>射出的抛掷物（如箭）</td><td>抛掷物击中的实体<br>⚠若未击中则不存在</td><td>抛掷物击中位置</td></tr><tr><td><code>on-shoot-bow</code><br>实体发射抛掷物后触发。</td><td>射出抛掷物的实体</td><td>射出的抛掷物（如箭）</td><td>射出的抛掷物（如箭）</td><td>射出的抛掷物的位置</td></tr><tr><td><code>on-projectile-tick</code><br>抛掷物射出后尚未击中这一过程，每 tick 都会触发 1 次。</td><td>射出抛掷物的实体</td><td>射出的抛掷物（如箭）</td><td>射出的抛掷物（如箭）</td><td>射出的抛掷物的位置</td></tr><tr><td><code>on-tick</code><br>实体存活期间每 tick 都会触发 1 次。<br>⚠需要在 <code>config.yml</code> 中启用这个功能。</td><td>实体本身</td><td>实体本身</td><td>实体本身</td><td>实体当前所在的位置</td></tr><tr><td><code>on-spawn</code><br>实体生成时触发。</td><td>实体本身</td><td>实体本身</td><td>实体本身</td><td>实体当前所在的位置</td></tr><tr><td><code>on-combust</code><br>实体燃烧时触发。</td><td>实体本身</td><td>实体本身</td><td>实体本身</td><td>实体当前所在的位置</td></tr><tr><td><code>on-damage</code><br>实体受到伤害时触发。</td><td>造成伤害的实体<br>⚠若伤害不是由其他实体触发则不存在</td><td>实体本身</td><td>实体本身</td><td>实体当前所在的位置</td></tr><tr><td><code>on-regain</code><br>实体回血时触发。</td><td>实体本身</td><td>实体本身</td><td>实体本身</td><td>实体当前所在的位置</td></tr><tr><td><code>on-melee-attack</code><br>近战攻击时触发。</td><td>实体本身</td><td>实体本身</td><td>受到攻击的实体</td><td>受到攻击的实体当前所在的位置</td></tr><tr><td><code>on-death</code><br>实体死亡时触发。</td><td>实体本身</td><td>实体本身</td><td>实体本身</td><td>实体当前所在的位置</td></tr><tr><td><code>on-target</code><br>实体具有仇恨目标时触发。</td><td>实体本身</td><td>实体本身</td><td>受到仇恨的实体</td><td>受到仇恨的实体当前所在的位置</td></tr><tr><td><code>on-untarget</code><br>实体不再具有仇恨目标是触发。</td><td>实体本身</td><td>实体本身</td><td>实体本身</td><td>实体当前所在的位置</td></tr><tr><td><code>on-target-tick</code><br>实体具有仇恨目标时每 tick 都会触发 1 次。<br>⚠需要在 <code>config.yml</code> 中启用这个功能。</td><td>实体本身</td><td>实体本身</td><td>受到仇恨的实体</td><td>受到仇恨的实体当前所在的位置</td></tr><tr><td><code>on-explode</code><br>实体爆炸时触发。</td><td>实体本身</td><td>实体本身</td><td>实体本身</td><td>实体当前所在的位置</td></tr></tbody></table>

### 事件配置

每个事件的配置由 `abilities、modifier、conditions` 三个部分组成。

* abilities：配置事件执行后将要执行哪些动作。
* modifier：配置对事件要执行哪些修改。
* conditions：配置执行动作需要的条件。

其中，有关 `abilities` 的部分会在下一节单独介绍，其他两个部分介绍如下。

### 修改事件

并不是所有的事件都支持修改，可修改的内容也是固定的，具体如下：

#### `on-shoot-bow`

可以修改射出的抛掷物类型：

```yaml
on-shoot-bow:
  modifier:
    projectile: TNT
    fuse: 40
```

这个示例更改抛掷物类型是 TNT。

提供的配置选项如下：

* projectile：新的抛掷物类型，支持：
  * Arrow
  * BreezeWindCharge
  * DragonFireball
  * Egg
  * EnderPearl
  * Fireball
  * Firework
  * FishHook
  * LargeFireball
  * LingeringPotion
  * LlamaSpit
  * ShulkerBullet
  * SizedFireball
  * SmallFireball
  * Snowball
  * SpectralArrow
  * SplashPotion
  * ThrownExpBottle
  * TNT
  * Trident
  * WindCharge
  * WitherSkull
* fuse：如果设置抛掷物为 TNT，则可以通过这个选项设置点燃时间。
* fireball-yield：如果设置抛掷物为火球，则可以通过这个选项设置爆炸强度。
* fireball-incendiary：如果设置抛掷物为火球，则可以通过这个选项设置释放燃烧。

喷溅药水的支持示例如下：

```yaml
on-shoot-bow:
  modifier:
    projectile: SPLASH_POTION
    potion-type: HARMING
    potion-effects:
      SLOW:
        duration: "60 + {level} * 20"
        amplifier: 1
      POISON:
        duration: 100
        amplifier: 0
```

#### `on_combust`

可以修改燃烧的持续时间。

{% hint style="info" %}
除非特别说明，本文所有的“持续时间”全部以 tick 为单位。20 tick = 1秒。
{% endhint %}

```yml
on-combust:
  modifier:
    duration: '60'
```

#### `on_damage`

可以修改受到的伤害的值，支持使用 `{original}` 代表原伤害值。

```yml
on-damage:
  modifier:
    damage: '{original} * (0.8 - {level} / 500)'
```

#### `on_regain`

可以修改回血的值。

```yaml
on-regain:
  modifier:
    amount: 15
```

#### `on_melee_attack`

可以修改造成的近战伤害值，支持使用 `{original}` 代表原伤害值。

```yml
on-melee-attack:
  modifier:
    damage: '{original} * (1.2 + {level} / 50)'
```

#### `on_death`  - 仅 Paper

可以复活并获得对应血量，支持使用 `{original}` 代表原最大血量。

```yaml
on-death:
  modifier:
    revive-health: '{original} / 2'
```

#### `on-explode`

可以修改爆炸强度。

```yaml
on-death:
  modifier:
    yield: 5
```

### 触发条件

{% hint style="info" %}
除非另有说明，否则所有条件如果没有在配置内容中写明，都视为不使用此条件。
{% endhint %}

#### 血量

除 `on-death` 触发事件外，其他触发事件都支持检查触发实体的血量，你可以设置某些动作只有在怪物剩余百分之 50 的血量时才会触发，增加游戏趣味性。

```yaml
on-melee-attack:
  conditions:
    now-health:
      compare: '>='
      value: '{max-health} / 2'
    max-health:
      compare: '>='
      value: 200
```

* compare: 比较的规则，支持：
  * \>
  * \>=
  * <
  * <=
  * != （不等于）
  * \=
* value：比较的值。支持使用 `{health}` 代表当前血量，`{max-health}` 代表最大血量。

#### `on-combust`

```yaml
on-combust:
  conditions:
    by-block: false
    by-entity: false
    min-duration: 5
    max-duration: 10
```

* by-block：这次燃烧是由其他方块造成的。
* by-entity：这次燃烧是由其他实体造成的。
* min-duration：燃烧持续时间的最小值。
* max-duration：燃烧持续时间的最大值。

#### `on-damage`

```yaml
on-damage:
  conditions:
    by-block: false
    by-entity: false
    min-damage: 5
    max-damage: 10
    match-damager:
      entity-types:
        - 'PLAYER'
    damage-cause:
      - 'BLOCK_EXPLOSION'
    ignore-damage-cause:
      - 'BLOCK_EXPLOSION'
```

* by-block：这次伤害是由其他方块造成的。
* by-entity：这次伤害是由其他实体造成的。
* min-duration：伤害的最小值。
* max-duration：伤害的最大值。
* match-damager：伤害必须由匹配的实体造成。使用 Match Entity Format。在此示例中，要求伤害必须是由玩家类型实体造成的。
* damage-cause：伤害来源必须来自这些情况，可用的伤害来源见此 [页面](/enchantedmobs-zhong-wen-wen-dang/features/bian-ji-guai-wu-neng-li/shang-hai-lai-yuan.md)。
* ignore-damage-cause：伤害来源不能来自这些情况，可用的伤害来源见此 [页面](/enchantedmobs-zhong-wen-wen-dang/features/bian-ji-guai-wu-neng-li/shang-hai-lai-yuan.md)。

#### `on-regain`

```yaml
on-regain:
  conditions:
    min-amount: 0
    max-amount: 5
```

* min-amount：回血的最小值。
* max-amount：回血的最大值。

#### `on-melee-attack`

```yaml
on-melee-attack:
  conditions:
    accept-source: false
    min-amount: 0
    max-amount: 20
```

* accept-source：默认情况下此条件启用且为 `false`。如果设置为 `true`，则远程攻击手段也会触发此事件。（⚠尚在测试。）
* min-amount：攻击的最小值。
* max-amount：攻击的最大值。

#### `on-explode`

```yaml
on-explode:
  conditions:
    from-creeper: false
    min-yield: 0
    max-yield: 5
```

* from-creeper：爆炸是否由苦力怕造成。
* min-yield：最小爆炸威力。
* max-yield：最大爆炸威力。

#### **`on-tag/on-untag`**

```yaml
on-tag: # 或者 on-untag
  conditions:
    reason:
      - 'TARGET_DIED'
    ignored-reason:
      - 'NEARBY_PLAYER'
```

* reason：必须由这些原因导致实体仇恨目标变成自己。
* ignored-reason：这些原因导致实体仇恨目标变成自己将无视。

可能的原因如下：

```yaml
TARGET_DIED,
CLOSEST_PLAYER,
TARGET_ATTACKED_ENTITY,
FORGOT_TARGET,
TARGET_ATTACKED_OWNER,
OWNER_ATTACKED_TARGET,
RANDOM_TARGET,
DEFEND_VILLAGE,
TARGET_ATTACKED_NEARBY_ENTITY,
REINFORCEMENT_TARGET,
COLLISION,
CUSTOM,
CLOSEST_ENTITY,
FOLLOW_LEADER,
TEMPT,
TARGET_OTHER_LEVEL,
TARGET_INVALID,
UNKNOWN
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://enchantedmobs.superiormc.cn/enchantedmobs-zhong-wen-wen-dang/features/bian-ji-guai-wu-neng-li.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
