# 自定义怪物

## 在我们开始之前

**请注意下面是唯一一个自定义怪物的必须配置选项，这也是一个自定义怪物的最简单配置形式：**

```
entityType: TYPE
```

**其他的配置选项都是可选的。**

### 示例怪物

首先，我们需要知道自定义怪物配置储存在哪里。它们被储存在 \~/EliteMobs/custombosses 文件夹。

每个自定义怪物都有它自己独立的文件，这意味着如果你想要创建新的自定义怪物，只需要在该文件夹内创建一个新的文件即可创建新的怪物，文件名称即为怪物的id。

默认情况下，EliteMobs 包含一个 `test_boss.yml` 示例自定义怪物文件，它也是一个很好的示例模板，内容如下：

```
isEnabled: true
entityType: ZOMBIE
name: '&eTest boss'
level: dynamic
timeout: 10
isPersistent: false
healthMultiplier: 2.0
damageMultiplier: 0.5
helmet: GOLDEN_HELMET
chestplate: IRON_CHESTPLATE
leggings: LEATHER_LEGGINGS
boots: CHAINMAIL_BOOTS
mainHand: GOLDEN_AXE
offHand: SHIELD
isBaby: false
powers:
- invulnerability_knockback.yml
spawnMessage: A test boss has been spawned!
deathMessage: A test boss has been slain by $players!
escapeMessage: A test boss entity has escaped!
locationMessage: 'Test entity: $location'
uniqueLootList:
- magmaguys_toothpick.yml:1
dropsEliteMobsLoot: true
dropsVanillaLoot: true
trails:
- BARRIER
onDamageMessages:
- I've hit you!
onDamagedMessages:
- I've been hit!
```

### isEnabled

`isEnabled` 设置是否启用该自定义怪物。

### entityType

`entityType` 设置自定义怪物的实体类型，你可以在 mobproperties 文件夹查看当前 EliteMobs 支持的实体类型。

示例：

```
entityType: ZOMBIE
```

### name

`name` 设置自定义怪物的名称。

示例：

```
name: "$level &cCool boss!"
```

变量：

* `$level` - "$level Cool boss" - 1 Cool boss
* `$normalLevel` - "$normalLevel Cool boss" - \[1] Cool boss
* `$minibossLevel`- "$minibossLevel Cool boss" - 〖1〗 Cool boss
* `$bossLevel` - "$bossLevel Cool boss" - 『1』 Cool boss
* `$reinforcementLevel` - "$reinforcementLevel Cool boss" - 〔1〕 Cool Boss
* `$eventBossLevel`- "$eventBossLevel Cool boss" - 「1」 Cool boss

以上变量符都是显示怪物的等级，只是显示上有区别，参考所给示例你就能明白，在此不再赘述。&#x20;

### level

`level` 设置自定义怪物的等级。

* ***任何固定的值***
* ***`dynamic`***

`dynamic` 代表动态，会根据当前在线玩家拥有的最高战斗等级来决定它的等级，所以，很少玩家会觉得这个怪物很好打。

示例：

```
level: 1
```

### timeout

`timeout` 设置自定义怪物逃跑的时间，以分钟为单位（也就是自动消失）。如果设置为 `0` 那么该怪物将永远不会自动消失。

示例：

```
timeout: 20
```

### isPersistent

`isPersistent` 设置在怪物所在区块被卸载后怪物是否保持存活，只建议对大 BOSS 开启，否则会造成服务器性能问题。

示例：

```
isPersistent: true
```

### healthMultiplier

`healthMultiplier` 设置怪物的血量的加倍值，值 `0.0001` 到 `0.9999` 代表低于该等级怪物本身的血量值，大于 `1`  则代表高于。事实上在技术层面上，EliteMobs 并没有实际修改怪物的血量值，它只是通过修改怪物的防御来实现类似效果，不过为了便于理解这里就这么写了。

示例：

```
healthMultiplier: 1.5
```

### damageMultiplier

`damageMultiplier` 设置怪物的伤害的加倍值，值 `0.0001` 到 `0.9999` 代表低于该等级怪物本身的血量值，大于 `1`  则代表高于。不会影响怪物能力的伤害。

示例：

```
damageMultiplier: 1.5
```

### damageModifiers

`damageModifiers` 设置不同物品对自定义怪物造成的伤害的加倍值，你可以用它制作怪物的弱点和强化。

示例：

```
damageModifiers:
- material:DIAMOND_SWORD,multiplier:0.8
- material:TRIDENT,multiplier:2.0
```

在这个示例中，玩家使用钻石剑只会对怪物造成 80% 的伤害，但使用三叉戟将会造成双倍伤害。

### normalizedCombat

`normalizedCombat` 修改怪物的伤害和最大生命值以遵循 MobCombatSettings.yml 中标准化实体的设置。 这对于创建地牢很有用，因为您在进行战斗平衡时不再需要考虑每种实体类型的基础伤害。

示例：

```
normalizedCombat: 整数类型选项
```

### helmet/chestplate/leggings/boots/mainhand/offhand

`helmet`/`chestplate`/`leggings`/`boots`/`mainHand`/`offHand` 设置怪物的对应槽位（分别为头盔、胸甲、护腿、靴子、主手、副手）的物品id，只对能够穿戴对应槽位的怪物有效。

**请注意这里可以设置物品的 CustomModelData 的值，只需要在填写物品id时遵循格式:  `物品id:custommodeldata的值`。示例： `DIAMOND_SWORD:1` 则代表怪物手持 CustomModelData 为 1 的钻石剑。**

**同样地，你还可以设置染色皮革的值，只需要遵循格式：`物品id:0xHEX颜色代码`。**

示例：

```
helmet: 198c4123-cafc-45df-ba79-02a421eb8ce7
chestplate: DIAMOND_CHESTPLATE:1
leggings: LEATHER_LEGGINGS:0x000000
boots: NETHERITE_BOOTS
mainHand: DIAMOND_SWORD
offHand: SHIELD
```

### isBaby

`isBaby` 设置怪物是否是幼体，只有部分实体支持，例如僵尸。

示例：

```
isBaby: true
```

### powers

`powers` 设置怪物的能力列表（也就是技能），能力可以在 `~/EliteMobs/powers` 文件夹查看。部分能力可能不支持部分实体类型，但在这里无法一一提供，如有帮助可联系作者。

示例：

```
powers:
- hyper_loot.yml
```

### boss phases

设置怪物的阶段（形态），更多信息请 [点击这里](https://docs.superiormc.cn/elitemobs-wiki/pei-zhi/zi-ding-yi-boss-jie-duan) 查看。

### regional boss

有关区域 BOSS 的大概介绍，请 [点击这里](https://docs.superiormc.cn/elitemobs-wiki/ming-ci-jie-shi) 查看。有关区域 BOSS 如何设置，请 [点击这里](https://docs.superiormc.cn/elitemobs-wiki/pei-zhi/zi-ding-yi-qu-yu-boss) 查看。

### spawnMessage

`spawnMessage` 设置当怪物生成时的提示。

示例：

```
spawnMessage: I rise once more!
```

**需要依赖公告权重值系统，下面不再赘述，有关公告权重值相关信息，请** [**点击这里**](https://docs.superiormc.cn/elitemobs-wiki/ji-zhi/gong-gao-quan-zhong-zhi-xi-tong) **查看！**

### deathMessage

`deathMessage` 设置当怪物死亡时的提示，可以使用变量 $players$ 替代参与击杀怪物的玩家。

示例：

```
deathMessage: Physical damage, my only weakness!
```

**需要依赖公告权重值系统，下面不再赘述，有关公告权重值相关信息，请** [**点击这里**](https://docs.superiormc.cn/elitemobs-wiki/ji-zhi/gong-gao-quan-zhong-zhi-xi-tong) **查看！**

### deathMessages

`deathMessages` 设置怪物死亡的提示，但是可以多行。

```
deathMessages:
- '&e&l---------------------------------------------'
- '&4The Test Boss has been killed!'
- '&c&l    1st Damager: $damager1name &cwith $damager1damage damage!'
- '&6&l    2nd Damager: $damager2name &6with $damager2damage damage!'
- '&e&l    3rd Damager: $damager3name &ewith $damager3damage damage!'
- '&4Slayers: $players'
- '&e&l---------------------------------------------'
```

可以使用变量 `$damager1name`, `$damager2name`, `$damager3name`, `$damager1damage`, `$damager2damage`, `$damager3damage` 和 `$players`。`$damager1name` 等代表伤害输出第x名的玩家的名称，`$damager1damage` 等代表 伤害输出第x名的玩家的输出值。`$players` 则同上。

**需要依赖公告权重值系统，下面不再赘述，有关公告权重值相关信息，请** [**点击这里**](https://docs.superiormc.cn/elitemobs-wiki/ji-zhi/gong-gao-quan-zhong-zhi-xi-tong) **查看！**

### escapeMessage

`escapeMessage` 设置怪物逃跑的消息，只有在 `timeout` 选项设置的时间到了之后怪物自动消失才会出现。

```
escapeMessage: "Sayonara!"
```

**需要依赖公告权重值系统，下面不再赘述，有关公告权重值相关信息，请** [**点击这里**](https://docs.superiormc.cn/elitemobs-wiki/ji-zhi/gong-gao-quan-zhong-zhi-xi-tong) **查看！**

### locationMessage

`locationMessage` 设置怪物出现在 Boss 条的信息，用于显示怪物的位置和距离。

* $distance - 距离。
* $location - 坐标。

Example:

```
locationMessage: "&4Cool boss: $distance blocks away!"
```

**需要依赖公告权重值系统，下面不再赘述，有关公告权重值相关信息，请** [**点击这里**](https://docs.superiormc.cn/elitemobs-wiki/ji-zhi/gong-gao-quan-zhong-zhi-xi-tong) **查看！**

### uniqueLootList

`uniqueLootList` 设置该自定义怪物固定的掉落物。

* ***`itemFilename.yml:掉落几率`***

&#x20;`itemFilename.yml` 替换为自定义战利品名称，也就是 `~/EliteMobs/customitems` 文件夹内的文件名称。掉落几率可以填写 0-1 之间的值，例如 0.5 代表 50%。

#### 其他格式：

你还可以使用以下掉落物类型：

* `minecraft:type=物品id:amount=数量:chance=几率` - 掉落原版 MC 物品。
* `SCRAP:等级=x-y:amount=x-y:ignorePlayerLevel=x:chance:x` - 掉落 EliteMobs 的卷轴，其中 `level=x-y`  和  `amount=x-y`  分别代表卷轴等级数量，x-y 代表在 x-y 之间随机抽取一个数字。`ignorePlayerLevel=x` 设置是否忽视玩家当前战斗等级而掉落。
* `UPGRADE_ITEM:level=x-y:amount=x-y:ignorePlayerLevel=x:chance:x` - 掉落 EliteMobs 的升级球，同上不再赘述。
* `itemFilename.yml:掉落几率:权限` - 设置需要权限才会掉落指定固定战利品。

示例：

```
- magmaguys_toothpick.yml:1
- minecraft:type=DIAMOND:amount=1:chance=0.9
- SCRAP:level=5-10:amount=10-20:ignorePlayerLevel=false:chance=0.5
- UPGRADE_ITEM:level=5-10:amount=1-2:ignorePlayerLevel=false:chance=0.1
- magmaguys_toothpick.yml:0.5:elitemobs.*
```

### dropsEliteMobsLoot

`dropsEliteMobsLoot` 设置怪物是否掉落非上面选项设置的其他战利品。

示例：

```
dropsEliteMobsLoot: true
```

### dropsVanillaLoot

`dropsVanillaLoot` 设置怪物是否掉落其原版会掉落的物品，例如僵尸掉落腐肉。

示例：

```
dropsVanillaLoot: true
```

### dropsRandomLoot

`dropsRandomLoot` 设置怪物是否掉落随机战利品。

示例：

```
dropsRandomLoot: true
```

### trails

`trails` 设置怪物的粒子效果。

示例：

```
trails:
- CLOUD
```

### onDamageMessages

`onDamageMessages` 设置怪物击打到玩家时随机出现的提示。

示例：

```
onDamageMessages:
- "I hit you!"
```

### onDamagedMessages

`onDamagedMessages` 设置玩家击打到怪物时随机出现的提示。

示例：

```
onDamageMessages:
- "You hit me!"
```

### mountedEntity

`mountedEntity` 设置怪物的坐骑，可以填写：

* 某个原版生物的id (示例： `mountedEntity: BAT`)。
* 指定自定义怪物的文件名称。

示例：

```
mountedEntity: balrog.yml
```

### announcementPriority

`announcementPriority` 设置公告权重值，请 [点击这里](https://docs.superiormc.cn/elitemobs-wiki/ji-zhi/gong-gao-quan-zhong-zhi-xi-tong) 了解详情。

```
announcementPriority: 3
```

### followDistance

`followDistance` 设置怪物的察觉距离，部分实体类型可能不能很好工作。

示例：

```
followDistance: 30
```

***请注意不要将这里的值设置过大，这将会导致服务器大量 CPU 负担！***

### onDeathCommands

`onDeathCommands`设置当怪物死亡时执行的指令列表。可以使用如下变量：

* `$level` 代表怪物的等级。
* `$name` 代表怪物的名称。
* `$chance=x$` 设置指令执行的几率。
* `$players` 代表击杀怪物的玩家，**如果击杀者有多位，那么指令会被执行多次**。
* `$locationX`, `$locationY` 和 `$locationZ` 代表怪物死亡的坐标。

```
onDeathCommands:
- "broadcast $players has killed $name! That was level $level!"
- "$chance=0.5$ What a kill!"
```

在这个示例中，假设有 Player1、Player2和Player3 三位玩家一起击杀，那么将会执行三次 broadcast 指令：

```
broadcast Player1 has killed CustomBossName! That was level X!
broadcast Player2 has killed CustomBossName! That was level X!
broadcast Player3 has killed CustomBossName! That was level X!
```

此外还会有 50% 几率执行如下指令：

```
What a kill!
```

### onSpawnCommands

`onSpawnCommands` 设置当怪物生成时执行的指令列表。 `$chance=x$` 变量同样可用。

示例：

```
onSpawnCommands:
- broadcast Boss has spawned!
```

### onCombatEnterCommands:

`onCombatEnterCommands` 设置当怪物进入战斗时执行的指令列表。 `$chance=x$` 变量同样可用。

```
onCombatEnterCommands:
- broadcast Boss has entered combat!
```

### onCombatLeaveCommands:

`onCombatLeaveCommands` 设置当怪物离开战斗时执行的指令列表。 `$chance=x$` 变量同样可用。

```
onCombatLeaveCommands:
- broadcast Boss has left combat!
```

### disguise

`disguise` 设置怪物的伪装，更多信息请 [点击这里](https://docs.superiormc.cn/elitemobs-wiki/di-san-fang-zhi-chi/wei-zhuang-libsdisguises) 查看。

### customModel

`customModel` 设置怪物的模型，更多信息请 [点击这里](https://docs.superiormc.cn/elitemobs-wiki/pei-zhi/zi-ding-yi-mo-xing-modelengine) 查看。

示例：

```
customModel: your_model
```

### frozen

`frozen` 设置怪物是否原地不动。

示例：

```
frozen: true
```
