🏆 Event Milestones
Event milestones let you run actions when a player reaches a configured score threshold.
They are useful for giving players feedback during an event instead of only rewarding them at the end.
Basic example
milestones:
enabled: true
thresholds:
50:
display-name: "&e50 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
In this example, the player receives a message and sound when they reach 50 points.
Where milestones go
Milestones are configured at the main event level.
Example layout:
id: mining_rush
display-name: "&bMining Rush"
duration: 5m
objective:
type: MINE_BLOCKS
milestones:
enabled: true
thresholds:
25:
display-name: "&e25 Points"
once-per-player: true
actions:
- type: MESSAGE
message: "&aYou reached {milestone_display}!"
rewards:
participation:
enabled: true
minimum-score: 1
Settings
| Setting | Description |
|---|---|
enabled | Enables or disables milestones for the event |
thresholds | Score thresholds that can trigger actions |
display-name | Display name for the milestone |
once-per-player | Whether each player can trigger this milestone once |
actions | Actions to run when the milestone is reached |
Thresholds
Each key under thresholds: is the score required.
milestones:
enabled: true
thresholds:
10:
display-name: "&a10 Points"
once-per-player: true
actions:
- type: MESSAGE
message: "&aYou reached 10 points!"
50:
display-name: "&e50 Points"
once-per-player: true
actions:
- type: MESSAGE
message: "&eYou reached 50 points!"
A milestone triggers when the player crosses that score.
For example, if a player goes from 45 points to 55 points, the 50 milestone will trigger.
once-per-player
Most milestones should use:
once-per-player: true
This means each player can only trigger that milestone once during the event.
milestones:
enabled: true
thresholds:
25:
display-name: "&e25 Points"
once-per-player: true
actions:
- type: MESSAGE
message: "&aMilestone reached!"
If you set it to false, the milestone can trigger again if the event logic allows the player to cross that threshold again later.
For most normal events, keep it enabled.
Milestone placeholders
Milestone actions support normal EventForge placeholders and milestone-specific placeholders.
| Placeholder | Description |
|---|---|
{milestone} | Milestone ID |
{milestone_display} | Milestone display name |
{milestone_threshold} | Required score |
{old_score} | Score before the change |
{new_score} | Score after the change |
{score} | Current score |
{score_change} | Score gained |
Example:
message: "&aYou reached &f{milestone_display}&a at &e{new_score} &apoints!"
Actions
Milestones can run normal EventForge actions.
Example:
milestones:
enabled: true
thresholds:
50:
display-name: "&e50 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
Supported actions include:
MESSAGE
BROADCAST
TITLE
ACTIONBAR
ANIMATED_TITLE
ANIMATED_ACTIONBAR
SOUND
COMMAND
EFFECT
PARTICLE
FIREWORK
WEBHOOK
Custom addon actions can also be used if the addon registers them.
Animated milestone title
milestones:
enabled: true
thresholds:
100:
display-name: "<gradient:#22d3ed:#ffffff>100 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
Broadcast milestone
milestones:
enabled: true
thresholds:
100:
display-name: "&6100 Points"
once-per-player: true
actions:
- type: BROADCAST
message: "&e{player} reached &f{milestone_display} &ein &f{event_display}&e!"
This is useful for bigger milestones that should be shown to the whole server.
Command milestone
milestones:
enabled: true
thresholds:
75:
display-name: "&e75 Points"
once-per-player: true
actions:
- type: COMMAND
command: "give {player} emerald 1"
Commands are run by console.
Do not include / at the start of the command.
Milestones with text effects
Milestones support text effects.
milestones:
enabled: true
thresholds:
50:
display-name: "<gradient:#22d3ed:#ffffff>50 Points</gradient>"
once-per-player: true
actions:
- type: MESSAGE
message: "<pulse:#22d3ed:#ffffff>Milestone reached:</pulse> &f{milestone_display}"
Read the Text Effects page for the full effect list.
Testing milestones
You can test milestones with:
/eventforge points <player> <event> <amount>
Example:
/eventforge points Steve mining_rush 50
If the event is active and the player crosses a milestone threshold, the milestone actions should run.
Troubleshooting
Milestone does not trigger
Check that:
the event is active
milestones.enabled is true
the threshold is above 0
the player actually gained score
the player crossed the threshold
actions are configured correctly
Run:
/eventforge validate <event>
and check:
/eventforge errors <event>
Milestone only triggers once
That is usually because:
once-per-player: true
This is the recommended setting.
Command action does not work
Make sure the command works from console.
For example:
command: "give {player} emerald 1"
not:
command: "/give {player} emerald 1"
Developer API
Milestones are also available through the public API.
Useful classes:
EventMilestoneInfo
EventForgePlayerMilestoneEvent
Addons can listen for milestone events and cancel them if needed.
Summary
Milestones are a simple way to make events feel more active.
Use them for:
score progress messages
bonus rewards
milestone sounds
server announcements
mid-event commands
special effects