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
/eventforge reload
- Stop your server.
- Back up your plugins/EventForge/ folder.
- Replace the old EventForge jar with the new release jar.
- Start the server.
- Check the console startup output.
- Run:
/eventforge list
- Check the reload summary.
- Run:
/eventforge schedules
/eventforge check <event_id>
Example:
- Test one event manually.
/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
