EventForge v1.0.3

Create server events, packs, objectives, rewards, and more with a powerful event framework!
EventForge v1.0.3 is a major presentation, player choice, and API update.

This release adds optional TextEffect integration, manual event voting, scheduled hybrid voting, manual event queues, queue lobby countdowns, expanded PlaceholderAPI support, new public API services, new Bukkit events, stronger validation, and safer reload behaviour.

The classic EventForge experience is still the default. New premium systems are included, but they are opt-in unless you choose to enable them.

Highlights​

Optional TextEffect integration
Manual event voting
Scheduled hybrid voting
Manual event queues / hype phase
Optional queue lobby teleporting
Queue bossbar countdowns
3, 2, 1, GO queue titles
Manual-only scoring protection
Voting PlaceholderAPI support
Scheduled voting PlaceholderAPI support
Queue PlaceholderAPI support
Voting public API
Scheduled voting public API
Queue public API
Voting Bukkit events
Scheduled voting Bukkit events
Queue Bukkit events
Improved TextEffect reload handling
Improved sound compatibility
Expanded /eventforge validate checks
Updated bundled templates
Version metadata updated to 1.0.3-release


Backwards-compatible defaults​

v1.0.3 keeps new installs safe by default.

TextEffect integration: disabled by default
Manual voting: disabled by default
Scheduled voting: disabled by default
Global participation: AUTOMATIC by default
Queue bossbar visuals: disabled by default
Queue countdown titles: disabled by default
Bundled templates: participation.mode: GLOBAL

This means existing event setups continue to behave like normal EventForge events until you choose to enable the new systems.


Optional TextEffect integration​

Purchasing EventForge makes you eligible to download TextEffect for FREE!

EventForge can now hook into the separate TextEffect plugin to render animated shader-powered text in supported EventForge displays.

Supported areas include:

GUI item names and lore
Event broadcast/chat messages
Start/end/result messages
Titles and subtitles
Actionbars
Main event bossbars
Mob invasion / wave bossbars
Manual queue bossbars
Manual queue countdown titles
Manual queue GO titles

TextEffect is optional. If it is not installed, or if the integration is disabled, EventForge safely falls back to normal text formatting.

Configure it in config.yml:

integrations:
texteffect:
enabled: false
mode: "DISABLED"

Available modes:

ALWAYS
SERVER_STATUS
DISABLED

Sidebar animation and dialogue text animation are intentionally skipped in v1.0.3 to keep the release stable across Spigot, Paper, and Purpur 1.21 - 1.21.11.


Manual event voting​

Admins can now start an event vote and let players choose which event should run next.

/eventforge vote start <event1> <event2> [event3...]
/eventforge vote cancel
/eventforge vote status
/eventforge vote confirm

Players vote with:

/events vote <event>

When a vote starts, EventForge broadcasts clickable vote options in chat. Players can click an event name to vote automatically, or use the command manually.

Manual voting is configured in config.yml:

voting:
enabled: false
default-duration: 60s
min-options: 2
max-options: 5
allow-vote-change: true
start-winner-automatically: true
broadcast-result: true

The winning event starts through EventForge's normal event start flow, so regular start checks still apply.

If the winning event uses manual participation, EventForge opens a queue instead of starting the event instantly.


Scheduled hybrid voting​

v1.0.3 adds scheduled voting from schedule_config.yml.

Instead of always scheduling a single event, servers can schedule a vote and let players choose from a configured pool of events.

scheduled-voting:
enabled: false

schedules:
hourly_vote:
enabled: false
type: INTERVAL
every: 1h
duration: 60s

options:
- mining_rush
- mob_hunt
- fishing_frenzy

randomize-options: false
randomize-amount: 3
start-winner-automatically: true

announce-before:
- 5m
- 1m

require-no-active-events: true
require-no-active-vote: true

Scheduled votes support:

interval scheduling
pre-vote announcements
option pools
randomized options
active-event skip rules
active-vote skip rules
safe validation against loaded event templates

/eventforge schedules now shows both normal event schedules and scheduled event votes.


Manual event queues / hype phase​

EventForge now supports manual participation mode.

Manual events open a timed queue before the event starts. Players join the queue, optionally teleport to a waiting lobby, see countdown visuals, and only queued players can score once the event begins.

participation:
mode: MANUAL
queue-duration: 30s
min-players: 1
max-players: 0
allow-leave-before-start: true

lobby:
enabled: false
world: "world"
x: 0.5
y: 80.0
z: 0.5
yaw: 0
pitch: 0

Player commands:

/events join <event>
/events leave <event>
/events tp <event>
/events teleport <event>

/events join <event> is queue-first. If no queue exists and the active event has a teleport location, it still supports the old teleport behaviour as a legacy fallback.


Queue bossbar and countdown titles​

Manual queues can show a bossbar while the queue is open.

participation:
queue-bossbar:
enabled: false
title: "&ePreparing for &f{event_display} &8| &f{time_left} &8| &7Joined: &f{players}&8/&f{max_players}"
color: YELLOW
style: SOLID

Manual queues can also show 3, 2, 1, GO title countdowns.

participation:
queue-countdown:
enabled: false
seconds:
- 3
- 2
- 1
title: "&e{seconds}"
subtitle: "&f{event_display} &7starts soon..."
go-title: "&aGO!"
go-subtitle: "&f{event_display} &7has begun!"
fade-in: 0
stay: 20
fade-out: 10

The GO title is only shown if the queued event actually starts.


Manual scoring protection​

Manual events are protected by a central score gate.

For participation.mode: MANUAL:

Only queued players can score
Non-queued players are ignored by objective scoring
Non-queued players do not appear on the leaderboard
Non-queued players do not receive participation rewards

For participation.mode: AUTOMATIC, events behave like previous EventForge versions.

The protection is applied centrally, so it covers built-in objectives, custom objective sessions, admin score commands, and public API score methods.


PlaceholderAPI additions​

v1.0.3 adds placeholders for votes, scheduled votes, and queues.

Vote placeholders include:

%eventforge_vote_enabled%
%eventforge_vote_active%
%eventforge_vote_time_left%
%eventforge_vote_total_votes%
%eventforge_vote_options%
%eventforge_vote_option_ids%
%eventforge_vote_winner%
%eventforge_vote_winner_display%
%eventforge_vote_count_<event_id>%
%eventforge_vote_option_<event_id>%

Scheduled vote placeholders include:

%eventforge_scheduled_vote_enabled%
%eventforge_scheduled_vote_count%
%eventforge_next_scheduled_vote%
%eventforge_next_scheduled_vote_time_left%
%eventforge_next_scheduled_vote_options%
%eventforge_next_scheduled_vote_option_ids%
%eventforge_scheduled_vote_time_left_<id>%
%eventforge_scheduled_vote_options_<id>%
%eventforge_scheduled_vote_option_ids_<id>%

Queue placeholders include:

%eventforge_queue_active%
%eventforge_queue_event%
%eventforge_queue_event_display%
%eventforge_queue_time_left%
%eventforge_queue_players%
%eventforge_queue_min_players%
%eventforge_queue_max_players%
%eventforge_queue_joined%
%eventforge_queue_<event_id>_active%
%eventforge_queue_<event_id>_time_left%
%eventforge_queue_<event_id>_players%
%eventforge_queue_<event_id>_joined%


Public API additions​

The public API version now reports:

1.0.3-release

New API services include:

EventVoteService
ScheduledVoteService
EventQueueService

New immutable snapshot objects include:

EventVoteInfo
ScheduledVoteInfo
EventQueueInfo

These APIs are snapshot-based and do not expose internal runtime objects such as vote sessions, queue objects, scheduler tasks, or mutable maps.


Bukkit API events​

v1.0.3 adds Bukkit events for voting, scheduled voting, and queues.

Manual vote events:

EventForgeVoteStartEvent
EventForgeVoteCastEvent
EventForgeVoteEndEvent
EventForgeVoteCancelEvent

Scheduled vote events:

EventForgeScheduledVoteStartEvent
EventForgeScheduledVoteSkipEvent

Queue events:

EventForgeQueueOpenEvent
EventForgeQueueJoinEvent
EventForgeQueueLeaveEvent
EventForgeQueueStartEvent
EventForgeQueueCancelEvent

Queue start events only fire when the queued event successfully starts.

Queue cancel events can report reasons such as:

NOT_ENOUGH_PLAYERS
START_FAILED


Validation improvements​

/eventforge validate was expanded to check more runtime and config problems.

New validation coverage includes:

invalid TextEffect mode
scheduled voting config
scheduled vote intervals
scheduled vote durations
scheduled vote options
duplicate scheduled vote options
invalid scheduled vote randomize amount
scheduled vote announce-before values
participation default mode
queue bossbar color
queue bossbar style
queue countdown seconds
queue countdown title timing
event participation mode
queue duration
min/max queue player limits
lobby world
lobby height
lobby pitch

schedule_config.yml can also be checked directly:

/eventforge validate schedule_config.yml


Sound compatibility​

Sound playback was updated to avoid risky enum lookups on older 1.21 builds.

Configs can use formats such as:

sound: ENTITY_PLAYER_LEVELUP
sound: entity.player.levelup
sound: minecraft:entity.player.levelup

Dialogue sounds use the same safer sound handling.


Template polish​

Bundled templates were updated for v1.0.3.

They now include:

variables:
event_plain_name: "Example Event"

This gives server owners a clean text value to use inside optional TextEffect tags.

Templates also include updated participation comments, optional TextEffect notes, and metadata updated from 1.0.2 to 1.0.3.


Compatibility summary​

EventForge v1.0.3 avoids risky version-specific systems.

This update does not add:

NMS
ProtocolLib
packet sidebar rendering
direct TextEffect internals
Sound enum lookup
Bukkit scoreboard JSON hacks

Supported platforms remain:

Spigot 1.21 - 1.21.11
Paper 1.21 - 1.21.11
Purpur 1.21 - 1.21.11

Java 21 is recommended.


Summary​

EventForge v1.0.3 is a major premium event presentation and player-choice update.

It adds optional animated TextEffect display support, full manual and scheduled event voting, and a complete manual queue/hype phase system. Server owners can keep classic automatic participation or enable manual queue mode for more polished competitions.

The update also expands PlaceholderAPI, validation, and the public API with safe immutable snapshots and Bukkit events for voting, scheduled voting, and queues.
EventForge v1.0.2 is a large framework update focused on wider server support, better validation tools, more event visuals, new objective types, public API improvements, and updated addon examples.

This version also moves EventForge from a Paper-focused build to a Spigot-compatible build.

tip
v1.0.2 is a strong update for both server owners and addon developers. It adds more ready-to-play content while also making the public API much more useful.

Highlights​

Spigot support
/eventforge validate
/eventforge errors
More PlaceholderAPI placeholders
Public VariableService
Public ActionService
Public TextEffectService
Animated titles
Animated actionbars
Animated bossbar text
CAPTURE_ZONE objective
VISIT_REGIONS objective
INTERACT_BLOCKS objective
Event milestones
Improved template installer
Mob Invasion empty-area wave pause
/events join <event>
Updated ready-to-play templates
Updated Simple Example addon
Updated Advanced Example addon
Updated Skript addon
Protected built-in API registrations


Spigot support​

EventForge now supports:

Spigot 1.21 - 1.21.11
Paper 1.21 - 1.21.11
Purpur 1.21 - 1.21.11

This makes EventForge easier to use on more server setups.


New validation commands​

v1.0.2 adds:

/eventforge validate
/eventforge validate <event>

Use this to check event files without starting them.

It helps catch:

YAML mistakes
missing objective sections
invalid materials
invalid particles
wrong configuration paths
bad template setup


New error report command​

v1.0.2 adds:

/eventforge errors
/eventforge errors <event>

This shows the latest validation or reload problems without searching through console logs.


Message cleanup​

More command output now comes from:

messages.yml

Improved areas include:

event lists
active events
leaderboards
schedules
dialogue command output
/events console output
validation messages
error report messages
template installer messages
join messages


PlaceholderAPI improvements​

v1.0.2 adds more PlaceholderAPI placeholders for:

active events
next scheduled event
player stats
event status
event cooldowns
event metadata
player score
player rank
participant count

Examples:

%eventforge_active_names%
%eventforge_next_event%
%eventforge_next_event_time%
%eventforge_player_total_score%
%eventforge_player_events_played%
%eventforge_player_wins%
%eventforge_event_mining_rush_active%
%eventforge_event_mining_rush_time_left%
%eventforge_event_mining_rush_player_score%
%eventforge_event_mining_rush_player_rank%


Public VariableService​

v1.0.2 adds:

EventForgeAPI.getVariableService()

Addon developers can now parse EventForge variables properly instead of duplicating {var:key} logic.

Example:

EventForgeAPI.getVariableService().parse(eventId, text);
EventForgeAPI.getVariableService().parse(eventId, player, text);

This is useful for addon messages, custom objectives, custom actions, and external integrations.


Public ActionService​

v1.0.2 adds:

EventForgeAPI.getActionService()

Addon developers can now execute EventForge actions through the official action system.

Supported through the shared action system:

MESSAGE
BROADCAST
TITLE
ACTIONBAR
SOUND
COMMAND
EFFECT
PARTICLE
FIREWORK
WEBHOOK
ANIMATED_TITLE
ANIMATED_ACTIONBAR

This means addons can reuse the same action behaviour as normal EventForge event configs.


Public TextEffectService​

v1.0.2 adds:

EventForgeAPI.getTextEffectService()

Text effects can be used by EventForge and addons through the same parser.

Supported effects include:

<rainbow>Text</rainbow>
<reverse-rainbow>Text</reverse-rainbow>
<gradient:#22d3ed:#ffffff>Text</gradient>
<alternate:#22d3ed:#ffffff>Text</alternate>
<striped:#22d3ed:#ffffff>Text</striped>
<pulse:#22d3ed:#ffffff>Text</pulse>
<blink:#ffffff:#555555>Text</blink>
<wave:#22d3ed:#ffffff>Text</wave>
<scan:#777777:#ffffff>Text</scan>
<shimmer:#22d3ed:#ffffff>Text</shimmer>
<wobble:#22d3ed:#ffffff>Text</wobble>
<jump:#22d3ed:#ffffff>Text</jump>
<solid:#22d3ed>Text</solid>
<fire>Text</fire>
<ocean>Text</ocean>
<ice>Text</ice>
<magic>Text</magic>
<toxic>Text</toxic>
<sunset>Text</sunset>
<stack:rainbow,wobble>Text</stack>
<effects:fire,jump>Text</effects>

Legacy colour codes inside effect tags are cleaned up safely, so display names like &aCollection Rush do not show raw &a inside gradients.


Animated titles​

v1.0.2 adds:

ANIMATED_TITLE

Example:

- type: ANIMATED_TITLE
frames:
- title: "<stack:rainbow,wobble>{event_display}</stack>"
subtitle: "&7Starting..."
fade-in: 5
stay: 40
fade-out: 10
interval: 5

Animated titles support:

placeholders
variables
text effects
animation ticks
tracked cancellation


Animated actionbars​

v1.0.2 adds:

ANIMATED_ACTIONBAR

Example:

- type: ANIMATED_ACTIONBAR
frames:
- message: "<pulse:#22d3ed:#ffffff>+{score_change} points</pulse> &8| &7Total: &f{new_score}"
duration: 30
interval: 5

Animated actionbars are useful for player score feedback, milestone progress, event warnings, and short event messages.


Tracked animation manager​

Animated title and actionbar tasks are now tracked internally.

They are cancelled safely when:

event stops
event reloads
all events stop
plugin disables

This prevents delayed animation frames from continuing after an event has ended.


Animated bossbar text​

Bossbars can now rotate through configurable frames.

Example:

bossbar:
enabled: true
text: "&e{event_display} &8| &f{time_left}"
color: YELLOW
style: SOLID

animated-text:
enabled: true
interval: 20
frames:
- "<stack:rainbow,wobble>{event_display}</stack> &8| &f{time_left}"
- "&eScore: &f{score} &8| &7Rank: &e#{rank}"
- "<pulse:#22d3ed:#ffffff>Keep going!</pulse>"

This lets bossbars feel more active without needing a resource pack.


New objective: CAPTURE_ZONE​

CAPTURE_ZONE is a KOTH-style objective.

It supports:

score while standing in zones
points every X seconds
contested zone handling
team field
team placeholder
zone particle rendering
capture actions
contested actions
rich placeholders

Public API classes:

CaptureZoneInfo
CaptureZoneObjectiveData
ZoneRenderInfo

Example use cases:

King of the Hill
capture zones
server war events
team capture points
PvP events


New objective: VISIT_REGIONS​

VISIT_REGIONS is an exploration/checkpoint objective.

It supports:

score when entering configured regions
once-per-player visits
cooldowns
region discovery messages
region discovery actionbars
region actions
rich placeholders

Public API classes:

VisitRegionInfo
VisitRegionsObjectiveData

Example use cases:

exploration hunt
spawn tour
easter egg hunt
checkpoint event
landmark discovery


New objective: INTERACT_BLOCKS​

INTERACT_BLOCKS lets players score by right-clicking configured blocks.

It supports:

vanilla blocks
ItemsAdder custom block IDs
Oraxen custom block IDs
Nexo custom block IDs
fallback materials
per-location tracking
global tracking
cooldowns
once-per-player interactions
cancel-event
success actions
cooldown actions
rich placeholders

Public API classes:

InteractBlockInfo
InteractBlocksObjectiveData

Example use cases:

bell hunt
button hunt
crate hunt
hidden object hunt
custom block interaction event


Event milestones​

Events can now define score milestones.

Example:

milestones:
enabled: true
thresholds:
50:
display-name: "&e50 Points"
once-per-player: true
actions:
- type: MESSAGE
message: "&aYou reached {milestone_display}!"
- type: SOUND
sound: ENTITY_PLAYER_LEVELUP

Milestones support:

per-player tracking
score threshold detection
milestone actions
milestone placeholders
public API event

Milestone placeholders include:

{milestone}
{milestone_display}
{milestone_threshold}
{old_score}
{new_score}
{score}
{score_change}

Public API:

EventMilestoneInfo
EventForgePlayerMilestoneEvent


Improved template installer​

Template installation now supports overwrite confirmation.

/eventforge installtemplate <template>
/eventforge installtemplate <template> confirm

This makes updating bundled templates safer because EventForge will not overwrite an existing installed event unless you confirm it.


Mob Invasion polish​

Mob Invasion now supports:

start-requirements:
require-player-nearby: true
radius: 50

empty-area:
pause-waves: true
radius: 50

join:
enabled: true
world: world
x: 0
y: 70
z: 0
yaw: 0
pitch: 0

New player command:

/events join <event>

This helps stop waves from spam-completing when nobody is near the invasion area.


Updated ready-to-play templates​

New bundled templates:

capture_zone.yml
exploration_hunt.yml
interact_blocks_hunt.yml

Existing templates were also updated to showcase v1.0.2 features while staying vanilla-friendly.


Protected built-in API registrations​

Built-in action and objective registrations are now protected.

Protected built-in objectives:

MINE_BLOCKS
KILL_MOBS
FISH_ITEMS
COLLECT_ITEMS
MOB_INVASION
CAPTURE_ZONE
VISIT_REGIONS
INTERACT_BLOCKS

Protected built-in actions include:

ANIMATED_TITLE
ANIMATED_ACTIONBAR

This prevents addons from accidentally unregistering EventForge core systems.


Updated EventForgeSkriptAddon​

EventForgeSkriptAddon was updated for v1.0.2.

Added new Skript expressions:

eventforge text effects of %string%
eventforge text effects of %string% at tick %number%
eventforge parsed variables of %string% for event %string%
eventforge parsed variables of %string% for event %string% and player %player%
eventforge milestone count of event %string%
eventforge milestones of event %string%
eventforge milestone threshold %string% of event %string%
eventforge milestone display name %string% of event %string%

Added new Skript events:

on eventforge event start
on eventforge event stop
on eventforge event finish
on eventforge reload
on eventforge score change
on eventforge milestone

Added event-context expressions:

current eventforge event id
current eventforge event display name
eventforge event player
eventforge old score
eventforge new score
eventforge score change
eventforge milestone id
eventforge milestone display name
eventforge milestone threshold
eventforge reload loaded events
eventforge reload validation warnings
eventforge reload validation errors
eventforge reload scheduled events
eventforge reload registered objectives

New example script:

eventforge-v102-features.sk


Updated Simple Example addon​

EventForgeSimpleExample was updated to demonstrate v1.0.2 API features.

Added command examples:

/efsimple texteffects <text>
/efsimple parse <event> <text>
/efsimple milestones <event>

It now demonstrates:

TextEffectService
VariableService
EventInfo#getMilestones()
EventMilestoneInfo
EventForgePlayerMilestoneEvent


Updated Advanced Example addon​

EventForgeAdvancedExample was updated to demonstrate advanced v1.0.2 API usage.

It now showcases:

custom objective registration
custom action registration
VariableService
TextEffectService
animated title/actionbar/bossbar config
event milestones
milestone placeholders
dialogue integration
custom objective scoring

The bundled relic_hunt.yml example was updated to v1.0.2.


Summary​

EventForge v1.0.2 adds a lot of practical value:

more supported server software
better admin debugging tools
more polished event visuals
more ready-to-play objectives
better Mob Invasion behaviour
more useful public API
updated addon examples
EventForge v1.0.1 expands the plugin into a more complete event framework update. View full changelog here

This release adds reusable event variables, chance rewards, event cooldowns, multi-objective events, the action/trigger system, webhook actions, configurable GUI titles, NPC-style dialogues, API improvements, updated addon examples, and a much larger Skript addon.

Highlights​

Event variables
Chance rewards
Event cooldowns
Better API filtering
Start check reasons
Upcoming schedule API
Action and trigger system
Webhook action
Multi-objective events
GUI title customization
NPC-style dialogue system
Updated simple addon
Updated advanced addon
Updated Skript addon
Bundled Skript example scripts
API published to Maven Central


Event variables​

Event configs can now define reusable variables:

variables:
event_color: "&b"
arena_name: "Spawn Mine"
reward_name: "Mining Tokens"

Use them with:

{var:key}

Example:

display-name: "{var:event_color}Mining Rush"

messages:
start:
- "{var:event_color}&lMining Rush has started!"
- "&7Mine blocks in &f{var:arena_name}&7."

Variables can be used in player-facing event text such as messages, rewards, bossbars, sidebars, titles, actions, dialogues, and webhooks.

Variable keys are normalised, so hyphens and underscores are treated consistently.


Chance rewards​

Rewards now support optional chance-based bonus rewards.

rewards:
participation:
enabled: true
minimum-score: 1
commands:
- "eco give {player} 100"

chance-rewards:
bonus_key:
chance: 10.0
commands:
- "crate key give {player} event 1"

Chance rewards are supported under:

rewards.participation.chance-rewards
rewards.leaderboard.<position>.chance-rewards

Chance values are percentages.

5.0 = 5%
25.0 = 25%
100.0 = guaranteed

Chance rewards use the same reward command pipeline as normal rewards, so developer reward listeners still work.


Event cooldowns​

Events can now have cooldowns.

cooldown:
enabled: true
duration: 1h

Cooldown behaviour:

natural event finish starts cooldown
forced stop does not start cooldown
reload/shutdown does not start cooldown
manual starts respect cooldown
scheduled starts respect cooldown
API starts respect cooldown
Skript addon starts respect cooldown through the API
cooldowns persist in cooldowns.yml

Cooldowns are stored in:

plugins/EventForge/cooldowns.yml


Better API filtering and start checks​

The API now includes better event filtering and start validation.

New EventService methods include:

getEventsByCategory(String category);
getEventsWithTag(String tag);
getEventsByDifficulty(String difficulty);
getStartCheckResult(String eventId);
canStartEvent(String eventId);

EventStartCheckResult provides:

canStart();
hasPassed();
hasFailed();
getEventId();
getReason();

This is useful for:

custom GUIs
Discord bots
event browsers
admin dashboards
setup tools
start buttons


Upcoming schedule API​

ScheduleService now includes:

getUpcomingEvents(int limit);

This lets addons and dashboards show several upcoming scheduled events instead of only the next one.


Action and trigger system​

v1.0.1 expands the action and trigger system.

Supported triggers:

event-start
event-finish
event-stop
player-score

Built-in action types:

BROADCAST
MESSAGE
TITLE
ACTIONBAR
SOUND
COMMAND
EFFECT
PARTICLE
FIREWORK
WEBHOOK

Example:

triggers:
event-start:
actions:
- type: BROADCAST
message: "&b{event_display} has started!"

player-score:
actions:
- type: ACTIONBAR
message: "&a+{score_change} points &8| &f{new_score} total"


Webhook action​

The new WEBHOOK action can send HTTP POST messages asynchronously.

triggers:
event-start:
actions:
- type: WEBHOOK
url: "https://discord.com/api/webhooks/..."
username: "EventForge"
message: "{event_display} has started!"

Webhook safety improvements include:

HTTPS-only URLs
async execution
main thread is not blocked
Discord message length cap
username length cap
webhook URL is not printed in logs
placeholder support
{var:key} support

warning
Do not share real webhook URLs in public configs, screenshots, template packs, or support messages.

Custom action API​

Developers can now register custom actions.

EventForgeAPI.getActionRegistry().register("DISCORD_LOG", (action, context) -> {
String message = action.getString("message", "{event_display} started!");
String parsed = context.parsePlaceholders(message);

Bukkit.getLogger().info(parsed);
});

Server owners can use registered custom actions in event YAML:

triggers:
event-start:
actions:
- type: DISCORD_LOG
message: "{event_display} started!"

Custom action executor errors are caught safely so events continue running.


Multi-objective events​

Events can now run multiple objectives at the same time.

objectives:
mining:
type: MINE_BLOCKS
weight: 1.0

mobs:
type: KILL_MOBS
weight: 1.5

fishing:
type: FISH_ITEMS
weight: 1.0

All objectives contribute to the same event score and leaderboard.

The old format still works:

objective:
type: MINE_BLOCKS

Objective weight acts like a score multiplier.

Player-facing displays should show:

Multiplier: x1.5

not:

Weight: 1.5


Multi-objective developer API​

Custom objective developers now have access to:

EventObjectiveSession#getObjectiveId();
EventObjectiveSession#getObjectiveDisplayName();
EventObjectiveSession#getObjectiveWeight();
EventObjectiveSession#getWeightedScore(int amount);

EventInfo also exposes objective data:

EventInfo#getObjectives();
EventInfo#hasMultipleObjectives();

Custom objectives should use the public EventObjectiveSession API and should not cast sessions to internal classes.


GUI config updates​

GUI title customization is now available in config.yml.

gui:
enabled: true
rows: 6

titles:
player-main: "&b&lEventForge"
player-active: "&b&lActive Events"
admin-main: "&c&lEventForge Admin"

Implemented in v1.0.1:

GUI titles can be customized
colour codes are supported
configured titles are respected by GUI listeners
GUI config reloads through EventForge reload
hardcoded title constants remain as fallbacks

Current limitation:

GUI layouts still use fixed 6-row menus.
gui.rows is reserved for a future layout update.


Dialogue system​

v1.0.1 adds an NPC-style dialogue engine.

dialogues:
guide_intro:
npc-id: "guide"
display-name: "Guide Introduction"
cancel-existing: true
lines:
- speaker: "&eGuide"
text: "&fHello {player}."
title: "&eGuide"
subtitle: "&fWelcome."
sound: ENTITY_VILLAGER_AMBIENT
delay: 3

Simple line format is also supported:

dialogues:
guide_intro:
lines:
- "&eGuide: &fHello there!"
- "&eGuide: &fBring me 5 relics."

EventForge provides the dialogue engine. Addons, Skript, NPC plugins, or custom objectives decide when to start a dialogue.


Dialogue API​

New public API:

DialogueLineInfo
DialogueSequenceInfo
DialogueSessionInfo
DialogueService
EventForgeAPI#getDialogueService()

Common usage:

EventForgeAPI.getDialogueService()
.startEventDialogue(player, "relic_hunt", "guide_intro")
.thenAccept(session -> {
if (session.isCompleted()) {
// Move player to next task.
}
});

New Bukkit events:

EventForgeDialogueCompleteEvent
EventForgeDialogueCancelEvent


PlaceholderAPI additions​

v1.0.1 adds placeholders for variables, cooldowns, filtering, and start checks.

Examples:

%eventforge_event_variable_<event>_<variable>%
%eventforge_event_on_cooldown_<event>%
%eventforge_event_cooldown_<event>%
%eventforge_events_category_count_<category>%
%eventforge_events_tag_count_<tag>%
%eventforge_events_difficulty_count_<difficulty>%
%eventforge_event_can_start_<event>%
%eventforge_event_start_reason_<event>%


API published to Maven Central​

The EventForge API is available from Maven Central.

<dependency>
<groupId>dev.hxze</groupId>
<artifactId>eventforge-api</artifactId>
<version>1.0.1-release</version>
<scope>provided</scope>
</dependency>


Simple addon update​

The Simple Addon has been updated to v1.0.1.

It now demonstrates:

EventService cooldown checks
event start check reasons
category/tag/difficulty filtering
upcoming schedules
event variables
multi-objective inspection
registered action listing
dialogue Bukkit events
player-facing multiplier display

The package structure was cleaned into:

command
listener
util


Advanced addon update​

The Advanced Relic Hunt addon has been updated to v1.0.1.

It now demonstrates:

custom RELIC_HUNT objective
custom RELIC_LOG action
multi-objective sessions
weighted score display
DialogueService usage
variables
cooldowns
triggers
built-in actions
custom actions
chance rewards

The package structure was cleaned into:

action
objective
model
util


Skript addon update​

EventForgeSkriptAddon has been updated to v1.0.1.

New effects:

clear eventforge cooldown of event %string%
start eventforge dialogue %string% of event %string% for %player%
cancel eventforge dialogue for %player%

New expression groups:

cooldowns
start checks
event variables
metadata filtering
upcoming schedules
multi-objective info
dialogues

The addon now depends on:

dev.hxze:eventforge-api:1.0.1-release


Skript example scripts​

The Skript addon now includes ready-to-use example scripts under:

example-scripts/

Included scripts:

eventforge-player-status.sk
eventforge-admin-tools.sk
eventforge-leaderboard.sk
eventforge-event-browser.sk
eventforge-upcoming-events.sk
eventforge-dialogues.sk
eventforge-custom-rewards.sk
eventforge-multi-objective.sk
README.txt

These can be copied into:

plugins/Skript/scripts/


Notes for upgrading​

Existing v1.0.0 event files should continue to work.

You can keep using:

objective:
type: MINE_BLOCKS

or move to:

objectives:
mining:
type: MINE_BLOCKS

when you want multi-objective events.

Recommended upgrade steps:

Update EventForge jar
Restart the server
Check console for validation warnings
Add cooldowns only where needed
Add variables to simplify large configs
Move new events to objectives: format
Update addon examples to 1.0.1-release API
Update Skript addon if you use Skript integration
EventForge v1.0.0 is the first full release of EventForge, moving the plugin from beta into a more complete and polished release state.

Last updated 18/05/2026
This release focuses on:

Paper/Purpur compatibility
PlaceholderAPI support
expanded developer API
Skript support
event metadata
advanced conditions
better validation
better diagnostics
updated example addons


Compatibility​

EventForge has been tested on:

Paper 1.21.x
Purpur 1.21.x

Tested Minecraft versions:

1.21
1.21.2
1.21.4
1.21.5
1.21.8
1.21.11

Required Java version:

Java 21

info
EventForge is designed for modern Paper and Purpur servers.

Added PlaceholderAPI Support​

EventForge now includes optional PlaceholderAPI support.

PlaceholderAPI is not required for EventForge to run, but if it is installed, EventForge automatically registers its placeholders.

General placeholders​

%eventforge_version%
%eventforge_api_version%
%eventforge_loaded_count%
%eventforge_active_count%
%eventforge_active_events%

Event placeholders​

%eventforge_event_active_<event>%
%eventforge_event_loaded_<event>%
%eventforge_event_display_<event>%
%eventforge_event_time_left_<event>%
%eventforge_event_elapsed_<event>%
%eventforge_event_participants_<event>%

Player placeholders​

%eventforge_player_score_<event>%
%eventforge_player_rank_<event>%
%eventforge_player_participating_<event>%

Leaderboard placeholders​

%eventforge_top_player_<event>_1%
%eventforge_top_score_<event>_1%

Schedule placeholders​

%eventforge_scheduled_count%
%eventforge_next_scheduled_event%
%eventforge_next_scheduled_time%
%eventforge_event_scheduled_<event>%
%eventforge_event_next_start_<event>%

Metadata placeholders​

%eventforge_event_category_<event>%
%eventforge_event_difficulty_<event>%
%eventforge_event_author_<event>%
%eventforge_event_version_<event>%
%eventforge_event_tags_<event>%
%eventforge_event_description_<event>%

These placeholders can be used in supported scoreboard, TAB, hologram, menu, chat, and dashboard plugins.


Added Event Metadata​

Events can now include optional metadata.

Example:

metadata:
category: "Mining"
tags:
- mining
- survival
- economy
difficulty: "Easy"
author: "HxZe"
version: "1.0.0"
description:
- "Mine configured blocks to earn points."
- "Compete for leaderboard rewards."

Metadata is useful for:

event browsers
custom GUIs
Discord embeds
dashboards
event pack tools
PlaceholderAPI
developer addons

Developers can access metadata through:

eventInfo.getMetadata()


Added Advanced Conditions​

EventForge conditions have been expanded.

Events can now use:

minimum players
world restrictions
required permissions
blocked permissions
operator requirements
Minecraft time windows
weather restrictions

Example:

conditions:
minimum-players: 1
worlds:
- world

permissions: []
blocked-permissions: []

require-op: false
require-non-op: false

time:
enabled: false
min: 0
max: 23999

weather:
allowed: []

Permission conditions​

permissions:
- "eventforge.event.mining"

Blocked permission conditions​

blocked-permissions:
- "eventforge.event.blocked"

Time conditions​

time:
enabled: true
min: 0
max: 13000

Weather conditions​

weather:
allowed:
- CLEAR
- RAIN
- THUNDER

This gives server owners and event pack creators more control over when events can start.


Added Public API Services​

The EventForge API has been expanded with several new services.

EventPackService​

Added:

EventForgeAPI.getEventPackService()

Developers can now read:

pack IDs
pack display names
pack enabled state
pack authors
pack versions
pack event file counts
total pack count
enabled pack count

Useful for:

event pack browsers
custom GUIs
dashboards
Discord bots
pack management addons


StatsService​

Added:

EventForgeAPI.getStatsService()

Developers can now read:

player stats
per-event player stats
all tracked player stats
event history
recent event history
tracked player count
history count
winner data

Useful for:

player profile menus
stats GUIs
Discord commands
web dashboards
holograms
analytics tools


ScheduleService​

Added:

EventForgeAPI.getScheduleService()

Developers can now read:

scheduled event IDs
scheduled event info
next scheduled event
next start epoch second
seconds until next start
schedule type
interval seconds
announce-before timings
scheduled event count

Useful for:

scoreboards
TAB integrations
Discord countdowns
NPC displays
event dashboards
server websites


ObjectiveService​

Added:

EventForgeAPI.getObjectiveService()

Developers can now read:

registered objective IDs
whether an objective is registered
registered objective count

Useful for:

diagnostics
setup GUIs
admin dashboards
custom objective addon checks


Added Bukkit Developer Events​

EventForge now fires custom Bukkit events for addon developers.

Added:

EventForgeEventStartEvent
EventForgeEventStopEvent
EventForgeEventFinishEvent
EventForgePlayerScoreChangeEvent
EventForgeReloadEvent
EventForgeRewardExecuteEvent


Event start/stop/finish events​

Developers can listen for:

EventForgeEventStartEvent
EventForgeEventStopEvent
EventForgeEventFinishEvent

Example:

EventHandler
public void onEventStart(EventForgeEventStartEvent event) {
Bukkit.broadcastMessage("Event started: " + event.getEventDisplayName());
}


Score change event​

Added:

EventForgePlayerScoreChangeEvent

This event is cancellable and can modify the final score.

Example:

EventHandler
public void onScoreChange(EventForgePlayerScoreChangeEvent event) {
if (event.getPlayer().hasPermission("eventforge.booster.double")) {
event.setNewScore(event.getNewScore() * 2);
}
}


Reload event​

Added:

EventForgeReloadEvent

This fires after EventForge reloads and includes reload summary information.

Useful for:

refreshing addon caches
refreshing menus
updating dashboards
logging validation status


Reward execution event​

Added:

EventForgeRewardExecuteEvent

This event fires before EventForge executes a reward command.

It is cancellable and the command can be modified.

Example:

EventHandler
public void onReward(EventForgeRewardExecuteEvent event) {
event.setCommand(event.getCommand().replace("diamond", "emerald"));
}

Reward types:

PARTICIPATION
LEADERBOARD

Useful for:

reward logging
Discord logs
custom reward systems
anti-abuse checks
reward multipliers
external integrations


Added Helper API Improvements​

Custom objective developers now have more helper methods.

EventObjectiveLoadContext​

New helper methods include:

getLong(...)
getKeys(...)
isSection(...)
getCleanStringList(...)

requireString(...)
requirePositiveInt(...)
requirePositiveDouble(...)

getMaterial(...)
getEntityType(...)

getTimeSeconds(...)
requireTimeSeconds(...)

Example:

Material block = context.getMaterial("block", Material.STONE);
int points = context.requirePositiveInt("points");
long interval = context.getTimeSeconds("hint-interval", 30);

This makes custom objective config loading cleaner and safer.


EventObjectiveSession​

New helper methods include:

isActive()
getParticipantCount()
isParticipating(player)
getTopScore()
hasScores()
getLeaderboard(limit)

Example:

for (EventScoreEntry entry : session.getLeaderboard(3)) {
Bukkit.broadcastMessage("#"
+ entry.getRank()
+ " "
+ entry.getPlayerName()
+ " - "
+ entry.getScore());
}

This gives custom objective developers more tools during active events.


Added Better Optional Provider Validation​

EventForge now gives clearer validation warnings for optional custom content providers.

Covered providers:

ItemsAdder
Oraxen
Nexo
MMOItems
MythicMobs

Updated objectives:

Collection Rush
Fishing Frenzy
Mob Hunt
Mob Invasion

Example warning:

Custom item provider ITEMSADDER is used, but ItemsAdder is not installed or enabled.

Example warning:

Custom mob provider MYTHICMOBS is used, but MythicMobs is not installed or enabled.

This makes it easier to debug custom event packs and optional integrations.


Improved Load and Reload Diagnostics​

EventForge now tracks and displays better reload information.

When running:

/eventforge reload

admins now see a summary like:

Loaded events: 5 | Warnings: 0 | Errors: 0

The console also logs:

Event load summary:
  • Files scanned: 5
  • Loaded events: 5
  • Disabled files skipped: 0
  • Failed files: 0
  • Validation warnings: 0
  • Validation errors: 0
  • Scheduled events: 1
  • Registered objectives: 5

This makes debugging event files, packs, and custom objectives much easier.


Added EventForge Skript Addon​

A new optional companion addon is available for Skript users.

The Skript Addon allows scripts to:

start EventForge events
stop EventForge events
finish EventForge events
add EventForge points
set EventForge scores
check if events are active
check if events are loaded
read player scores
read player ranks
read top players
read top scores
read schedule information
read event metadata

Example:

command /eftest:
trigger:
start eventforge event "mining_rush"

command /efscoretest:
trigger:
add 10 eventforge points to player for "mining_rush"
send "&7Score: &f%eventforge score of player in \"mining_rush\"%"

The Skript Addon is optional and requires:

EventForge
Skript
EventForgeSkriptAddon


Updated Simple Example Addon​

The Simple Addon has been updated to demonstrate the expanded EventForge API.

It now demonstrates:

EventService
EventPackService
StatsService
ScheduleService
ObjectiveService
Event metadata
Bukkit developer events
Reward execution events
Score change events

Commands:

/efsimple info
/efsimple events
/efsimple active
/efsimple leaderboard <event>
/efsimple packs
/efsimple schedules
/efsimple objectives
/efsimple stats <player>
/efsimple history
/efsimple metadata <event>

This addon is useful for developers learning how to use the EventForge API.


Updated Advanced Relic Hunt Addon​

The Advanced Relic Hunt addon has been updated to demonstrate newer developer features.

It now demonstrates:

EventObjectiveLoadContext helper methods
EventObjectiveSession helper methods
metadata/tags in config
advanced conditions in config
readable time parsing
custom objective registration
custom scoring
custom leaderboards

Example:

metadata:
category: "Adventure"
tags:
- relic
- hunt
- exploration
- custom-objective
difficulty: "Medium"

Example:

hint-interval: 30s

The addon uses:

context.getTimeSeconds("hint-interval", 30);
session.getLeaderboard(3);


Improved Score Handling Safety​

ActiveEvent#addScore now handles zero or negative final scores more safely.

If a score-change listener modifies the final score to 0 or below, EventForge removes the player's score/participant entry instead of storing an unwanted zero or negative score.

This keeps scoring behaviour consistent.


API Documentation Updated​

Developer documentation has been expanded for:

Maven setup
API overview
EventPackService
StatsService
ScheduleService
ObjectiveService
Bukkit events
Custom objectives
Simple addon
Advanced addon
Skript addon


Migration Notes​

From beta to release​

If you are updating from the beta version, update your API dependency to:

<dependency>
<groupId>dev.hxze</groupId>
<artifactId>eventforge-api</artifactId>
<version>1.0.0-release</version>
<scope>provided</scope>
</dependency>

Do not install an API jar​

Server owners should only install:

EventForge.jar

Addons use the API through Maven and depend on EventForge at runtime.

Example addons​

If you are using the example addons, rebuild or download the updated versions designed for 1.0.0-release.

Existing event files​

Existing event files should continue to work.

New optional config sections include:

metadata
advanced conditions

Safe condition defaults:

conditions:
minimum-players: 1
worlds:
- world

permissions: []
blocked-permissions: []

require-op: false
require-non-op: false

time:
enabled: false
min: 0
max: 23999

weather:
allowed: []

warning
Do not leave condition values blank.

Recommended Update Steps​

  1. Stop your server.
  2. Back up your plugins/EventForge/ folder.
  3. Replace the old EventForge jar with the new release jar.
  4. Start the server.
  5. Check the console startup output.
  6. Run:
/eventforge reload

  1. Check the reload summary.
  2. Run:
/eventforge list
/eventforge schedules
/eventforge check <event_id>

  1. Test one event manually.
Example:

/eventforge start mining_rush
/eventforge points <player> mining_rush 10
/eventforge finish mining_rush


Summary​

EventForge v1.0.0 Release is a major improvement over the beta version.

It adds:

PlaceholderAPI support
Skript support
Paper/Purpur testing
expanded Java API services
Bukkit developer events
reward execution event
event metadata/tags
advanced conditions
better validation
better reload diagnostics
updated example addons
custom objective helper APIs

This release makes EventForge stronger for:

server owners
event pack creators
Java addon developers
Skript users
Discord integrations
dashboard creators
custom objective developers
Buy a license now
$14.99
EULA
Standard EULA
Use on any projects you own with attribution
Support
Standard
Includes:
Download the resource
Access new updates
Support from the creator
Support duration
Lifetime
531 Views
0 Purchases
2 Downloads
May 19, 2026 Published
Jun 11, 2026 Updated
Not yet rated
1.5 MB File size
Open source
  1. No
DRM-free
  1. Yes
Unobfuscated
  1. No
Type
  1. Gameplay
  1. Minigame
  1. Mobs
Game mode
  1. Factions
  1. Prison
  1. Minigame
Supported software
  1. Spigot
  1. Paper
  1. Purpur
Supported versions
  1. 1.21.11
  1. 1.21.8
  1. 1.21.5
  1. 1.21.4
  1. 1.21.2
  1. 1.21
Supported languages
  1. English
Creator
Owner
Recommended for you
Premium shader powered animated text for Minecraft Servers.
5.00 star(s) 1 ratings
2 purchases
Configurable milestones, GUI claiming, leaderboards, admin tools, and persistent YAML storage.
Not yet rated
1 purchase
Connect Minecraft server with Discord verification, staff alerts, rewards, role sync, booster perks
Not yet rated
0 purchases
Complete Eeveelution line, fully compatible with IA, Nexo, and Oraxen!
Not yet rated
3 purchases
Arcade decorations, fully compatible with IA, Nexo, and Oraxen!
Not yet rated
0 purchases
531 Views
0 Purchases
2 Downloads
May 19, 2026 Published
Jun 11, 2026 Updated
Not yet rated
1.5 MB File size
Open source
  1. No
DRM-free
  1. Yes
Unobfuscated
  1. No
Type
  1. Gameplay
  1. Minigame
  1. Mobs
Game mode
  1. Factions
  1. Prison
  1. Minigame
Supported software
  1. Spigot
  1. Paper
  1. Purpur
Supported versions
  1. 1.21.11
  1. 1.21.8
  1. 1.21.5
  1. 1.21.4
  1. 1.21.2
  1. 1.21
Supported languages
  1. English
Creator
Owner
Recommended for you
Premium shader powered animated text for Minecraft Servers.
5.00 star(s) 1 ratings
2 purchases
Configurable milestones, GUI claiming, leaderboards, admin tools, and persistent YAML storage.
Not yet rated
1 purchase
Connect Minecraft server with Discord verification, staff alerts, rewards, role sync, booster perks
Not yet rated
0 purchases
Complete Eeveelution line, fully compatible with IA, Nexo, and Oraxen!
Not yet rated
3 purchases
Arcade decorations, fully compatible with IA, Nexo, and Oraxen!
Not yet rated
0 purchases
Top