← Back to documentation

Server documentation

EventBooster

Active

Hytale • Version 0.4.3

Setup guide: presets, weekly schedules, Discord webhook, admin GUI, commands, configuration, RPG Leveling, VKCraft, PartyPro, 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 runs timed XP events in your Hytale world or server. Start double-XP weekends, group events or party boosts from the admin panel or commands, or let a weekly schedule run a saved preset.


Installation

  1. Requires Hytale 0.7.0+
  2. Download EventBooster-0.4.3.jar from the CurseForge Files tab
  3. Place the JAR in the server’s mods/ folder, or on Windows solo in %AppData%\Hytale\UserData\Mods\. Keep only one EventBooster JAR installed
  4. Start the server. Config is generated at mods/durkz_EventBooster/config/config.json
  5. Grant staff permissions (see Permissions below)
  6. Run /eventboost start 2 10 and /eventboost status to verify

Recommended: install RPG Leveling and Stats alongside EventBooster for reliable XP multiplication.


Restart recovery and safe edits

With persistActiveBoosts: true, active events are checkpointed in mods/durkz_EventBooster/active-boosts.json. Restarting keeps the original start, deadline, audience and world filter. Time offline still counts, and expired events are not restored. Events with no deadline remain active until stopped. Recent history is not persisted.

A failed checkpoint write rejects a manual start or stop without changing the active event. Invalid configuration, unsupported schemas and rejected reloads preserve the original file and the last working settings. Fix the reported file before restarting a plugin that cannot load it. Preset and schedule edits are validated and saved before they take effect. Reopen an editor after reloading config; stale pages cannot save over current settings.

/eventboost status and the dashboard show integration health, your effective multiplier and checkpoint errors. A no-XP-hook warning means timers and notices can run while XP remains unchanged.


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). Long lists scroll inside the panel; footer buttons stay visible.
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
  • Fresh-install defaults: weekend (global 2x) and vip (group VIP). Existing valid entries and intentionally empty preset lists are preserved.

Presets accept ALL or GROUP. Unknown target modes and PARTY presets are rejected instead of becoming global events; launch party events with /eventboost start --target=party and the required multiplier/duration.

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 15 seconds. Overnight windows belong to their starting weekday, including Sunday into Monday, in scheduleTimezone. An event ends at the configured window deadline rather than repeatedly restarting for the preset duration.

The schedule override, launch and stop use one resolved boost ID. Schedules sharing an ID are considered in schedule-ID order. A manual event occupying that ID is preserved, and a schedule cannot stop a manual replacement. Stopping an event manually marks that schedule window as handled, including after a restart; it does not restart on the next poll. The panel shows the next start or current end time and timezone.


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: mods/durkz_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)
persistActiveBooststrueKeep active events and their original expiration times across restarts
checkForUpdatestrueNotify staff when a newer version is published, with a clickable CurseForge project link

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
integrationRpgLevelingtrueMultiply RPG Leveling XP while a boost is active
integrationVkCrafttrueEnable the compatible VKCraft bridge when its API is available
integrationPartyProHudtruePer-player PartyPro indicator; disabling it keeps party membership resolution available

Presets and schedules

KeyDefaultDescription
presets[]weekend, vipArray of BoostEventPreset objects (see Presets above)
schedules[][]Array of BoostSchedule objects (see Weekly schedules above)
schedulesEnabledtrueEnable automatic schedule service
scheduleTimezone""IANA timezone for schedule windows

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 StatsMultiplies RPG Leveling XP while a boost is active (recommended)
VKCraftOptional bridge for compatible VKCraft APIs; available targeting depends on the exposed API
PartyProHUD text for eligible players, and --target=party

HyRPGCore is not supported in this release. 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, ...

Integrations and limits

RPG Leveling and Stats provides per-player XP awards. PartyPro provides party membership and an optional HUD indicator; it is not an XP hook. Disabling integrationPartyProHud keeps party targeting available. VKCraft requires a compatible exposed API; a global-only hook cannot apply world, group or party filters. Targeted starts are rejected when that is the only active XP hook.

Party events capture the member list at launch. Presets support ALL and GROUP, not PARTY. World filters use the player’s current world for XP, notices, online counts and the PartyPro indicator.


  • Install RPG Leveling and Stats alongside EventBooster for reliable in-game XP multiplication
  • Grant eventbooster.admin to staff; saving presets or schedules in the GUI needs eventbooster.admin.reload
  • Log should show EventBooster started. Active integrations: ... on boot

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 detaches/re-attaches integrations without duplicate RPG XP listeners. A rejected reload retains the last working settings. Reopen existing editors after a successful reload.

License

MIT License. Copyright (c) 2026 DurkzPRG