Skip to content

Configuration

elitescouter edited this page Jun 23, 2026 · 23 revisions

Configuration

EliteEssentials is fully configurable through the config.json file located at mods/EliteEssentials/config.json.

Configuration File Location

mods/
EliteEssentials/
config.json

Reloading Configuration

After editing the configuration, apply changes with:

/eliteessentials reload

Complete Configuration Reference

General Settings

{
"debug": false,
"advancedPermissions": false,
"commandExecutionDelayMs": 150
}
OptionTypeDefaultDescription
debugbooleanfalseEnable verbose debug logging
advancedPermissionsbooleanfalseEnable granular permission nodes (see Permissions)
commandExecutionDelayMsint150Delay in ms between console command executions (workaround for Hytale parser bug). Set to 0 to disable

debug

When set to true, EliteEssentials outputs detailed logging information to the server console. This is useful for troubleshooting issues but should be disabled in production to reduce log spam.

advancedPermissions

This setting controls how command access is determined:

When false (Default - Simple Mode):

  • Commands use simple access levels: "Everyone" or "Admin only"
  • All players can use basic commands (home, back, tpa, rtp, spawn, warp)
  • Admin commands require OP status or eliteessentials.admin.*
  • No permission plugin or setup required

When true (Advanced Mode):

  • Default permissions are disabled completely
  • Every command requires an explicit permission node to be granted
  • Players without permissions cannot use any commands (except admins)
  • You must configure permissions using Hytale's permission system or a permission management mod
  • Allows fine-grained control: different ranks can have different home limits, bypass cooldowns, access specific warps, etc.

Important: When enabling Advanced Mode, you must set up permissions for your players or they will lose access to all commands. See the Permissions page for the complete list of permission nodes to grant.

Random Teleport (RTP)

"rtp": {
"enabled": true,
"minRange": 100,
"maxRange": 5000,
"worldRanges": {},
"cooldownSeconds": 30,
"warmupSeconds": 3,
"maxAttempts": 5,
"minSurfaceY": 50,
"chunkLoadTimeoutMs": 500,
"defaultHeight": 128,
"invulnerabilitySeconds": 5,
"cost": 0.0
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable the /rtp command
minRangeint100Minimum distance from center for random location
maxRangeint5000Maximum distance from center for random location
worldRangesobject{}Per-world RTP range overrides (see below)
cooldownSecondsint30Cooldown between uses (0 = no cooldown)
warmupSecondsint3Time player must stand still before teleport (0 = instant)
maxAttemptsint5Maximum attempts to find a safe location
minSurfaceYint50Minimum Y level to accept (avoids caves/dungeons)
chunkLoadTimeoutMsint500Timeout for loading unloaded chunks (0 = skip)
defaultHeightint128Default Y height when chunk is not loaded
invulnerabilitySecondsint5Seconds of invulnerability after RTP (0 = disabled)
costdouble0.0Cost to use this command (requires economy enabled)

Force World:

The forceWorldEnabled and forceWorld options allow you to force all RTP teleports to a specific world, regardless of the player's current world. This is useful if you want a dedicated exploration world.

"rtp": {
"forceWorldEnabled": true,
"forceWorld": "explore"
}
OptionTypeDefaultDescription
forceWorldEnabledbooleanfalseWhen true, RTP always teleports to the world specified in forceWorld
forceWorldstring""The world name to force RTP to (case-sensitive, must match exact world name)

Per-World RTP Ranges:

The worldRanges option allows you to set different min/max ranges for specific worlds. If a world is not listed, it uses the default minRange and maxRange values.

"rtp": {
"minRange": 100,
"maxRange": 5000,
"worldRanges": {
"explore": {"minRange": 500, "maxRange": 10000},
"hub": {"minRange": 50, "maxRange": 500}
}
}

In this example:

  • explore world: RTP range is 500-10000 blocks (larger exploration area)
  • hub world: RTP range is 50-500 blocks (smaller, contained area)
  • All other worlds: Use default 100-5000 blocks

Back Command

"back": {
"enabled": true,
"maxHistory": 5,
"workOnDeath": true,
"cooldownSeconds": 0,
"warmupSeconds": 0,
"cost": 0.0
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable the /back command
maxHistoryint5Number of previous locations to remember
workOnDeathbooleantrueSave death location for /back
cooldownSecondsint0Cooldown between uses
warmupSecondsint0Warmup time before teleport
costdouble0.0Cost to use this command (requires economy enabled)

Teleport Requests (TPA)

"tpa": {
"enabled": true,
"timeoutSeconds": 30,
"warmupSeconds": 3,
"cooldownSeconds": 0,
"tpahereCooldownSeconds": 0,
"cost": 0.0,
"tpahereCost": 0.0
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable TPA commands
timeoutSecondsint30Seconds before request expires
warmupSecondsint3Warmup after accepting (requester must stand still)
cooldownSecondsint0Cooldown for /tpa (0 = no cooldown)
tpahereCooldownSecondsint0Cooldown for /tpahere (0 = no cooldown)
costdouble0.0Cost to use /tpa (requires economy enabled)
tpahereCostdouble0.0Cost to use /tpahere (requires economy enabled)

Homes

"homes": {
"enabled": true,
"maxHomes": 3,
"defaultMaxHomes": 3,
"cooldownSeconds": 0,
"warmupSeconds": 3,
"cost": 0.0,
"setHomeCost": 0.0
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable home commands
maxHomesint3Maximum homes per player
defaultMaxHomesint3Default max for new players
cooldownSecondsint0Cooldown between /home uses
warmupSecondsint3Warmup time before teleport
costdouble0.0Cost to teleport home (requires economy enabled)
setHomeCostdouble0.0Cost to set a home (requires economy enabled)

Permission-Based Home Limits:

In advanced permissions mode, you can set different home limits per group:

  • eliteessentials.command.home.limit.<number> - Set specific limit (e.g., .limit.10)
  • eliteessentials.command.home.limit.unlimited - Unlimited homes

The highest limit from the player's permissions is used.

Spawn

"spawn": {
"enabled": true,
"cooldownSeconds": 0,
"warmupSeconds": 3,
"perWorld": false,
"mainWorld": "default",
"cost": 0.0,
"teleportOnEveryLogin": false,
"maxSpawnsPerWorld": 10,
"multiNearbySpawn": false,
"multiRandomSpawn": false
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable the /spawn command
cooldownSecondsint0Cooldown between uses
warmupSecondsint3Warmup time before teleport
perWorldbooleanfalseIf false, always teleport to main world spawn; if true, teleport to current world's spawn
mainWorldstring"default"Which world is the main world (used when perWorld=false)
costdouble0.0Cost to use this command (requires economy enabled)
teleportOnEveryLoginbooleanfalseWhen true, players load directly at spawn on every login (no teleport flash)
maxSpawnsPerWorldint10Maximum named spawn points per world (-1 for unlimited)
multiNearbySpawnbooleanfalseWhen true, /spawn and death respawn send player to the nearest spawn point
multiRandomSpawnbooleanfalseWhen true, /spawn and death respawn send player to a random spawn point (overrides nearby)

Multi-Spawn Behavior (1.1.18+): When spawn.perWorld = true and a world has multiple spawn points (from /setspawn <name>), you can choose how /spawn and death respawn pick a spawn:

  • Default (both off): Everyone goes to the primary spawn for that world
  • multiNearbySpawn: true: Player goes to the nearest spawn to their current (or death) position
  • multiRandomSpawn: true: Player goes to a random spawn in that world (if both are enabled, random takes priority)

Spawn-on-Login Behavior (1.1.13+):

  • When teleportOnEveryLogin is enabled, players' save files are rewritten on disconnect to load them directly at spawn
  • This eliminates the visible teleport flash that occurred with the old teleport-after-join approach
  • Players load directly at spawn with no screen flash, no delay, and no client-side issues
  • Works correctly with both per-world spawns and the mainWorld setting
  • New players land at the correct /setspawn location via Hytale's native spawn provider

First-Join Spawn

"firstJoinSpawn": {
"enabled": true,
"delaySeconds": 2
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable first-join spawn teleport
delaySecondsint2Delay before teleporting new players (lets them fully load)

Set the first-join spawn location with /setfirstjoinspawn. New players will be teleported there on their first join. Remove it with /delfirstjoinspawn.

Spawn Protection

"spawnProtection": {
"enabled": false,
"radius": 50,
"minY": -1,
"maxY": -1,
"disablePvp": true,
"disableAllDamage": false
}
OptionTypeDefaultDescription
enabledbooleanfalseEnable/disable spawn protection
radiusint50Protection radius in blocks (square area)
minYint-1Minimum Y level to protect (-1 = no limit)
maxYint-1Maximum Y level to protect (-1 = no limit)
disablePvpbooleantrueDisable PvP in spawn area
disableAllDamagebooleanfalseDisable ALL damage in spawn area

Important: Spawn protection requires /setspawn to be used first. The protection area is centered on the spawn location set by an admin.

disableAllDamage: When enabled, players in the spawn area are completely invulnerable to all damage sources including fall damage, fire, drowning, mob attacks, and environmental damage.

Bypass Permission:eliteessentials.command.spawn.protection.bypass

Warps

"warps": {
"enabled": true,
"cooldownSeconds": 0,
"warmupSeconds": 3,
"maxWarps": -1,
"cost": 0.0,
"groupLimits": {
"Admin": -1,
"Owner": -1,
"Moderator": 20,
"VIP": 10,
"Default": 5
}
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable warp commands
cooldownSecondsint0Cooldown between /warp uses
warmupSecondsint3Warmup time before teleport
maxWarpsint-1Maximum warps that can be created (-1 = unlimited)
costdouble0.0Cost to use /warp (requires economy enabled)
groupLimitsobjectsee belowPer-group warp limits (advanced permissions mode)

Warp Limits:

  • maxWarps: Global limit for total warps. Set to -1 for unlimited.
  • groupLimits: Per-group limits when using advanced permissions mode. Players get the highest limit from their groups. Use -1 for unlimited.

Permission-based limits (Advanced Mode):

  • eliteessentials.command.warp.limit.<number> - Set specific limit
  • eliteessentials.command.warp.limit.unlimited - Unlimited warps

Player Warps (Disabled by Default)

"playerWarps": {
"enabled": false,
"blacklistedWorlds": [],
"cooldownSeconds": 0,
"warmupSeconds": 3,
"maxWarps": 3,
"groupLimits": { "Admin": -1, "VIP": 5, "Default": 3 },
"cost": 0.0,
"createCost": 0.0
}
OptionTypeDefaultDescription
enabledbooleanfalseEnable/disable the player warp system
blacklistedWorldslist[]Worlds where player warps cannot be created or used (supports * wildcards)
cooldownSecondsint0Cooldown between teleporting to player warps
warmupSecondsint3Warmup time before teleport
maxWarpsint3Default maximum warps per player
groupLimitsobjectsee abovePer-group warp limits (-1 for unlimited)
costdouble0.0Cost to teleport to a player warp (requires economy enabled)
createCostdouble0.0Cost to create a player warp (requires economy enabled)

Per-Group Limits (Advanced Mode):

  • eliteessentials.command.pwarp.limit.<number> - Set specific limit per group
  • eliteessentials.command.pwarp.limit.unlimited - Unlimited player warps
  • Config groupLimits also works: players get the highest limit from their groups

Sleep (Night Skip)

"sleep": {
"enabled": true,
"sleepPercentage": 50,
"nightStartHour": 19.5,
"morningHour": 5.5
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable sleep percentage feature
sleepPercentageint50Percentage of players needed to skip night (0-100)
nightStartHourdouble19.5Hour when players can start sleeping (19.5 = 7:30 PM)
morningHourdouble5.5Hour when players wake up (5.5 = 5:30 AM)

Custom Sleep Times:

The nightStartHour and morningHour options use 24-hour format with decimal support for minutes:

  • 19.5 = 7:30 PM (default night start, matches Hytale)
  • 20.0 = 8:00 PM
  • 5.5 = 5:30 AM (default morning)
  • 6.0 = 6:00 AM

Note: The client-side message "You may sleep starting at X" is controlled by Hytale based on the game's world config and cannot be changed by plugins. The actual sleep functionality will use your configured times.

World Blacklists

Most gameplay commands support a blacklistedWorlds config option to restrict usage in specific worlds (e.g., PvP arenas, minigame worlds). Supports wildcard patterns using *.

"heal": {
"blacklistedWorlds": ["pvparena_world", "arena*", "minigame_*"]
}

Applies to: /heal, /god, /fly, /repair, /tpa, /tpahere, /rtp, /back, /top, /home, /sethome, /spawn, /warp, /kit, /pwarp

Message key: commandBlacklistedWorld (default: "&cThis command cannot be used in this world.")

Death Messages

"deathMessages": {
"enabled": true,
"showKiller": true,
"showCause": true
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable death messages
showKillerbooleantrueShow killer name (player or mob)
showCausebooleantrueShow death cause (fall, fire, etc.)

Admin Commands

These commands are admin-only and support optional cooldowns that can be configured per-group using permissions.

God Mode

"god": {
"enabled": true,
"cooldownSeconds": 0
}

Heal

"heal": {
"enabled": true,
"cooldownSeconds": 0,
"cost": 0.0
}

Fly

"fly": {
"enabled": true,
"cooldownSeconds": 0,
"costPerMinute": 0.0,
"costPerMinuteDurationSeconds": 60,
"expiryWarningSeconds": [30, 10, 5]
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable the /fly command
cooldownSecondsint0Cooldown between uses (0 = no cooldown)
costPerMinutedouble0.0Cost per use of /fly (0 = free/unlimited). When > 0, flight auto-disables after the duration
costPerMinuteDurationSecondsint60Duration in seconds of paid flight per use (default 60)
expiryWarningSecondslist[30, 10, 5]Seconds before expiry to send warnings. Empty list = no warnings

Cost-Per-Minute Flight: When costPerMinute is set to a value greater than 0 (requires economy enabled), each /fly use charges the player and enables flight for costPerMinuteDurationSeconds seconds. When the time runs out, flight is automatically disabled. Warning messages are sent at the configured intervals before expiry.

Bypass:eliteessentials.bypass.cost.fly bypasses the cost-per-minute charge.

Vanish

"vanish": {
"enabled": true,
"hideFromList": true,
"hideFromMap": true,
"mimicJoinLeave": true,
"persistOnReconnect": true,
"suppressJoinQuitMessages": true,
"showReminderOnJoin": true
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable the /vanish command
hideFromListbooleantrueHide vanished players from the Server Players list
hideFromMapbooleantrueHide vanished players from the world map
mimicJoinLeavebooleantrueSend fake join/leave messages when vanishing/unvanishing
persistOnReconnectbooleantrueKeep vanish state across server restarts/reconnects
suppressJoinQuitMessagesbooleantrueSuppress real join/quit messages for vanished players
showReminderOnJoinbooleantrueShow reminder to vanished players when they rejoin

Repair

"repair": {
"enabled": true,
"cooldownSeconds": 0,
"cooldownAllSeconds": 0,
"cost": 0.0,
"costAll": 0.0
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable the /repair command
cooldownSecondsint0Cooldown for single item repair (0 = no cooldown)
cooldownAllSecondsint0Cooldown for /repair all (0 = no cooldown)
costdouble0.0Cost for single item repair (requires economy enabled)
costAlldouble0.0Cost for /repair all (requires economy enabled)

Clear Inventory

"clearInv": {
"enabled": true,
"cooldownSeconds": 0
}

Trash

"trash": {
"enabled": true,
"cooldownSeconds": 0,
"defaultSize": 27,
"maxSize": 45
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable the /trash command
cooldownSecondsint0Cooldown between uses (0 = no cooldown)
defaultSizeint27Default number of slots when no size argument given
maxSizeint45Maximum allowed slots (caps the size argument)

The trash command opens an inventory window where players can drag in unwanted items. All items placed in the window are permanently deleted when the window is closed. Players can optionally specify a custom size with /trash <size>, capped by maxSize.

Top

"top": {
"enabled": true,
"cooldownSeconds": 0,
"cost": 0.0
}

Permission-Based Cooldowns:

In advanced permissions mode, you can set different cooldowns per group:

  • eliteessentials.command.misc.<cmd>.bypass.cooldown - Bypass cooldown entirely
  • eliteessentials.command.misc.<cmd>.cooldown.<seconds> - Set specific cooldown

Common cooldown values: Any number of seconds (e.g., 30, 60, 120, 300, 600, 3600)

Economy

"economy": {
"enabled": false,
"currencyName": "coin",
"currencyNamePlural": "coins",
"currencySymbol": "$",
"startingBalance": 0.0,
"minPayment": 1.0,
"baltopLimit": 10,
"vaultUnlockedProvider": true,
"useExternalEconomy": false,
"playerBalanceChangeNotify": "none",
"playerBalanceChangeNotifyGlobal": false,
"serverSenderName": "Server"
}
OptionTypeDefaultDescription
enabledbooleanfalseEnable/disable the economy system
currencyNamestring"coin"Singular currency name
currencyNamePluralstring"coins"Plural currency name
currencySymbolstring"$"Symbol shown before amounts
startingBalancedouble0.0Balance given to new players
minPaymentdouble1.0Minimum amount for /pay command
baltopLimitint10Number of players shown in /baltop
vaultUnlockedProviderbooleantrueRegister as VaultUnlocked economy provider
useExternalEconomybooleanfalseUse external economy via VaultUnlocked
playerBalanceChangeNotifystring"none"Notification mode for balance changes (see below)
playerBalanceChangeNotifyGlobalbooleanfalseWhen true, broadcast balance changes to all players
serverSenderNamestring"Server"Name shown for server-initiated economy changes

Balance Change Notifications:

When enabled, players receive notifications when their wallet balance changes (via /pay, /eco, /wallet, command costs, etc.).

ValueDescription
"none"No notifications (default)
"chat"Show notification in chat to the affected player only
"chat_global"Broadcast notification to ALL players on server
"tooltip"Store balance change data in player data for a custom UI to read and display (requires a separate UI mod — does nothing on its own)

How playerBalanceChangeNotifyGlobal works:

  • When false (default): Notifications show "your wallet" and are sent only to the affected player
  • When true: Notifications show the player's name (e.g., "Steve's wallet") and are broadcast to all online players

Example notification message:

Server added $10.00 to Steve's wallet. Balance: $100.00 -> $110.00

Configurable message format:balanceChangeNotify with placeholders {sender}, {target}, {oldBalance}, {newBalance}, {amount}, {changeType}, {currency}

VaultUnlocked Integration:

  • vaultUnlockedProvider: When true, other plugins can use EliteEssentials economy via VaultUnlocked API
  • useExternalEconomy: When true, EliteEssentials uses another plugin's economy (e.g., Ecotale). This disables /eco and /pay commands to avoid conflicts.

Economy API: Other mods can integrate with EliteEssentials economy using the public API at com.eliteessentials.api.EconomyAPI:

if (EconomyAPI.isEnabled()) {
doublebalance = EconomyAPI.getBalance(playerUUID);
if (EconomyAPI.has(playerUUID, 100.0)) {
EconomyAPI.withdraw(playerUUID, 100.0);
}
EconomyAPI.deposit(playerUUID, 50.0);
EconomyAPI.transfer(fromUUID, toUUID, 25.0);
Stringformatted = EconomyAPI.format(100.0); // "$100.00"
}

Mail

"mail": {
"enabled": true,
"maxMailPerPlayer": 50,
"maxMessageLength": 500,
"sendCooldownSeconds": 30,
"notifyOnLogin": true,
"notifyDelaySeconds": 3
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable the mail system
maxMailPerPlayerint50Maximum mail messages per player mailbox
maxMessageLengthint500Maximum message length in characters
sendCooldownSecondsint30Cooldown between sending mail to the same player
notifyOnLoginbooleantrueShow notification on login if player has unread mail
notifyDelaySecondsint3Delay before showing mail notification on login

AFK

"afk": {
"enabled": true,
"inactivityTimeoutMinutes": 5,
"broadcastAfk": true,
"showInTabList": true,
"excludeFromRewards": true,
"excludeFromSleep": true
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable the AFK system
inactivityTimeoutMinutesint5Minutes of inactivity before auto-AFK
broadcastAfkbooleantrueBroadcast when players go AFK or return
showInTabListbooleantrueShow [AFK] prefix in tab list
excludeFromRewardsbooleantrueAFK players do not accumulate playtime reward time
excludeFromSleepbooleantrueAFK players do not count toward the sleep percentage threshold

Join Date

"joindate": {
"enabled": true
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable the /joindate command

Playtime

"playtime": {
"enabled": true
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable the /playtime command

Periodic PlayTime Save

OptionTypeDefaultDescription
periodicPlayTimeSaveMinutesint0Interval in minutes to flush session playtime to disk for all online players (0 = disabled). Protects against playtime loss during server crashes. Recommended: 5-10 minutes

Tab List

"tabList": {
"showLuckPermsPrefix": false
}
OptionTypeDefaultDescription
showLuckPermsPrefixbooleanfalseShow LuckPerms prefix in the player tab list

When enabled, players' LuckPerms prefixes appear before their names in the server's player list. The AFK [AFK] prefix (if applicable) appears first, followed by the LuckPerms prefix. Color codes are automatically stripped since the Hytale tab list only supports plain text.

Ignore

"ignore": {
"enabled": true
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable the /ignore and /unignore commands

When enabled, players can use /ignore <player> to block public and private messages from specific players. Ignore data is stored per-player in players/<uuid>.json.

Mute

"mute": {
"enabled": true
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable the /mute and /unmute commands

When enabled, admins can use /mute <player> [reason] to prevent players from sending any messages (public chat and private messages). Mute data is stored server-wide in mutes.json and persists across restarts.

Ban

"ban": {
"enabled": true
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable ban commands (/ban, /unban, /tempban, /ipban, /unipban)

Freeze

"freeze": {
"enabled": true
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable the /freeze command

Warn

"warn": {
"enabled": true,
"autoPunishThreshold": 3,
"autoPunishAction": "tempban",
"autoPunishTempbanMinutes": 1440,
"clearAfterPunishment": true
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable the /warn, /warnings, /clearwarnings commands
autoPunishThresholdint3Number of warnings before automatic punishment. Set to 0 to disable
autoPunishActionstring"tempban"Action when threshold is reached: "ban" or "tempban"
autoPunishTempbanMinutesint1440Duration in minutes for tempban (only when autoPunishAction is tempban). 1440 = 24 hours
clearAfterPunishmentbooleantrueWhether to clear all warnings after auto-punishment is applied

When a player reaches the warning threshold, the configured action runs automatically (permanent ban or tempban). The player is kicked and notified. Data is stored in warns.json.

Nickname

"nick": {
"enabled": false,
"allowColors": false,
"requireColorPermission": false,
"requireFormattingPermission": false
}
OptionTypeDefaultDescription
enabledbooleanfalseEnable/disable the /nick and /realname commands
allowColorsbooleanfalseAllow players to use color codes in nicknames (admin-only in simple mode regardless)
requireColorPermissionbooleanfalseWhen true, only players with nick.color permission can use colors in nicknames
requireFormattingPermissionbooleanfalseWhen true, only players with nick.formatting permission can use formatting codes in nicknames

Clear Chat

"clearChat": {
"enabled": true
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable the /clearchat command

List (Online Players)

"list": {
"enabled": true,
"maxPlayers": 100
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable the /list command
maxPlayersint100Maximum players shown (for display purposes)

Near (Nearby Players)

"near": {
"enabled": true,
"distance": 200
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable the /near command (alias /nearby)
distanceint200Search radius in blocks for nearby players

The /near command lists other online players within distance blocks of you, sorted closest first, with each player's distance shown in blocks. Only players in the same world are considered. Vanished players are hidden unless the viewer is an admin or holds the vanish permission. Added in 2.0.9.

Player Info

"playerinfo": {
"enabled": true
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable the /playerinfo command

GUI Settings

"gui": {
"playersPerTpaPage": 6,
"warpsPerPage": 6,
"homesPerPage": 6,
"kitsPerPage": 6
}
OptionTypeDefaultDescription
playersPerTpaPageint6Number of entries per page in the TPA/TPAHERE GUI
warpsPerPageint6Number of entries per page in the Warp GUI
homesPerPageint6Number of entries per page in the Homes GUI
kitsPerPageint6Number of entries per page in the Kits GUI

PlayTime Rewards

"playTimeRewards": {
"enabled": false,
"checkIntervalMinutes": 1,
"showRewardMessage": true,
"broadcastMilestones": true,
"onlyCountNewPlaytime": true,
"enabledTimestamp": 0
}
OptionTypeDefaultDescription
enabledbooleanfalseEnable/disable the playtime rewards system
checkIntervalMinutesint1How often to check for reward eligibility
showRewardMessagebooleantrueShow message when player receives a reward
broadcastMilestonesbooleantrueBroadcast milestone rewards to all players
onlyCountNewPlaytimebooleantrueOnly count playtime after system was enabled
enabledTimestamplong0Auto-set when system first starts

Reward Configuration: Rewards are configured in mods/EliteEssentials/playtime_rewards.json:

[
{
"id": "hourly_bonus",
"name": "Hourly Bonus",
"minutesRequired": 60,
"repeatable": true,
"enabled": true,
"message": "&a[Reward] &fYou received your hourly playtime bonus!",
"commands": ["eco add {player} 100"]
},
{
"id": "100h_vip",
"name": "100 Hour VIP",
"minutesRequired": 6000,
"repeatable": false,
"enabled": true,
"message": "&d[Milestone] &f100 hours played! You've earned VIP status!",
"commands": [
"lp user {player} group set vip",
"eco add {player} 5000"
]
}
]

Supported Commands:

  • Economy: eco add/remove/set {player} <amount>
  • LuckPerms: lp user {player} group set/add/remove <group>
  • LuckPerms: lp user {player} permission set/unset <perm>
  • LuckPerms: lp user {player} promote/demote <track>

Group Chat

"groupChat": {
"enabled": true,
"useChatFormatting": false,
"formattedMessageFormat": "{channel_color}{channel_prefix} {chat_format}",
"allowSpy": true,
"spyFormat": "&8[GC-SPY] &7[{channel}] {player}: {message}",
"broadcastToConsole": false
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable the group chat feature
useChatFormattingbooleanfalseWhen true, player names use the same prefix/color formatting as regular chat
formattedMessageFormatstring{channel_color}{channel_prefix} {chat_format}Format template for messages when useChatFormatting is enabled
allowSpybooleantrueEnable/disable admin spy mode
spyFormatstring&8[GC-SPY] &7[{channel}] {player}: {message}Format for spy messages
broadcastToConsolebooleanfalseLog all group chat messages to console as [GC]

Chat Formatting Integration: When useChatFormatting is enabled, player names in group chat use the same LuckPerms prefixes/suffixes and group priorities as regular chat. The formattedMessageFormat template supports these placeholders:

  • {channel_prefix} - The chat channel prefix (e.g., "[ADMIN]")
  • {channel_color} - The chat channel color code
  • {chat_format} - The player's full chat format from chatFormat config
  • {player} - Player's username
  • {message} - The chat message

Example with LuckPerms prefix: If a player has prefix "&c[Admin]" in LuckPerms and uses the admin chat:

&c[ADMIN] &c[Admin] Steve: Hello team!

Spy Mode: Admins can use /gcspy to toggle spy mode and see all group chat messages, even from channels they don't belong to. This is useful for monitoring multiple channels without needing to be in each group.

Chat Channel Configuration: Chat channels are configured in mods/EliteEssentials/groupchat.json:

[
{
"groupName": "admin",
"displayName": "Admin Chat",
"prefix": "[ADMIN]",
"color": "#f85149",
"enabled": true,
"requiresGroup": true
},
{
"groupName": "trade",
"displayName": "Trade Chat",
"prefix": "[TRADE]",
"color": "#f0c674",
"enabled": true,
"requiresGroup": false
}
]
  • requiresGroup: true - Requires LuckPerms group membership
  • requiresGroup: false - Requires eliteessentials.chat.<chatname> permission

Private Messages

"msg": {
"broadcastToConsole": false
}
OptionTypeDefaultDescription
broadcastToConsolebooleanfalseLog all private messages (/msg, /reply) to console as [MSG]

Chat Format

"chatFormat": {
"enabled": true,
"allowPlayerColors": false,
"allowPlayerFormatting": false,
"broadcastToConsole": false,
"groupFormats": {
"Owner": "&4[Owner] {player}&r: {message}",
"Admin": "&c[Admin] {player}&r: {message}",
"VIP": "&6[VIP] {player}&r: {message}",
"Default": "&7{player}&r: {message}"
},
"groupPriorities": {
"Owner": 100,
"Admin": 90,
"VIP": 50,
"Default": 0
},
"defaultFormat": "&7{player}&r: {message}"
}
OptionTypeDefaultDescription
enabledbooleantrueEnable/disable group-based chat formatting
allowPlayerColorsbooleanfalseAllow regular players to use color codes in chat
allowPlayerFormattingbooleanfalseAllow regular players to use formatting codes
broadcastToConsolebooleanfalseLog all player chat to console as [CHAT]
groupFormatsobjectsee aboveChat format per group
groupPrioritiesobjectsee abovePriority order (highest wins)
defaultFormatstringsee aboveDefault format if no group matches

Chat Permissions (Advanced Mode):

  • eliteessentials.chat.color - Use color codes in chat
  • eliteessentials.chat.format - Use formatting codes in chat

See Chat Formatting for detailed documentation.

MOTD (Message of the Day)

"motd": {
"enabled": true,
"showOnJoin": true,
"delaySeconds": 1,
"serverName": "Our Server"
}

MOTD content is configured in mods/EliteEssentials/motd.json:

{
"lines": [
"&e&lWelcome to {server}, {player}!",
"&7There are &a{playercount}&7 players online."
],
"worldMotds": {
"explore": {
"enabled": true,
"showAlways": false,
"lines": ["&a=== Welcome to Explore! ==="]
}
}
}

Per-World MOTDs:

  • showAlways: true - Shows every time player enters the world
  • showAlways: false - Shows only once per session

Join Messages

"joinMsg": {
"joinEnabled": true,
"quitEnabled": true,
"firstJoinEnabled": true,
"suppressDefaultMessages": true,
"worldChangeEnabled": false
}
OptionTypeDefaultDescription
joinEnabledbooleantrueEnable join messages
quitEnabledbooleantrueEnable quit messages
firstJoinEnabledbooleantrueEnable first join broadcast
suppressDefaultMessagesbooleantrueSuppress default Hytale join messages
worldChangeEnabledbooleanfalseBroadcast world change messages

Auto Broadcast

"autoBroadcast": {
"enabled": true
}

Broadcasts are configured in mods/EliteEssentials/autobroadcast.json:

{
"broadcasts": [
{
"id": "discord",
"enabled": true,
"intervalSeconds": 600,
"prefix": "",
"random": false,
"requirePlayers": true,
"messages": [
"&5&l[Discord]&7 - Join us!\n&7Join: &b[CLICK HERE](https://discord.gg/YourInvite)"
]
}
]
}

Messages support color codes, labeled links ([text](url)), and \n for multi-line.

Command Aliases

"aliases": {
"enabled": true
}

Aliases are stored in mods/EliteEssentials/aliases.json:

{
"explore": {
"command": "warp explore",
"permission": "everyone",
"silent": true
}
}
  • silent: true - Suppresses teleport confirmation messages

Two-Gate Permission Model (1.1.13+): Aliases use a two-layer security model to prevent privilege escalation:

  • Gate 1: The alias's own permission controls who can use the alias
  • Gate 2: Validates that the player has the target command's actual permission before dispatch

This prevents scenarios where an alias with "everyone" permission could invoke admin-only commands. Gate 2 covers all known EliteEssentials commands via a permission map. Unknown commands (from other plugins) pass through to the target command's own permission check via CommandManager.

Debug logging shows when Gate 2 blocks a command attempt.

Custom Help Entries

"customHelp": {
"enabled": true
}

Custom help entries are stored in mods/EliteEssentials/custom_help.json. This allows server admins to add help text for commands from other plugins to /eehelp:

[
{
"command": "/lp user {player} info",
"description": "View a player's LuckPerms info",
"permission": "op",
"enabled": true
},
{
"command": "/shop",
"description": "Open the server shop",
"permission": "everyone",
"enabled": true
}
]
FieldDescription
commandThe command to display (supports placeholders like {player})
descriptionHelp text shown for the command
permissionVisibility: everyone, op, or a custom permission node
enabledWhether to show this entry in /eehelp

Each entry respects its config enabled flag and permission checks. Entries reload with /ee reload.

Storage

"storage": {
"storageType": "json",
"mysql": {
"host": "localhost",
"port": 3306,
"database": "eliteessentials",
"username": "root",
"password": "",
"tablePrefix": "ee_",
"connectionPool": {
"maximumPoolSize": 10,
"minimumIdle": 2,
"connectionTimeout": 30000
}
}
}
OptionTypeDefaultDescription
storageTypestring"json"Storage backend: "json", "sqlite", or "mysql"
mysql.hoststring"localhost"MySQL server hostname
mysql.portint3306MySQL server port
mysql.databasestring"eliteessentials"Database name
mysql.usernamestring"root"Database username
mysql.passwordstring""Database password
mysql.tablePrefixstring"ee_"Prefix for all SQL table names
mysql.connectionPool.maximumPoolSizeint10Maximum concurrent database connections
mysql.connectionPool.minimumIdleint2Minimum idle connections kept open
mysql.connectionPool.connectionTimeoutlong30000Milliseconds to wait for a connection

Storage Types:

  • "json" (default) — File-based storage. No setup required. Same behavior as previous versions.
  • "sqlite" — Embedded SQL database. Database file stored in the plugin data folder. No external software needed. The mysql config section is ignored.
  • "mysql" — External MySQL/MariaDB database. Configure the mysql section with your connection details. Required for multi-server setups where player data needs to be shared.

Fallback Behavior:

  • If storageType is set to an unrecognized value, the plugin logs an error and falls back to "json"
  • If a database connection or schema migration fails on startup, the plugin falls back to "json" to prevent data loss

Multi-Server (MySQL): When multiple servers connect to the same MySQL database, player data is loaded fresh from the database on each join rather than relying on stale cache. Data is flushed to the database and evicted from cache on disconnect.

Migration: Use /eemigration sql to transfer existing JSON data to the configured SQL database, then /eemigration cleanup to move old JSON files into a backup/ folder. See Migration for details.

Command Costs

EliteEssentials supports charging players for using commands when the economy system is enabled.

Supported Commands

CommandConfig PathDescription
/homehomes.costCost to teleport home
/sethomehomes.setHomeCostCost to set a home
/spawnspawn.costCost to teleport to spawn
/warpwarps.costCost to use a warp
/backback.costCost to return to previous location
/rtprtp.costCost for random teleport
/tpatpa.costCost to send a teleport request
/tpaheretpa.tpahereCostCost to request someone teleport to you
/healheal.costCost to heal
/toptop.costCost to teleport to top

Permission-Based Costs

In advanced permissions mode, set different costs per group:

# Default players pay 50 for RTP
/lp group default permission set eliteessentials.cost.rtp.50 true# VIP players pay only 10 for RTP
/lp group vip permission set eliteessentials.cost.rtp.10 true# Premium players get free warps
/lp group premium permission set eliteessentials.cost.warp.0 true

Bypass Permissions

  • eliteessentials.bypass.cost - Bypass all command costs
  • eliteessentials.bypass.cost.<command> - Bypass cost for specific command

Example Configurations

Survival Server (Balanced)

{
"advancedPermissions": false,
"rtp": {
"enabled": true,
"minRange": 500,
"maxRange": 10000,
"cooldownSeconds": 300,
"warmupSeconds": 5
},
"homes": {
"maxHomes": 3,
"warmupSeconds": 5
},
"tpa": {
"timeoutSeconds": 60,
"warmupSeconds": 5
}
}

Creative/Build Server (Relaxed)

{
"advancedPermissions": false,
"rtp": {
"cooldownSeconds": 0,
"warmupSeconds": 0
},
"homes": {
"maxHomes": 10,
"warmupSeconds": 0
},
"tpa": {
"warmupSeconds": 0
}
}

Hardcore Server (Restrictive)

{
"advancedPermissions": true,
"rtp": {
"enabled": false
},
"back": {
"workOnDeath": false,
"cooldownSeconds": 600
},
"homes": {
"maxHomes": 1,
"cooldownSeconds": 300,
"warmupSeconds": 10
}
}

Configuration Migration

When updating EliteEssentials, your existing configuration is preserved. New options are automatically added with their default values. You do not need to recreate your config file when updating.

Clone this wiki locally