Introduction
These examples combine EliteScript actions to create custom boss powers. You can edit their YAML directly or use the WebApp.
The videos are older demonstrations of the intended effects. They are not verification of the current implementation; read each example's behavior and limitations before using it.
Paste the eliteScript block into a custom boss file. Replace content references such as fc_boss.yml with an installed boss definition. The Arrow Rain example below has a documented projectile-origin limitation and does not currently produce the advertised overhead rain.
EliteScript (.yml) is still fully supported and is what every example on this page uses. It is no longer the only option: powers can also be written in Lua, which is what almost every power shipped with EliteMobs now uses. See Creating Powers for how the two formats compare.
Use current potion names such as SLOWNESS, INSTANT_HEALTH, and NAUSEA. The resolver also accepts namespaced identifiers such as minecraft:slowness; old Bukkit spellings use a legacy fallback.
All timings below use game ticks: 20 ticks is one second at normal server speed. Actions are scheduled independently; wait is measured from that action's start, not after the previous action finishes. A repeated action starts without an extra interval delay and runs times times. track: false on an action's target captures its zone before its wait; setting it only on Zone.Target does not freeze every action. See targets and zones for geometry and caching details.
coverage samples zone locations for effects and summons, not a percentage of players. Zone entity filters default to players, while NEARBY_PLAYERS searches an axis-aligned box rather than a spherical radius. Cooldowns.local and global are tick values; either one being positive enables the automatic event cooldown gate. Helpers called through scripts start when the calling action runs. See cooldowns.
Power Examples
Slam Down
When a player damages the boss, it teleports 8 blocks above that player's position. After 15 ticks, PUSH queues a downward velocity for the next tick. At tick 20, two independent actions apply Slowness IV for 60 ticks and show the subtitle “Stunned!” to players selected by the boss's current nearby-player box with range 3. The subtitle stays for 40 ticks plus 10-tick fades in and out.
This is a timed effect, not a landing detector. Obstacles, gravity and teleport outcomes can change where the boss is at tick 20. Slowness does not prevent attacking or otherwise implement a full stun, and this example has no separate scripted damage action.
Expand Example
eliteScript:
SlamDown:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: TELEPORT
FinalTarget:
targetType: DIRECT_TARGET
offset: 0,8,0
Target:
targetType: SELF
- action: PUSH
vValue: 0,-5,0
Target:
targetType: SELF
wait: 15
- action: POTION_EFFECT
potionEffectType: SLOWNESS
amplifier: 3
duration: 60
Target:
targetType: NEARBY_PLAYERS
range: 3
wait: 20
- action: TITLE_MESSAGE
subtitle: "Stunned!"
duration: 40
fadeIn: 10
fadeOut: 10
Target:
targetType: NEARBY_PLAYERS
range: 3
wait: 20
Cooldowns:
local: 180
global: 80
Push Away
This script draws a radius-4 dome around the boss and starts particles, repeated pushes and messages together. The corrected example triggers on player damage and computes a direction from the boss toward that attacker, with an upward offset. Every selected player receives the same vector; this is a directional shove, not a separate radial push away from the boss for each player.
PUSH replaces velocity one tick after each action and computes its relative vector once per action run. Its ACTION_TARGET location would be the boss position, so pairing that with SourceTarget: SELF produces a zero-length direction instead of the desired push. This example uses DIRECT_TARGET. If the boss and attacker positions coincide, the direction is zero and only the 0,0.2,0 offset remains. The dome's full entity check uses sphere containment, so a player below the visible hemisphere can also be selected.
Expand Example
eliteScript:
PushAway:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
shape: DOME
radius: 4
borderRadius: 3
Target:
targetType: SELF
track: true
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: CLOUD
Target:
targetType: ZONE_BORDER
track: true
repeatEvery: 5
times: 4
- action: PUSH
Target:
targetType: ZONE_FULL
track: true
RelativeVector:
SourceTarget:
targetType: SELF
DestinationTarget:
targetType: DIRECT_TARGET
normalize: true
multiplier: 1.0
offset: 0,0.2,0
repeatEvery: 1
times: 20
- action: MESSAGE
sValue: "&cCool boss!: &fBE GONE!"
Target:
targetType: ZONE_FULL
repeatEvery: 10
times: 2
Cooldowns:
local: 140
global: 80
Arrow Rain
This older example draws a radius-5, height-1 cylinder border at the damaging player's initial position and displays a warning. The arrow action captures a second cylinder 10 blocks higher, waits 40 ticks, then attempts four volleys at 10-tick intervals.
For a living boss, SUMMON_ENTITY with ARROW calls the boss's projectile launcher. The arrows therefore launch from the boss, once per sampled zone location, rather than from those overhead points. The downward velocity still applies, but moving out of the pictured circle is not a reliable way to avoid this implementation. The old video shows the intended rain; this YAML is retained to explain the limitation, not as a working overhead-rain recipe.
Expand Example
eliteScript:
MakeCircle:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
shape: CYLINDER
radius: 5
borderRadius: 4
height: 1
Target:
targetType: DIRECT_TARGET
track: false
Actions:
- action: SPAWN_PARTICLE
Target:
targetType: ZONE_BORDER
track: false
coverage: 1.0
repeatEvery: 5
times: 8
particles:
- particle: FLAME
- action: TITLE_MESSAGE
Target:
targetType: DIRECT_TARGET
fadeOut: 10
duration: 20
fadeIn: 10
subtitle: Move out of the zone!
- action: RUN_SCRIPT
scripts:
- "ArrowRain"
Cooldowns:
local: 160
global: 80
ArrowRain:
Zone:
shape: CYLINDER
radius: 5
borderRadius: 4
height: 1
Target:
targetType: DIRECT_TARGET
track: false
offset: 0,10,0
Actions:
- action: SUMMON_ENTITY
wait: 40
sValue: ARROW
Target:
targetType: ZONE_FULL
track: false
vValue: 0,-1,0
repeatEvery: 10
times: 4
Fire Aura
When the boss damages a player, this script starts particles in a radius-2, height-3 cylinder following the boss and gives it the temporary FireOn tag for 120 ticks. There are 24 particle runs at 5-tick intervals, with the last at tick 115.
If a player damages the boss while that tag is present, SetOnFire sets that direct attacker's fire timer to 20 ticks. Its blocking condition checks the boss's tag, not whether the attacker stands inside the cylinder. This helper has no cooldown values, so it skips the cooldown gate and the visual script's global cooldown does not suppress it.
Expand Example
eliteScript:
Visual:
Events:
- PlayerDamagedByEliteMobEvent
Zone:
shape: CYLINDER
radius: 2
height: 3
Target:
targetType: SELF
track: true
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: FLAME
Target:
targetType: ZONE_FULL
track: true
coverage: 1.0
repeatEvery: 5
times: 24
- action: TAG
tags:
- "FireOn"
duration: 120
Target:
targetType: SELF
Cooldowns:
local: 180
global: 80
SetOnFire:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_ON_FIRE
duration: 20
Target:
targetType: DIRECT_TARGET
Conditions:
Target:
targetType: SELF
conditionType: BLOCKING
hasTags:
- "FireOn"
Poison Lines
This script captures two perpendicular cuboids at the boss's starting position, forming a plus sign. SET_MOB_AI disables ordinary mob AI for 40 ticks and immediately starts PoisonLine2; it does not wait for AI restoration before running the helper. Other scripts are not disabled by this action.
Each strip emits clouds eight times at 5-tick intervals. At tick 40, smoke and Poison V begin, each repeating 12 times at 5-tick intervals through tick 95. Each poison application lasts 50 ticks, so its effect can remain after the smoke ends. Action-level track: false keeps both strips fixed even after the boss resumes moving. The cuboid's y: 1 produces a shallow entity collision band from the origin block's Y to half a block above it; particles and entity containment are not identical volumes.
Expand Example
eliteScript:
PoisonLine1:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
shape: CUBOID
x: 20
y: 1
z: 2
Target:
targetType: SELF
track: false
Actions:
- action: SET_MOB_AI
bValue: false
duration: 40
Target:
targetType: SELF
scripts:
- "PoisonLine2"
- action: SPAWN_PARTICLE
particles:
- particle: CLOUD
Target:
targetType: ZONE_FULL
coverage: 1
track: false
repeatEvery: 5
times: 8
- action: SPAWN_PARTICLE
particles:
- particle: SMOKE
Target:
targetType: ZONE_FULL
coverage: 1
track: false
wait: 40
repeatEvery: 5
times: 12
- action: POTION_EFFECT
potionEffectType: POISON
amplifier: 4
duration: 50
Target:
targetType: ZONE_FULL
track: false
wait: 40
repeatEvery: 5
times: 12
Cooldowns:
local: 200
global: 80
PoisonLine2:
Zone:
shape: CUBOID
x: 2
y: 1
z: 20
Target:
targetType: SELF
track: false
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: CLOUD
Target:
targetType: ZONE_FULL
coverage: 1
track: false
repeatEvery: 5
times: 8
- action: SPAWN_PARTICLE
particles:
- particle: SMOKE
Target:
targetType: ZONE_FULL
coverage: 1
track: false
wait: 40
repeatEvery: 5
times: 12
- action: POTION_EFFECT
potionEffectType: POISON
amplifier: 4
duration: 50
Target:
targetType: ZONE_FULL
track: false
wait: 40
repeatEvery: 5
times: 12
Bounce
This script captures a cylinder of radius 10 and height 2 at the boss's initial position. It emits particles 20 times at 10-tick intervals and runs 200 upward pushes at 1-tick intervals, about 10 seconds at normal server speed.
Each push sets velocity to 0,0.4,0 on the next tick, replacing horizontal velocity as well. Players can bounce as they enter and leave the cylinder's vertical bounds: the cylinder requires the player's full bounding box to fit within its height. Both action targets are fixed, so the collision region does not follow a moving boss while its particles remain behind.
Expand Example
eliteScript:
Bounce:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
shape: CYLINDER
radius: 10
height: 2
Target:
targetType: SELF
track: false
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: EXPLOSION
repeatEvery: 10
times: 20
Target:
targetType: ZONE_FULL
track: false
coverage: 0.2
- action: PUSH
vValue: 0,0.4,0
Target:
targetType: ZONE_FULL
track: false
repeatEvery: 1
times: 200
Cooldowns:
local: 220
global: 80
Summon
This script captures a radius-3, height-1 cylinder 6 blocks above the damaging player's starting position and immediately shows that player a subtitle. The summon action's track: false captures the zone before its 40-tick wait, so moving during the warning does not move the spawn area.
After 40 ticks, coverage: 0.2 independently samples zone locations for reinforcements; it does not guarantee a fixed count or exactly one fifth of the points. Replace fc_boss.yml with a valid installed custom boss filename. Each successful summon receives a 400-tick escape timeout. These are airborne spawn points, not a search for safe ground, and normal boss or encounter removal can remove reinforcements earlier.
Expand Example
eliteScript:
Summon:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
shape: CYLINDER
radius: 3
height: 1
Target:
targetType: DIRECT_TARGET
offset: 0,6,0
track: false
Actions:
- action: SUMMON_REINFORCEMENT
sValue: "fc_boss.yml"
duration: 400
Target:
targetType: ZONE_FULL
coverage: 0.2
track: false
wait: 40
- action: TITLE_MESSAGE
subtitle: "Friends! Help!!!"
duration: 30
fadeIn: 10
fadeOut: 10
Target:
targetType: DIRECT_TARGET
Cooldowns:
local: 333
global: 80
Potion Zones
Player damage triggers an equal random choice between PotionZoneBad and PotionZoneGood through onlyRunOneScript: true.
Both helpers capture a radius-5, height-2 cylinder around each player selected by the boss's range-20 nearby-player box. The cylinders remain at those initial positions; the current players inside them receive effects, including players who enter later. Overlapping cylinders form a combined selection, so one helper action does not apply the same effect repeatedly to a player merely because several cylinders overlap.
The bad helper emits clouds four times, then starts large smoke and Wither IV at tick 40. The latter actions run six times at 10-tick intervals through tick 90; each Wither application lasts 80 ticks. The good helper swaps the particles and applies Instant Health II instead. Its duration: 80 does not turn an instant effect into continuous regeneration. Particle coverage: 0.3 does not reduce the percentage of players affected. Both helpers send their nearby-player chat message immediately, before the delayed effects.
Expand Example
eliteScript:
Trigger:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: RUN_SCRIPT
scripts:
- "PotionZoneBad"
- "PotionZoneGood"
onlyRunOneScript: true
Cooldowns:
local: 110
global: 80
PotionZoneBad:
Zone:
shape: CYLINDER
height: 2
radius: 5
Target:
targetType: NEARBY_PLAYERS
range: 20
track: false
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: CLOUD
Target:
targetType: ZONE_FULL
coverage: 0.3
track: false
repeatEvery: 10
times: 4
- action: SPAWN_PARTICLE
particles:
- particle: LARGE_SMOKE
Target:
targetType: ZONE_FULL
coverage: 0.3
track: false
wait: 40
repeatEvery: 10
times: 6
- action: POTION_EFFECT
potionEffectType: WITHER
amplifier: 3
duration: 80
Target:
targetType: ZONE_FULL
track: false
wait: 40
repeatEvery: 10
times: 6
- action: MESSAGE
sValue: "&cCool boss!: &fFeel the burn!"
Target:
targetType: NEARBY_PLAYERS
range: 20
PotionZoneGood:
Zone:
shape: CYLINDER
height: 2
radius: 5
Target:
targetType: NEARBY_PLAYERS
range: 20
track: false
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: LARGE_SMOKE
Target:
targetType: ZONE_FULL
coverage: 0.3
track: false
repeatEvery: 10
times: 4
- action: SPAWN_PARTICLE
particles:
- particle: CLOUD
Target:
targetType: ZONE_FULL
coverage: 0.3
track: false
wait: 40
repeatEvery: 10
times: 6
- action: POTION_EFFECT
potionEffectType: INSTANT_HEALTH
amplifier: 1
duration: 80
Target:
targetType: ZONE_FULL
track: false
wait: 40
repeatEvery: 10
times: 6
- action: MESSAGE
sValue: "&cCool boss!: &fFeel the... Wait, this is the wrong one."
Target:
targetType: NEARBY_PLAYERS
range: 20
Blind Waves
This script captures two horizontal ray segments at the boss's position. Each spans from Z +5 to Z -5, then translates along world X toward +10 or -10 over 100 ticks. These offsets are world axes, not the boss's facing direction.
The two Z endpoints determine the segment's 10-block length, while each pair of final X coordinates determines its travel direction. Keep both FinalTarget and FinalTarget2 when adapting a translating ray.
Y offsets of zero place the segments at the initial boss-foot height. Changing both endpoint heights moves a ray vertically; it does not give it a rectangular wall height. The default pointRadius is 0.5, and collision checks sampled spheres against player bounding boxes. Jump clearance therefore depends on terrain and the player's full hitbox. ignoresSolidBlocks: true lets the waves pass through solid blocks.
Reducing animationDuration makes the movement faster; adjust action times too if the effects should end with the shorter animation. The last animation frame reaches the final targets exactly, and that final geometry remains available until the action ends.
Smoke runs every 5 ticks for 20 iterations, while blindness is checked every tick for 100 iterations. Each contact applies 100 ticks of blindness, so remaining in contact refreshes the effect rather than starting one fixed five-second window. Animated zones keep moving even with action-level track: false, and each action caches its animated shapes when it starts, whatever its track setting. The separate particle and potion actions each own their captured animated shapes.
Expand Example
eliteScript:
Blind:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
shape: TRANSLATING_RAY
Target:
targetType: SELF
offset: 0,0,5
track: false
FinalTarget:
targetType: SELF
offset: 10,0,5
track: false
Target2:
targetType: SELF
offset: 0,0,-5
track: false
FinalTarget2:
targetType: SELF
offset: 10,0,-5
track: false
animationDuration: 100
ignoresSolidBlocks: true
Actions:
- action: RUN_SCRIPT
scripts:
- "Blind2"
- action: SPAWN_PARTICLE
particles:
- particle: SMOKE
Target:
targetType: ZONE_FULL
track: false
coverage: 1.0
repeatEvery: 5
times: 20
- action: POTION_EFFECT
potionEffectType: BLINDNESS
amplifier: 5
duration: 100
Target:
targetType: ZONE_FULL
track: true
repeatEvery: 1
times: 100
Cooldowns:
local: 200
global: 80
Blind2:
Zone:
shape: TRANSLATING_RAY
Target:
targetType: SELF
offset: 0,0,5
track: false
FinalTarget:
targetType: SELF
offset: -10,0,5
track: false
Target2:
targetType: SELF
offset: 0,0,-5
track: false
FinalTarget2:
targetType: SELF
offset: -10,0,-5
track: false
animationDuration: 100
ignoresSolidBlocks: true
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: SMOKE
Target:
targetType: ZONE_FULL
track: false
coverage: 1.0
repeatEvery: 5
times: 20
- action: POTION_EFFECT
potionEffectType: BLINDNESS
amplifier: 5
duration: 100
Target:
targetType: ZONE_FULL
track: true
repeatEvery: 1
times: 100
Freeze Wall
This script stacks three rotating rays at the boss's initial foot height and at offsets of 1 and 2 blocks above it. A ray has a pointRadius, not a rectangular height, so the scripts combine several segments into a wall-like effect.
Each segment is 6 blocks long and uses a positive 360-degree yaw rotation over 200 ticks. Its initial direction is world +X; it does not depend on the boss's facing. The captured pivot does not follow the boss. The full line exists from the moment the shape is created, before the first rotation step. Solid blocks do not stop these rays.
Each script emits particles 20 times at 10-tick intervals and checks player contact every tick for 200 iterations. Each contact adds 100 freeze ticks. Contact with overlapping rays can add several increments on the same tick. Minecraft controls thawing and freeze damage, so this is neither a fixed five-second visual duration nor a movement freeze. Potion and freeze actions also respect EliteMobs' instance-effect policy.
Expand Example
eliteScript:
Trigger:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: RUN_SCRIPT
scripts:
- "FreezeWall"
- "FreezeWall2"
- "FreezeWall3"
Cooldowns:
local: 300
global: 80
FreezeWall:
Zone:
shape: ROTATING_RAY
Target:
targetType: SELF
track: false
Target2:
targetType: SELF
offset: 6,0,0
track: false
yawRotation: 360
animationDuration: 200
ignoresSolidBlocks: true
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: SNOWFLAKE
repeatEvery: 10
times: 20
Target:
targetType: ZONE_FULL
track: false
coverage: 1.0
- action: VISUAL_FREEZE
amount: 100
Target:
targetType: ZONE_FULL
track: false
repeatEvery: 1
times: 200
FreezeWall2:
Zone:
shape: ROTATING_RAY
Target:
targetType: SELF
track: false
offset: 0,1,0
Target2:
targetType: SELF
track: false
offset: 6,1,0
yawRotation: 360
animationDuration: 200
ignoresSolidBlocks: true
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: SNOWFLAKE
repeatEvery: 10
times: 20
Target:
targetType: ZONE_FULL
track: false
coverage: 1.0
- action: VISUAL_FREEZE
amount: 100
Target:
targetType: ZONE_FULL
track: false
repeatEvery: 1
times: 200
FreezeWall3:
Zone:
shape: ROTATING_RAY
Target:
targetType: SELF
track: false
offset: 0,2,0
Target2:
targetType: SELF
track: false
offset: 6,2,0
yawRotation: 360
animationDuration: 200
ignoresSolidBlocks: true
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: SNOWFLAKE
repeatEvery: 10
times: 20
Target:
targetType: ZONE_FULL
track: false
coverage: 1.0
- action: VISUAL_FREEZE
amount: 100
Target:
targetType: ZONE_FULL
track: false
repeatEvery: 1
times: 200