← Back to documentation

Server documentation

EventBooster

Active

Hytale • 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

  1. Download EventBooster-0.4.1.jar from the CurseForge Files tab
  2. Place the JAR in your server’s mods/ folder
  3. Start the server. Config is generated at plugins/EventBooster/config/config.json
  4. Grant staff permissions (see Permissions below)
  5. 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.

CommandPermissionDescription
/eventboost guieventbooster.admin.startOpen admin panel (aliases: /eb gui, /eventboost panel, /eventboost menu)
/eventboost start <mult> <minutes> [flags]eventbooster.admin.startStart a timed XP boost
/eventboost stop [id|all]eventbooster.admin.stopStop one boost or all
/eventboost reloadeventbooster.admin.reloadReload config
/eventboost statuseventbooster.statusList active boosts
/eventboost preset listeventbooster.status or eventbooster.admin.startList saved presets
/eventboost preset start <id>eventbooster.admin.startStart a preset
/eventboost preset scheduleseventbooster.status or eventbooster.admin.startList weekly schedules (respects schedulesEnabled)
/eventboost helpStaff (see below)Show command list

Start flags

FlagDescription
--target=allEveryone online (default)
--target=groupOnly players matching --groups
--target=partyOnly your current party members (snapshot taken at start; requires a party plugin such as PartyPro)
--groups=VIP,hytale:AdminComma-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).

ScreenActions
DashboardPresets 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 boostMultiplier 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 presetTemplate 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 scheduleSchedule 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.json directly
  • Commands: /eventboost preset list, /eventboost preset start <id>
  • Permissions: eventbooster.admin.start to start; eventbooster.admin.reload to create, edit, or delete presets in the GUI
  • Defaults on upgrade: weekend (server-wide 2x) and vip (group VIP)

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:

FieldDescription
idUnique schedule id
enabledIf false, this row is ignored
presetIdPreset to launch at window start
boostIdOptional override of the preset’s boost id
dayOfWeekISO weekday: Monday=1 … Sunday=7
startHour, startMinuteWindow start (schedule timezone)
endHour, endMinuteWindow end (boost stops when the window ends)

Global toggles:

OptionDefaultDescription
schedulesEnabledtrueMaster 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 enabled without opening the editor
  • Command: /eventboost preset schedules lists rows with the resolved timezone
  • Permissions: eventbooster.admin.reload to 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).

OptionDefaultDescription
discordWebhookEnabledfalseEnable outbound webhook posts
discordWebhookUrl""Full HTTPS webhook URL from Discord channel settings
discordNotifyOnStarttrueNotify on manual or GUI starts
discordNotifyOnEndtrueNotify when a boost ends
discordNotifyOnScheduletrueNotify when a schedule starts a boost
discordUseEmbedtrueSend rich embeds instead of plain text
discordMention@everyonePing 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 (or discordapp.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.

PermissionDescription
eventbooster.admin.startStart boost events, start presets, and open the admin GUI
eventbooster.admin.stopStop boost events (including from the GUI)
eventbooster.admin.reloadReload config; save presets and schedules from the GUI
eventbooster.adminAll admin actions (parent node)
eventbooster.statusView 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

OptionDefaultDescription
minMultiplier1.0Minimum allowed boost multiplier
maxMultiplier10.0Maximum allowed boost multiplier
maxCombinedMultiplier10.0Cap when multiple boosts stack
defaultDurationMinutes60Default duration in the admin GUI; use 0 in commands or GUI custom field for permanent
allowConsoleCommandsfalseAllow server console to run admin commands without a player
allowPublicHelpfalseIf true, any player can use /eventboost help
defaultMultiplier2.0Default multiplier in the admin GUI
maxDurationMinutes10080Maximum event duration (minutes)
historySize20Number of recent boost events kept for the dashboard Recent history list (in-memory, current session)

Messaging

OptionDefaultDescription
broadcastOnStarttrueBroadcast when a boost starts
broadcastOnEndtrueBroadcast when a boost ends
notifyPlayerOnJointrueRemind joining eligible players
reminderIntervalMinutes15Periodic 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}
partyProHudFormatBOOST {multiplier}xPartyPro HUD text when boost applies to that player

Messages are sent only to players eligible for that boost.

Integrations

OptionDefaultDescription
integrationRpgLevelingtrueHook RPG Leveling XP listener
integrationHyRpgCoretrueHook HyRPGCore internal xpService
integrationVkCrafttrueHook VKCraft skill XP delta booster
integrationPartyProHudtruePer-player PartyPro HUD text

Presets and schedules

KeyDescription
presets[]Array of BoostEventPreset objects (see Presets above)
schedules[]Array of BoostSchedule objects (see Weekly schedules above)
schedulesEnabledtrue
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

ModRole
RPG Leveling and StatsPrimary XP hook (recommended)
HyRPGCoreInternal xpService hook via reflection
VKCraftSkill XP delta booster
PartyProHUD 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

  1. Start server with EventBooster + a leveling mod (RPG Leveling recommended)
  2. Global test: run /eventboost start 10 10. All players should gain boosted XP.
  3. Group test: run /eventboost start 10 10 --target=group --groups=VIP. Only VIP-group players are boosted.
  4. Run /eventboost status and confirm [target] in the line
  5. Run /eventboost stop or 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 reload reloads 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