Creating Custom Reinforcements
Use reinforcement entries in a boss's powers list to summon other custom bosses during a fight.
Steps to create a custom boss:
- Create your main custom boss that will summon your custom boss
- Create a custom boss for reinforcements. Keep in mind that custom bosses can be stronger than vanilla mobs, but they can also be weaker.
- Add the correct reinforcement line to the configuration file
Creating the reinforcement line
Let's assume you have a custom boss with this format:
isEnabled: true
entityType: ENDER_DRAGON
name: $eventBossLevel &eBinder of Worlds
level: 200
powers:
- ender_dragon_arrow_bombardment.lua
And you want to add reinforcements to it. Here is what one such reinforcement could look like:
- summonType: ON_COMBAT_ENTER
filename: binder_of_worlds_phase_1_parkour_reinforcement.yml
And to make it valid, add it to the powers list:
isEnabled: true
entityType: ENDER_DRAGON
name: $eventBossLevel &eBinder of Worlds
level: 200
powers:
- ender_dragon_arrow_bombardment.lua
- summonType: ON_COMBAT_ENTER
filename: binder_of_worlds_phase_1_parkour_reinforcement.yml
The reinforcement is now added to the boss entity. However, as you can see, there are several options here you can customize. Let's cover them.
All Custom Reinforcement options
Tip: You can also use EliteScript to summon reinforcements, more about that here.
summonType
This is a mandatory field. It sets when the reinforcement should spawn.
| Key | Values | Default |
|---|---|---|
summonType | Special [1] | none (mandatory) |
Example
summonType: ON_HIT
Special [1]
| Key | Description |
|---|---|
ONCE | Attempts one batch on qualifying player hits until its chance roll succeeds. See the hit requirements below. |
ON_HIT | Attempts a batch on every qualifying player hit, subject to chance. |
ON_COMBAT_ENTER | Spawn the reinforcement when the boss enters combat (1) |
ON_COMBAT_ENTER_PLACE_CRYSTAL | Special: this is specifically for placing down end crystals for dragon fights when the boss enters combat(1) |
ON_DEATH | Spawns the reinforcement when the boss dies |
GLOBAL | Queues amount reinforcements immediately and every 10 seconds while the boss's spawn lifecycle is active; entering combat is not required. Each reinforcement uses customSpawn to find an eligible player and location in the boss's world. Each summon in a batch is skipped once the tracked global count reaches 30 times the number of players in that world, so the count does not exceed that cap. Requires customSpawn. |
(1) Combat entry can come from taking player damage, damaging a player or acquiring a player target. Combat-entry reinforcements can run again when the boss leaves and re-enters combat; they are not ONCE entries.
ONCE tracks the current parsed entry, not the whole multi-phase encounter. A phase change that reparses powers creates fresh entries. Once a batch reaches a spawn attempt, a blocked spawn can still consume the ONCE entry; this is not a guarantee that a living reinforcement appeared.
filename
This is a mandatory field as it sets which reinforcement should spawn. The only exception to making this field mandatory is when using the summonType: ON_COMBAT_ENTER_PLACE_CRYSTAL setting, as end crystals aren't elites.
| Key | Values | Default |
|---|---|---|
filename | Filename | none |
Example
filename: test_boss.yml
Important: filename must reference an existing boss file in custombosses. An invalid reference prevents the reinforcement from spawning and produces a console warning. An entry without filename (other than a crystal entry), with a chance that is not a finite number, or with a location that is not three finite numbers is dropped whenever the boss is created, with an Invalid reinforcement warning naming the boss file.
Minimum Viability
summonType: SUMMON_TYPE and filename: filename.yml are enough on their own to create a Custom Reinforcement. The following example demonstrates this.
Note: Configuration keys are case-insensitive. Both summonType and SUMMONTYPE work. Enum values such as ON_HIT must use the exact uppercase spelling shown above; filenames must match the referenced definitions.
Example
isEnabled: true
entityType: ENDER_DRAGON
name: $eventBossLevel &eBinder of Worlds
level: 200
powers:
- ender_dragon_arrow_bombardment.lua
- summonType: ON_COMBAT_ENTER
filename: binder_of_worlds_phase_1_parkour_reinforcement.yml
However, if you want or need something more complex, keep reading below to see what else you can do with these options.
chance
This optional field sets one probability roll for the whole batch. It applies to ONCE, ON_HIT, ON_COMBAT_ENTER, and ON_DEATH; it is not used by GLOBAL or ON_COMBAT_ENTER_PLACE_CRYSTAL. For ONCE, a failed roll leaves the entry eligible to try again on a later qualifying hit.
| Key | Values | Default |
|---|---|---|
chance | Double | 1.0 |
Example
chance: 0.5
Represents a 50% chance to spawn a Custom Reinforcement.
Use a finite chance between 0.0 and 1.0. For ON_HIT and an unused ONCE entry, a hit qualifies when the player-damage event is not cancelled, the boss has a living entity with active AI, powers are not suppressed, and the event's damage is at least 3. The chance roll is independent for each qualifying hit and applies once to the entire batch.
ON_HIT and ONCE bypass power and boss-wide cooldowns, including those started by EliteScript Cooldowns.global or Lua cooldowns.set_global(...). They still obey the hit requirements above. Tune repeated summons through chance and amount.
Turn on /em debug and hit the boss. Messages tagged [CustomSummon] show hit rejection, chance failures, resolved locations and whether a normal spawn produced a living entity. A regional reinforcement is queued for later initialization. Power suppression currently produces the generic gate-rejection message rather than a specific suppression explanation. These messages are disabled when debug is off.
location
location: x,y,z is an optional config field which allows admins to offset the location of the reinforcement by a number of blocks. Here are the key concepts you need to know about this option:
The offset location is relative. This means that location: 0,10,0 will spawn a boss exactly 10 blocks above the boss, and not on world coordinates 0,10,0.
The relative location is different for regional bosses. Regional bosses will always use their spawn point as the origin for the relative location, meaning that if you know where the spawn point of the boss is and count the blocks, you can get reinforcement bosses to spawn in specific locations. The Binder of Worlds lair relies on this to spawn the challenge tower bosses in extremely specific block positions, regardless of where the dragon boss is.
Bosses will spawn inside of blocks if you mess up measuring distances.
| Key | Values | Default |
|---|---|---|
location | String | none |
Example
location: 0,10,0
For a non-regional Custom Boss will spawn the reinforcement exactly 10 blocks above the boss, regardless of where it might be.
For a regional Custom Boss will spawn the reinforcement exactly 10 blocks above the spawn point of the regional boss, regardless of where the boss is.
Important note: This is a mandatory field for summonType: ON_COMBAT_ENTER_PLACE_CRYSTAL specifically!
lightningRod
Only used with summonType: ON_COMBAT_ENTER_PLACE_CRYSTAL. While the boss and crystal are valid, it starts a strike immediately and every five seconds. Each strike shows warning particles for about three seconds, then creates lightning and a downward explosive fireball. The target uses X/Z offsets from -15 through 14 at the crystal's height; it is not projected onto the ground. The crystal is marked as an elite crystal and tracked as a reinforcement; it does not inherit a mob combat target.
It can't be used with the other Custom Reinforcements, as those should rely on powers for these kinds of abilities.
| Key | Values | Default |
|---|---|---|
lightningRod | Boolean | false |
Example
lightningRod: false
inheritAggro
Is an optional config field which makes Custom Reinforcements inherit the threat levels of the boss.
This copies the summoner's threat table, so reinforcements can select its highest-threat target. Threat also accounts for mechanics such as healing and taunts; it is not simply a ranking of damage dealt. Damage and reward contribution are not copied.
| Key | Values | Default |
|---|---|---|
inheritAggro | Boolean | false |
Example
inheritAggro: false
amount
Sets the number of custom bosses in a successful batch. Use a positive integer. The crystal summon type always places one crystal per entry and ignores amount.
| Key | Values | Default |
|---|---|---|
amount | Integer | 1 |
Example
amount: 1
spawnNearby
Is an optional config field which sets whether the Custom Reinforcement should spawn nearby instead of on top of the boss or at a specific relative location.
Tries up to 30 locations, choosing integer X and Z offsets from -15 through 14 around the resolved spawn location. That origin includes any configured location offset. Each attempt searches upward from that Y, stopping two blocks below the world's build limit, for two air blocks over a non-passable block. If every attempt fails, the original resolved location is used. This helper does not apply the Custom Spawn player-distance, light or world filters; normal boss-spawn protections still apply.
| Key | Values | Default |
|---|---|---|
spawnNearby | Boolean | false |
Example
spawnNearby: false
inheritLevel
Is an optional config field which sets whether the Custom Reinforcement should inherit the level of the Custom Boss it is reinforcing.
| Key | Values | Default |
|---|---|---|
inheritLevel | Boolean | false |
Example
inheritLevel: false
customSpawn
Is a config field which is only used for global reinforcements. It uses the custom spawn settings to set where the reinforcements will be able to spawn.
Use the surface, light, height and location checks described in Custom Spawns, including its biome filter and the time-wait behavior described there. Global reinforcements choose directly from all players in the summoner's spawn world. They bypass the ordinary selection's loaded-player-data, ValidWorlds.yml, validWorlds, validWorldEnvironments, instance and mob-spawning gamerule checks. The global path uses filename, amount and customSpawn; it does not apply chance, location, spawnNearby, inheritAggro or inheritLevel.
| Key | Values | Default |
|---|---|---|
customSpawn | Filename | none |
Example
customSpawn: normal_surface_spawn.yml
difficultyID
Restricts the reinforcement entry to specific instanced dungeon difficulties. Accepts a difficulty name, a numeric ID, or a list of either; see difficulty matching.
| Key | Values | Default |
|---|---|---|
difficultyID | String or list of strings | none |
When the boss has an instanced dungeon with an active difficulty, the entire reinforcement entry is dropped before parsing if its filter does not match. An explicitly empty or invalid filter matches no difficulty. Omit the key to leave the entry unrestricted. Outside a dungeon-backed instance, this difficulty filter has no effect.
Example
- summonType: ON_COMBAT_ENTER
filename: elite_add.yml
difficultyID:
- hard
- mythic
Putting a big reinforcement together
Let's create an example reinforcement using most of the previous fields:
- summonType: ON_COMBAT_ENTER
filename: test_boss.yml
spawnNearby: true
inheritAggro: true
inheritLevel: true
This does the following:
- Creates a Custom Reinforcement
- The Custom Reinforcement will spawn when the Custom Boss enters combat (
summonType: ON_COMBAT_ENTER) - The Custom Reinforcement summoned will be the one from
test_boss.yml(filename: test_boss.yml) - The reinforcement uses the nearby ground search described under
spawnNearby, centered on the boss for this example (spawnNearby: true). - The Custom Reinforcement copies the summoner's threat table for target selection (
inheritAggro: true). - Regardless of the setting in
test_boss.yml, the Custom Reinforcement will have the same level as the Custom Boss it is reinforcing (inheritLevel: true)
- summonType: ON_COMBAT_ENTER_PLACE_CRYSTAL
location: -80,10,0
lightningRod: true
This does the following:
- Creates a Custom Reinforcement
- The Custom Reinforcement will be an End Crystal which gets placed down when the combat starts (
summonType: ON_COMBAT_ENTER_PLACE_CRYSTAL) - The End Crystal repeatedly creates delayed lightning and fireball strikes at nearby X/Z offsets (
lightningRod: true).
# Example: Boss that spawns revenge minions on death
- summonType: ON_DEATH
filename: revenge_minion.yml
amount: 3
spawnNearby: true
This does the following:
- Creates a Custom Reinforcement
- The Custom Reinforcement will spawn when the boss dies (
summonType: ON_DEATH) - The Custom Reinforcement summoned will be the one from
revenge_minion.yml(filename: revenge_minion.yml) - Three reinforcements will spawn (
amount: 3) - The reinforcements use the nearby ground search around the death location (
spawnNearby: true).
Now to apply this to the Custom Boss:
isEnabled: true
entityType: ENDER_DRAGON
name: $eventBossLevel &eBinder of Worlds
level: 200
powers:
- ender_dragon_arrow_bombardment.lua
- summonType: ON_COMBAT_ENTER
filename: test_boss.yml
spawnNearby: true
inheritAggro: true
inheritLevel: true
- summonType: ON_COMBAT_ENTER_PLACE_CRYSTAL
location: -80,10,0
lightningRod: true
And you're done! Here are a few more tips:
- The fields can be set in any order, though it is recommended to always have
summonTypefirst! - Use the YAML map entries shown here for new content instead of the legacy
summon:orsummonable:string formats. Those strings still load: EliteMobs converts them in memory and leaves the boss file as written. A legacy string with missing, empty or repeated fields is dropped with a warning.