Server documentation
EventBooster
ActiveHytale • Version 0.4.1
Setup guide: presets, weekly schedules, Discord webhook, admin GUI, commands, configuration, integrations, and verifying XP.
How to run EventBooster on your server: presets, weekly schedules, Discord webhook, admin GUI, permissions, commands, config, and leveling hooks.
Overview
EventBooster is a server-side event manager for timed XP boosts. It tracks active boost windows, notifies eligible players, and applies multipliers through optional integrations (RPG Leveling, HyRPGCore, VKCraft, PartyPro). Without a compatible leveling mod, commands, timers, and broadcasts still work, but in-game XP will not change.
Installation
- Download EventBooster-0.4.1.jar from the CurseForge Files tab
- Place the JAR in your server’s mods/ folder
- Start the server. Config is generated at plugins/EventBooster/config/config.json
- Grant staff permissions (see Permissions below)
- Run /eventboost start 2 10 and /eventboost status to verify
Recommended: install RPG Leveling and Stats alongside EventBooster for reliable XP multiplication.
Commands
Main command: /eventboost (aliases: /eb, /boost, /eventbooster)
Hytale requires two positional arguments for start (multiplier, minutes). All other options use flags (--name=value). Use /eventboost start --help in-game for the full list.
| Command | Permission | Description |
|---|---|---|
/eventboost gui | eventbooster.admin.start | Open admin panel (aliases: /eb gui, /eventboost panel, /eventboost menu) |
/eventboost start <mult> <minutes> [flags] | eventbooster.admin.start | Start a timed XP boost |
/eventboost stop [id|all] | eventbooster.admin.stop | Stop one boost or all |
/eventboost reload | eventbooster.admin.reload | Reload config |
/eventboost status | eventbooster.status | List active boosts |
/eventboost preset list | eventbooster.status or eventbooster.admin.start | List saved presets |
/eventboost preset start <id> | eventbooster.admin.start | Start a preset |
/eventboost preset schedules | eventbooster.status or eventbooster.admin.start | List weekly schedules (respects schedulesEnabled) |
/eventboost help | Staff (see below) | Show command list |
Start flags
| Flag | Description |
|---|---|
--target=all | Everyone online (default) |
--target=group | Only players matching --groups |
--target=party | Only your current party members (snapshot taken at start; requires a party plugin such as PartyPro) |
--groups=VIP,hytale:Admin | Comma-separated group names or permission nodes |
--label=... | Display name in broadcasts and status |
--world=... | Only apply boost in that world (name or uuid string) |
--id=... | Boost id for stop/status (default: global) |
Examples
/eventboost start 2 0
/eventboost start 2 120
/eventboost start 2 120 --target=all --label="Server-wide 2x"
/eventboost start 2 120 --target=group --groups=VIP --label="VIP Happy Hour"
/eventboost start 2 120 --target=group --groups=hytale:Admin
/eventboost start 1.5 60 --id=mining --world=world_mine --label="Mining Boost"
/eventboost stop mining
/eventboost stop all
/eventboost status
/eventboost gui
/eventboost preset list
/eventboost preset start weekend
/eventboost preset schedules
Admin GUI
Run /eventboost gui (requires eventbooster.admin.start to open, create boosts, and start presets; eventbooster.admin.stop to stop boosts; eventbooster.admin.reload to save presets and schedules from the panel).
| Screen | Actions |
|---|---|
| Dashboard | Presets list: New preset, per row Start (one-click), Edit, Del. Schedules list: New schedule, per row On/Off, Edit, Del. Active boosts: New boost, Refresh, Stop all, Close; per row Edit, Stop. Recent history: read-only list of the last started, stopped, and expired boosts (in-memory, current session). |
| New / edit boost | Multiplier presets (1.5x, 2x, 3x, 5x) or custom; duration presets (permanent, 30m, 1h, 2h) or custom (0 = permanent). Target: everyone online or group/permission list. Optional label, boost id (new only), world filter. Save uses the same rules as /eventboost start. Edit replaces the selected boost (same id). |
| New / edit preset | Template fields: id, display name, multiplier, duration (0 = permanent), boost id, label, world filter, target mode (ALL / GROUP), groups. Save writes to presets[] in config (needs reload permission). |
| New / edit schedule | Schedule id, linked preset, optional boost id override, day of week (Monday=1 … Sunday=7), start/end hour and minute, enabled. Save writes to schedules[] (needs reload permission). |
GUI defaults for new boosts come from defaultMultiplier and defaultDurationMinutes in config.
Presets
Presets are saved event templates in presets[] inside config.json. They store multiplier, duration, label, boost id, target mode, groups, and optional world filter.
- GUI: dashboard Presets section, or edit
config.jsondirectly - Commands:
/eventboost preset list,/eventboost preset start <id> - Permissions:
eventbooster.admin.startto start;eventbooster.admin.reloadto create, edit, or delete presets in the GUI - Defaults on upgrade:
weekend(server-wide 2x) andvip(groupVIP)
Starting a preset uses the same validation, broadcasts, stacking, and integrations as /eventboost start.
Weekly schedules
Schedules automatically start and stop boosts during weekly windows. Each entry in schedules[] links to a presetId and defines:
| Field | Description |
|---|---|
id | Unique schedule id |
enabled | If false, this row is ignored |
presetId | Preset to launch at window start |
boostId | Optional override of the preset’s boost id |
dayOfWeek | ISO weekday: Monday=1 … Sunday=7 |
startHour, startMinute | Window start (schedule timezone) |
endHour, endMinute | Window end (boost stops when the window ends) |
Global toggles:
| Option | Default | Description |
|---|---|---|
schedulesEnabled | true | Master switch for the schedule service |
scheduleTimezone | "" | IANA id (e.g. Europe/Lisbon). Blank uses the JVM default timezone |
- GUI: dashboard Schedules section; On/Off toggles
enabledwithout opening the editor - Command:
/eventboost preset scheduleslists rows with the resolved timezone - Permissions:
eventbooster.admin.reloadto create, edit, delete, or toggle schedules in the GUI
The service checks every minute. When a window opens, it starts the linked preset; when it closes, it stops that boost id.
Discord webhook (optional)
Post boost start and stop messages to a Discord channel webhook. Configure only in config.json (the webhook URL is a secret and is not shown in the admin GUI).
| Option | Default | Description |
|---|---|---|
discordWebhookEnabled | false | Enable outbound webhook posts |
discordWebhookUrl | "" | Full HTTPS webhook URL from Discord channel settings |
discordNotifyOnStart | true | Notify on manual or GUI starts |
discordNotifyOnEnd | true | Notify when a boost ends |
discordNotifyOnSchedule | true | Notify when a schedule starts a boost |
discordUseEmbed | true | Send rich embeds instead of plain text |
discordMention | @everyone | Ping line prepended to each message |
discordStartFormat | (see config) | Placeholders: {label}, {duration}, {multiplier}, {target}, {staff} |
discordEndFormat | (see config) | Placeholders: {label}, {target} |
discordScheduleStartFormat | (see config) | Placeholders: {schedule}, {label}, {duration}, {multiplier}, {target} |
discordMention values: @everyone, @here, <@&ROLE_ID> (role), <@USER_ID> (user), or none to disable pings.
Requirements:
- URL must use HTTPS and point to
discord.com(ordiscordapp.com) - Saving presets or schedules from the GUI will not erase an existing webhook URL on disk if the in-memory copy is blank (protection for partial GUI saves)
Boost targeting
EventBooster uses your server’s existing Hytale permissions. No separate rank plugin.
A player receives a group boost if:
- They are in a listed group (
PermissionsModule/permissions.json), or - They have a listed permission node
If --groups is set without --target=group, the mod treats it as a group boost automatically.
Party targeting (--target=party) boosts the members of the command sender’s current party. Members are resolved once, at start, from an installed party plugin (PartyPro) and stored as a fixed list; players who join or leave the party afterward are not added or removed from the active boost. If no party plugin exposes its members, the command reports that party targeting is unavailable.
World filter (--world=...) can be combined with global, group, or party boosts: only players in that world name get the multiplier.
Permissions
Only staff with the correct nodes can start, stop, or reload boosts. Players do not need permissions to receive XP from an active boost.
| Permission | Description |
|---|---|
eventbooster.admin.start | Start boost events, start presets, and open the admin GUI |
eventbooster.admin.stop | Stop boost events (including from the GUI) |
eventbooster.admin.reload | Reload config; save presets and schedules from the GUI |
eventbooster.admin | All admin actions (parent node) |
eventbooster.status | View active boosts |
/eventboost help is staff only: players need eventbooster.status, eventbooster.admin, or any eventbooster.admin.* node. Normal players without those permissions cannot run /eb help or /eventboost help.
To allow everyone to read help (optional), set "allowPublicHelp": true in config.json.
Quick setup with Hytale /perm
/perm group add OP eventbooster.admin
Or individual nodes:
/perm group add OP eventbooster.admin.start
/perm group add OP eventbooster.admin.stop
/perm group add OP eventbooster.admin.reload
/perm group add OP eventbooster.status
permissions.json example
{
"groups": {
"OP": {
"permissions": [
"eventbooster.admin"
]
},
"VIP": {
"permissions": []
}
}
}
Put VIP players in the VIP group in your save’s user permissions, then run:
/eventboost start 2 120 --target=group --groups=VIP
Configuration
Config file: plugins/EventBooster/config/config.json (configVersion 4 in new installs)
Boost limits
| Option | Default | Description |
|---|---|---|
minMultiplier | 1.0 | Minimum allowed boost multiplier |
maxMultiplier | 10.0 | Maximum allowed boost multiplier |
maxCombinedMultiplier | 10.0 | Cap when multiple boosts stack |
defaultDurationMinutes | 60 | Default duration in the admin GUI; use 0 in commands or GUI custom field for permanent |
allowConsoleCommands | false | Allow server console to run admin commands without a player |
allowPublicHelp | false | If true, any player can use /eventboost help |
defaultMultiplier | 2.0 | Default multiplier in the admin GUI |
maxDurationMinutes | 10080 | Maximum event duration (minutes) |
historySize | 20 | Number of recent boost events kept for the dashboard Recent history list (in-memory, current session) |
Messaging
| Option | Default | Description |
|---|---|---|
broadcastOnStart | true | Broadcast when a boost starts |
broadcastOnEnd | true | Broadcast when a boost ends |
notifyPlayerOnJoin | true | Remind joining eligible players |
reminderIntervalMinutes | 15 | Periodic reminder interval (0 = off) |
reminderBroadcastFormat | (see config) | Placeholders: {label}, {remaining}, {target} |
startBroadcastFormat | (see config) | Placeholders: {label}, {duration}, {multiplier}, {target} |
endBroadcastFormat | (see config) | Placeholders: {label}, {target} |
joinNoticeFormat | (see config) | Placeholders: {label}, {remaining}, {target} |
statusLineFormat | (see config) | Placeholders: {id}, {label}, {multiplier}, {remaining}, {target} |
partyProHudFormat | BOOST {multiplier}x | PartyPro HUD text when boost applies to that player |
Messages are sent only to players eligible for that boost.
Integrations
| Option | Default | Description |
|---|---|---|
integrationRpgLeveling | true | Hook RPG Leveling XP listener |
integrationHyRpgCore | true | Hook HyRPGCore internal xpService |
integrationVkCraft | true | Hook VKCraft skill XP delta booster |
integrationPartyProHud | true | Per-player PartyPro HUD text |
Presets and schedules
| Key | Description |
|---|---|
presets[] | Array of BoostEventPreset objects (see Presets above) |
schedules[] | Array of BoostSchedule objects (see Weekly schedules above) |
schedulesEnabled | true |
scheduleTimezone | "" |
Example preset entry:
{
"id": "weekend",
"displayName": "Weekend 2x",
"multiplier": 2.0,
"durationMinutes": 120,
"boostId": "weekend",
"label": "Weekend XP",
"targetMode": "ALL",
"targetGroups": []
}
Discord webhook
See Discord webhook above for discordWebhookEnabled, discordWebhookUrl, notify toggles, discordMention, embed flag, and message format strings.
Optional integrations
| Mod | Role |
|---|---|
| RPG Leveling and Stats | Primary XP hook (recommended) |
| HyRPGCore | Internal xpService hook via reflection |
| VKCraft | Skill XP delta booster |
| PartyPro | HUD indicator per eligible player |
No leveling mod is required. Without one, commands, timers, and broadcasts still work, but in-game XP will not change.
Check server log on startup:
EventBooster started. Active integrations: RPGLeveling, ...
Verifying XP boosts
- Start server with EventBooster + a leveling mod (RPG Leveling recommended)
- Global test: run
/eventboost start 10 10. All players should gain boosted XP. - Group test: run
/eventboost start 10 10 --target=group --groups=VIP. Only VIP-group players are boosted. - Run
/eventboost statusand confirm[target]in the line - Run
/eventboost stopor wait for expiry. Eligible players should see the end broadcast when the boost actually ends.
Public API
if (EventBoosterAPI.isAvailable()) {
double multiplier = EventBoosterAPI.get()
.getExperienceMultiplier(playerUuid, worldName);
}
Use the UUID overload for correct results when group boosts are active.
Notes
/eventboost reloadreloads config and re-attaches integrations safely. Restart the server if you disable an integration in config and need hooks fully removed.
License
MIT License. Copyright (c) 2026 DurkzPRG