⚡ Actions & Triggers
Actions and triggers let events run extra behaviour when something happens.
For example, an event can:
broadcast a message when it starts
send a title when it finishes
play a sound when players score
run a command
send a webhook
show animated titles
show animated actionbars
use custom actions from addons
Use actions when you want events to feel more custom and polished without needing a separate plugin or script.
Basic structure
Actions are configured under:
triggers:
trigger-name:
actions:
- type: ACTION_TYPE
message: "Message here"
Example:
triggers:
event-start:
actions:
- type: BROADCAST
message: "&bMining Rush has started!"
Supported triggers
EventForge supports these event-level triggers:
| Trigger | When it runs |
|---|---|
event-start | When the event starts |
event-finish | When the event finishes naturally |
event-stop | When the event is force-stopped |
player-score | When a player gains score |
Example:
triggers:
event-start:
actions:
- type: BROADCAST
message: "&aThe event has started!"
event-finish:
actions:
- type: BROADCAST
message: "&eThe event has finished!"
player-score:
actions:
- type: ACTIONBAR
message: "&a+{score_change} points &7| Total: &f{new_score}"
Some objective types can also run their own actions. For example, capture zones, visit regions, interact blocks, and milestones can all run actions from their own sections.
Built-in action types
EventForge includes these built-in action types:
BROADCAST
MESSAGE
TITLE
ACTIONBAR
ANIMATED_TITLE
ANIMATED_ACTIONBAR
SOUND
COMMAND
EFFECT
PARTICLE
FIREWORK
WEBHOOK
Custom addons can also register more action types through the EventForge API.
Placeholders
Actions support EventForge placeholders.
| Placeholder | Description |
|---|---|
{event} | Event ID |
{event_display} | Event display name |
{time_left} | Time left |
{elapsed} | Time elapsed |
{player} | Player name, if the trigger has a player |
{uuid} | Player UUID, if available |
{score} | Player score |
{rank} | Player rank |
{old_score} | Previous score |
{new_score} | New score |
{score_change} | Score gained |
{var:key} | Event variable |
Example:
triggers:
player-score:
actions:
- type: ACTIONBAR
message: "&a+{score_change} &7points &8| &f{new_score} total"
Milestone placeholders
Milestone actions can also use milestone placeholders.
| Placeholder | Description |
|---|---|
{milestone} | Milestone ID |
{milestone_display} | Milestone display name |
{milestone_threshold} | Milestone score threshold |
{old_score} | Score before crossing the milestone |
{new_score} | Score after crossing the milestone |
{score} | Current score |
{score_change} | Score gained |
Example:
milestones:
enabled: true
thresholds:
50:
display-name: "&e50 Points"
once-per-player: true
actions:
- type: MESSAGE
message: "&aYou reached &f{milestone_display}&a!"
Event variables in actions
Actions support event variables.
variables:
event_color: "&b"
arena_name: "Spawn Mine"
triggers:
event-start:
actions:
- type: BROADCAST
message: "{var:event_color}&l{event_display} &7has started at &f{var:arena_name}&7!"
Variables are useful when you reuse colours, arena names, reward names, or phrases across the same event file.
Text effects in actions
Actions can use EventForge text effects.
triggers:
event-start:
actions:
- type: BROADCAST
message: "<gradient:#22d3ed:#ffffff>{event_display}</gradient> &7has started!"
Common effects:
<rainbow>Text</rainbow>
<gradient:#22d3ed:#ffffff>Text</gradient>
<pulse:#22d3ed:#ffffff>Text</pulse>
<shimmer:#22d3ed:#ffffff>Text</shimmer>
<stack:rainbow,wobble>Text</stack>
For the full list, read the Text Effects page.
Broadcast action
Sends a message to the server.
triggers:
event-start:
actions:
- type: BROADCAST
message: "&bMining Rush has started!"
With text effects:
triggers:
event-start:
actions:
- type: BROADCAST
message: "<gradient:#22d3ed:#ffffff>Mining Rush</gradient> &7has started!"
Message action
Sends a message to the player involved in the trigger.
This is most useful for player-based triggers such as player-score.
triggers:
player-score:
actions:
- type: MESSAGE
message: "&aYou gained &f{score_change} &apoints!"
If the trigger does not have a player, player-only actions may do nothing.
Title action
Sends a title to players.
triggers:
event-start:
actions:
- type: TITLE
title: "&b&lMining Rush"
subtitle: "&7Mine blocks to earn points!"
fade-in: 10
stay: 50
fade-out: 10
Useful settings:
| Setting | Description |
|---|---|
title | Main title text |
subtitle | Subtitle text |
fade-in | Fade-in time in ticks |
stay | Stay time in ticks |
fade-out | Fade-out time in ticks |
Animated title action
ANIMATED_TITLE lets you send title frames with text effects and placeholders.
triggers:
event-start:
actions:
- type: ANIMATED_TITLE
frames:
- title: "<stack:rainbow,wobble>{event_display}</stack>"
subtitle: "&7Mine blocks to score!"
fade-in: 5
stay: 40
fade-out: 10
interval: 5
Frame settings:
| Setting | Description |
|---|---|
title | Main title text |
subtitle | Subtitle text |
fade-in | Fade-in time in ticks |
stay | Stay time in ticks |
fade-out | Fade-out time in ticks |
interval | Delay before the next frame |
Example with multiple frames:
- type: ANIMATED_TITLE
frames:
- title: "<gradient:#22d3ed:#ffffff>{event_display}</gradient>"
subtitle: "&7Starting now..."
fade-in: 5
stay: 30
fade-out: 5
interval: 5
- title: "<pulse:#22d3ed:#ffffff>Good luck!</pulse>"
subtitle: "&7Score as much as possible."
fade-in: 0
stay: 30
fade-out: 10
interval: 5
Animated titles work best for event starts, event finishes, and milestone moments.
Actionbar action
Sends an actionbar message to the player involved in the trigger.
triggers:
player-score:
actions:
- type: ACTIONBAR
message: "&a+{score_change} points &8| &7Total: &f{new_score}"
Animated actionbar action
ANIMATED_ACTIONBAR lets you show short animated actionbar messages.
triggers:
player-score:
actions:
- type: ANIMATED_ACTIONBAR
frames:
- message: "<pulse:#22d3ed:#ffffff>+{score_change} points</pulse> &8| &7Total: &f{new_score}"
duration: 30
interval: 5
Frame settings:
| Setting | Description |
|---|---|
message | Actionbar text |
duration | How long this frame sequence should run |
interval | How often the frame updates |
Example:
- type: ANIMATED_ACTIONBAR
frames:
- message: "<shimmer:#22d3ed:#ffffff>Keep going!</shimmer>"
duration: 60
interval: 5
Animated actionbars are great for score feedback because they do not fill chat.
Sound action
Plays a sound.
triggers:
player-score:
actions:
- type: SOUND
sound: ENTITY_EXPERIENCE_ORB_PICKUP
volume: 1.0
pitch: 1.2
Useful settings:
| Setting | Description |
|---|---|
sound | Bukkit sound name |
volume | Sound volume |
pitch | Sound pitch |
Command action
Runs a command from console.
triggers:
event-start:
actions:
- type: COMMAND
command: "say {event_display} has started!"
Commands do not need a leading slash.
Good uses:
give items
run crate commands
run permission commands
send server announcements
run custom plugin commands
Example:
rewards:
participation:
enabled: true
minimum-score: 1
commands:
- "give {player} emerald 1"
Effect action
Applies a potion effect to the player involved in the trigger.
triggers:
player-score:
actions:
- type: EFFECT
effect: SPEED
duration: 5
amplifier: 1
Useful settings:
| Setting | Description |
|---|---|
effect | Potion effect type |
duration | Duration in seconds |
amplifier | Effect amplifier |
Particle action
Spawns particles.
triggers:
player-score:
actions:
- type: PARTICLE
particle: HAPPY_VILLAGER
count: 10
offset-x: 0.3
offset-y: 0.5
offset-z: 0.3
speed: 0.0
Useful settings:
| Setting | Description |
|---|---|
particle | Bukkit particle name |
count | Particle count |
offset-x | X offset |
offset-y | Y offset |
offset-z | Z offset |
speed | Particle speed |
Firework action
Spawns a firework effect.
triggers:
event-finish:
actions:
- type: FIREWORK
power: 1
colors:
- "#22d3ed"
- "#ffffff"
Useful settings:
| Setting | Description |
|---|---|
power | Firework power |
colors | Hex colour list |
Webhook action
Sends a webhook message.
triggers:
event-start:
actions:
- type: WEBHOOK
url: "https://discord.com/api/webhooks/..."
username: "EventForge"
message: "**{event_display}** has started!"
Useful settings:
| Setting | Description |
|---|---|
url | Webhook URL |
username | Webhook username |
avatar-url | Optional avatar URL |
message | Webhook message |
Never share real webhook URLs publicly.
Actions in milestones
Milestones can run any normal EventForge action.
milestones:
enabled: true
thresholds:
25:
display-name: "&e25 Points"
once-per-player: true
actions:
- type: MESSAGE
message: "&aYou reached &f{milestone_display}&a!"
- type: SOUND
sound: ENTITY_PLAYER_LEVELUP
volume: 1.0
pitch: 1.2
You can also use animated actions:
milestones:
enabled: true
thresholds:
50:
display-name: "<gradient:#22d3ed:#ffffff>50 Points</gradient>"
once-per-player: true
actions:
- type: ANIMATED_TITLE
frames:
- title: "<stack:rainbow,wobble>{milestone_display}</stack>"
subtitle: "&7Milestone reached!"
fade-in: 5
stay: 40
fade-out: 10
interval: 5
Actions in objective sections
Some objectives have their own action sections.
Examples:
capture zone capture actions
capture zone contested actions
visit region actions
interact block success actions
interact block cooldown actions
milestone actions
These actions use the same action system as triggers.
This keeps objective-specific behaviour consistent with normal event triggers.
Custom addon actions
Addons can register custom action types through the EventForge API.
Example action type from an addon:
RELIC_LOG
Then the event config can use it like a normal action:
triggers:
event-start:
actions:
- type: RELIC_LOG
message: "{event_display} started."
Custom action types depend on the addon that registered them. If the addon is missing, the action will not be available.
Action timing tips
Use actions carefully.
Good uses:
event-start broadcast/title
player-score actionbar/sound
event-finish broadcast/firework
milestone message/sound/title
objective discovery messages
webhook event summaries
Avoid:
heavy command spam
long chat spam on every score update
too many animated titles at once
webhooks on every small score change
Simple event-start example
triggers:
event-start:
actions:
- type: BROADCAST
message: "<gradient:#22d3ed:#ffffff>{event_display}</gradient> &7has started!"
- type: ANIMATED_TITLE
frames:
- title: "<stack:rainbow,wobble>{event_display}</stack>"
subtitle: "&7Good luck!"
fade-in: 5
stay: 40
fade-out: 10
interval: 5
- type: SOUND
sound: ENTITY_PLAYER_LEVELUP
volume: 1.0
pitch: 1.0
Simple player-score example
triggers:
player-score:
actions:
- type: ANIMATED_ACTIONBAR
frames:
- message: "<pulse:#22d3ed:#ffffff>+{score_change} points</pulse> &8| &7Total: &f{new_score}"
duration: 30
interval: 5
- type: SOUND
sound: ENTITY_EXPERIENCE_ORB_PICKUP
volume: 0.8
pitch: 1.4
Summary
Actions are one of the easiest ways to make an EventForge event feel more alive.
Use them for:
messages
titles
actionbars
sounds
commands
effects
particles
fireworks
webhooks
milestones
objective-specific feedback
custom addon behaviour
For polished events, combine actions with variables, text effects, milestones, bossbars, and sidebars.