🚀 EventForge v1.0.1 Release
EventForge v1.0.1 expands the plugin into a more complete event framework update.
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.
This update is focused on making EventForge easier to configure, easier to extend, and better for addon developers.
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
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
Related docs
Event Variables
Multi-objective Events
Rewards
Schedules & Conditions
Actions & Triggers
Dialogues
GUI Customization
PlaceholderAPI
Maven Setup
Action Registry
Dialogue Service
Simple Addon Example
Advanced Relic Hunt Example
Skript Addon
Skript Example Scripts