Skip to main content

🏆 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

SettingDescription
enabledEnables or disables milestones for the event
thresholdsScore thresholds that can trigger actions
display-nameDisplay name for the milestone
once-per-playerWhether each player can trigger this milestone once
actionsActions 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.

PlaceholderDescription
{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