-
Notifications
You must be signed in to change notification settings - Fork 2
Configuration
EliteEssentials is fully configurable through the config.json file located at mods/EliteEssentials/config.json.
mods/
EliteEssentials/
config.json
After editing the configuration, apply changes with:
/eliteessentials reload
{
"debug": false,
"advancedPermissions": false
}| Option | Type | Default | Description |
|---|---|---|---|
debug |
boolean | false |
Enable verbose debug logging |
advancedPermissions |
boolean | false |
Enable granular permission nodes (see Permissions) |
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.
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.
"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
}| Option | Type | Default | Description |
|---|---|---|---|
enabled |
boolean | true |
Enable/disable the /rtp command |
minRange |
int | 100 |
Minimum distance from center for random location |
maxRange |
int | 5000 |
Maximum distance from center for random location |
worldRanges |
object | {} |
Per-world RTP range overrides (see below) |
cooldownSeconds |
int | 30 |
Cooldown between uses (0 = no cooldown) |
warmupSeconds |
int | 3 |
Time player must stand still before teleport (0 = instant) |
maxAttempts |
int | 5 |
Maximum attempts to find a safe location |
minSurfaceY |
int | 50 |
Minimum Y level to accept (avoids caves/dungeons) |
chunkLoadTimeoutMs |
int | 500 |
Timeout for loading unloaded chunks (0 = skip) |
defaultHeight |
int | 128 |
Default Y height when chunk is not loaded |
invulnerabilitySeconds |
int | 5 |
Seconds of invulnerability after RTP (0 = disabled) |
cost |
double | 0.0 |
Cost to use this command (requires economy enabled) |
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:
-
exploreworld: RTP range is 500-10000 blocks (larger exploration area) -
hubworld: RTP range is 50-500 blocks (smaller, contained area) - All other worlds: Use default 100-5000 blocks
"back": {
"enabled": true,
"maxHistory": 5,
"workOnDeath": true,
"cooldownSeconds": 0,
"warmupSeconds": 0,
"cost": 0.0
}| Option | Type | Default | Description |
|---|---|---|---|
enabled |
boolean | true |
Enable/disable the /back command |
maxHistory |
int | 5 |
Number of previous locations to remember |
workOnDeath |
boolean | true |
Save death location for /back |
cooldownSeconds |
int | 0 |
Cooldown between uses |
warmupSeconds |
int | 0 |
Warmup time before teleport |
cost |
double | 0.0 |
Cost to use this command (requires economy enabled) |
"tpa": {
"enabled": true,
"timeoutSeconds": 30,
"warmupSeconds": 3,
"cost": 0.0,
"tpahereCost": 0.0
}| Option | Type | Default | Description |
|---|---|---|---|
enabled |
boolean | true |
Enable/disable TPA commands |
timeoutSeconds |
int | 30 |
Seconds before request expires |
warmupSeconds |
int | 3 |
Warmup after accepting (requester must stand still) |
cost |
double | 0.0 |
Cost to use /tpa (requires economy enabled) |
tpahereCost |
double | 0.0 |
Cost to use /tpahere (requires economy enabled) |
"homes": {
"enabled": true,
"maxHomes": 3,
"defaultMaxHomes": 3,
"cooldownSeconds": 0,
"warmupSeconds": 3,
"cost": 0.0,
"setHomeCost": 0.0
}| Option | Type | Default | Description |
|---|---|---|---|
enabled |
boolean | true |
Enable/disable home commands |
maxHomes |
int | 3 |
Maximum homes per player |
defaultMaxHomes |
int | 3 |
Default max for new players |
cooldownSeconds |
int | 0 |
Cooldown between /home uses |
warmupSeconds |
int | 3 |
Warmup time before teleport |
cost |
double | 0.0 |
Cost to teleport home (requires economy enabled) |
setHomeCost |
double | 0.0 |
Cost 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": {
"enabled": true,
"cooldownSeconds": 0,
"warmupSeconds": 3,
"perWorld": false,
"mainWorld": "default",
"cost": 0.0,
"teleportOnFirstJoin": true,
"teleportOnEveryLogin": false
}| Option | Type | Default | Description |
|---|---|---|---|
enabled |
boolean | true |
Enable/disable the /spawn command |
cooldownSeconds |
int | 0 |
Cooldown between uses |
warmupSeconds |
int | 3 |
Warmup time before teleport |
perWorld |
boolean | false |
If false, always teleport to main world spawn; if true, teleport to current world's spawn |
mainWorld |
string | "default" |
Which world is the main world (used when perWorld=false) |
cost |
double | 0.0 |
Cost to use this command (requires economy enabled) |
teleportOnFirstJoin |
boolean | true |
Teleport new players to spawn on first join |
teleportOnEveryLogin |
boolean | false |
Teleport ALL players to spawn on every login |
"spawnProtection": {
"enabled": false,
"radius": 50,
"minY": -1,
"maxY": -1,
"disablePvp": true,
"disableAllDamage": false
}| Option | Type | Default | Description |
|---|---|---|---|
enabled |
boolean | false |
Enable/disable spawn protection |
radius |
int | 50 |
Protection radius in blocks (square area) |
minY |
int | -1 |
Minimum Y level to protect (-1 = no limit) |
maxY |
int | -1 |
Maximum Y level to protect (-1 = no limit) |
disablePvp |
boolean | true |
Disable PvP in spawn area |
disableAllDamage |
boolean | false |
Disable 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": {
"enabled": true,
"cooldownSeconds": 0,
"warmupSeconds": 3,
"maxWarps": -1,
"cost": 0.0,
"groupLimits": {
"Admin": -1,
"Owner": -1,
"Moderator": 20,
"VIP": 10,
"Default": 5
}
}| Option | Type | Default | Description |
|---|---|---|---|
enabled |
boolean | true |
Enable/disable warp commands |
cooldownSeconds |
int | 0 |
Cooldown between /warp uses |
warmupSeconds |
int | 3 |
Warmup time before teleport |
maxWarps |
int | -1 |
Maximum warps that can be created (-1 = unlimited) |
cost |
double | 0.0 |
Cost to use /warp (requires economy enabled) |
groupLimits |
object | see below | Per-group warp limits (advanced permissions mode) |
Warp Limits:
-
maxWarps: Global limit for total warps. Set to-1for unlimited. -
groupLimits: Per-group limits when using advanced permissions mode. Players get the highest limit from their groups. Use-1for unlimited.
Permission-based limits (Advanced Mode):
-
eliteessentials.command.warp.limit.<number>- Set specific limit -
eliteessentials.command.warp.limit.unlimited- Unlimited warps
"sleep": {
"enabled": true,
"sleepPercentage": 50
}| Option | Type | Default | Description |
|---|---|---|---|
enabled |
boolean | true |
Enable/disable sleep percentage feature |
sleepPercentage |
int | 50 |
Percentage of players needed to skip night (0-100) |
"deathMessages": {
"enabled": true,
"showKiller": true,
"showCause": true
}| Option | Type | Default | Description |
|---|---|---|---|
enabled |
boolean | true |
Enable/disable death messages |
showKiller |
boolean | true |
Show killer name (player or mob) |
showCause |
boolean | true |
Show death cause (fall, fire, etc.) |
These commands are admin-only and support optional cooldowns that can be configured per-group using permissions.
"god": {
"enabled": true,
"cooldownSeconds": 0
}"heal": {
"enabled": true,
"cooldownSeconds": 0,
"cost": 0.0
}"fly": {
"enabled": true,
"cooldownSeconds": 0
}"vanish": {
"enabled": true,
"hideFromList": true,
"hideFromMap": true,
"mimicJoinLeave": true,
"persistOnReconnect": true,
"suppressJoinQuitMessages": true,
"showReminderOnJoin": true
}| Option | Type | Default | Description |
|---|---|---|---|
enabled |
boolean | true |
Enable/disable the /vanish command |
hideFromList |
boolean | true |
Hide vanished players from the Server Players list |
hideFromMap |
boolean | true |
Hide vanished players from the world map |
mimicJoinLeave |
boolean | true |
Send fake join/leave messages when vanishing/unvanishing |
persistOnReconnect |
boolean | true |
Keep vanish state across server restarts/reconnects |
suppressJoinQuitMessages |
boolean | true |
Suppress real join/quit messages for vanished players |
showReminderOnJoin |
boolean | true |
Show reminder to vanished players when they rejoin |
"repair": {
"enabled": true,
"cooldownSeconds": 0
}"clearInv": {
"enabled": true,
"cooldownSeconds": 0
}"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: 30, 60, 120, 180, 300, 600, 900, 1800, 3600 seconds
"economy": {
"enabled": false,
"currencyName": "coin",
"currencyNamePlural": "coins",
"currencySymbol": "$",
"startingBalance": 0.0,
"minPayment": 1.0,
"baltopLimit": 10,
"vaultUnlockedProvider": true,
"useExternalEconomy": false
}| Option | Type | Default | Description |
|---|---|---|---|
enabled |
boolean | false |
Enable/disable the economy system |
currencyName |
string | "coin" |
Singular currency name |
currencyNamePlural |
string | "coins" |
Plural currency name |
currencySymbol |
string | "$" |
Symbol shown before amounts |
startingBalance |
double | 0.0 |
Balance given to new players |
minPayment |
double | 1.0 |
Minimum amount for /pay command |
baltopLimit |
int | 10 |
Number of players shown in /baltop |
vaultUnlockedProvider |
boolean | true |
Register as VaultUnlocked economy provider |
useExternalEconomy |
boolean | false |
Use external economy via VaultUnlocked |
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()) {
double balance = 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);
String formatted = EconomyAPI.format(100.0); // "$100.00"
}"mail": {
"enabled": true,
"maxMailPerPlayer": 50,
"maxMessageLength": 500,
"sendCooldownSeconds": 30,
"notifyOnLogin": true,
"notifyDelaySeconds": 3
}| Option | Type | Default | Description |
|---|---|---|---|
enabled |
boolean | true |
Enable/disable the mail system |
maxMailPerPlayer |
int | 50 |
Maximum mail messages per player mailbox |
maxMessageLength |
int | 500 |
Maximum message length in characters |
sendCooldownSeconds |
int | 30 |
Cooldown between sending mail to the same player |
notifyOnLogin |
boolean | true |
Show notification on login if player has unread mail |
notifyDelaySeconds |
int | 3 |
Delay before showing mail notification on login |
"playTimeRewards": {
"enabled": false,
"checkIntervalMinutes": 1,
"showRewardMessage": true,
"broadcastMilestones": true,
"onlyCountNewPlaytime": true,
"enabledTimestamp": 0
}| Option | Type | Default | Description |
|---|---|---|---|
enabled |
boolean | false |
Enable/disable the playtime rewards system |
checkIntervalMinutes |
int | 1 |
How often to check for reward eligibility |
showRewardMessage |
boolean | true |
Show message when player receives a reward |
broadcastMilestones |
boolean | true |
Broadcast milestone rewards to all players |
onlyCountNewPlaytime |
boolean | true |
Only count playtime after system was enabled |
enabledTimestamp |
long | 0 |
Auto-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>
"groupChat": {
"enabled": true
}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- Requireseliteessentials.chat.<chatname>permission
"chatFormat": {
"enabled": true,
"allowPlayerColors": false,
"allowPlayerFormatting": 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}"
}| Option | Type | Default | Description |
|---|---|---|---|
enabled |
boolean | true |
Enable/disable group-based chat formatting |
allowPlayerColors |
boolean | false |
Allow regular players to use color codes in chat |
allowPlayerFormatting |
boolean | false |
Allow regular players to use formatting codes |
groupFormats |
object | see above | Chat format per group |
groupPriorities |
object | see above | Priority order (highest wins) |
defaultFormat |
string | see above | Default 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": {
"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
"joinMsg": {
"joinEnabled": true,
"quitEnabled": true,
"firstJoinEnabled": true,
"suppressDefaultMessages": true,
"worldChangeEnabled": false
}| Option | Type | Default | Description |
|---|---|---|---|
joinEnabled |
boolean | true |
Enable join messages |
quitEnabled |
boolean | true |
Enable quit messages |
firstJoinEnabled |
boolean | true |
Enable first join broadcast |
suppressDefaultMessages |
boolean | true |
Suppress default Hytale join messages |
worldChangeEnabled |
boolean | false |
Broadcast world change messages |
"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&bhttps://discord.gg/YourInvite"
]
}
]
}"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
EliteEssentials supports charging players for using commands when the economy system is enabled.
| Command | Config Path | Description |
|---|---|---|
/home |
homes.cost |
Cost to teleport home |
/sethome |
homes.setHomeCost |
Cost to set a home |
/spawn |
spawn.cost |
Cost to teleport to spawn |
/warp |
warps.cost |
Cost to use a warp |
/back |
back.cost |
Cost to return to previous location |
/rtp |
rtp.cost |
Cost for random teleport |
/tpa |
tpa.cost |
Cost to send a teleport request |
/tpahere |
tpa.tpahereCost |
Cost to request someone teleport to you |
/heal |
heal.cost |
Cost to heal |
/top |
top.cost |
Cost to teleport to top |
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-
eliteessentials.bypass.cost- Bypass all command costs -
eliteessentials.bypass.cost.<command>- Bypass cost for specific command
{
"advancedPermissions": false,
"rtp": {
"enabled": true,
"minRange": 500,
"maxRange": 10000,
"cooldownSeconds": 300,
"warmupSeconds": 5
},
"homes": {
"maxHomes": 3,
"warmupSeconds": 5
},
"tpa": {
"timeoutSeconds": 60,
"warmupSeconds": 5
}
}{
"advancedPermissions": false,
"rtp": {
"cooldownSeconds": 0,
"warmupSeconds": 0
},
"homes": {
"maxHomes": 10,
"warmupSeconds": 0
},
"tpa": {
"warmupSeconds": 0
}
}{
"advancedPermissions": true,
"rtp": {
"enabled": false
},
"back": {
"workOnDeath": false,
"cooldownSeconds": 600
},
"homes": {
"maxHomes": 1,
"cooldownSeconds": 300,
"warmupSeconds": 10
}
}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.
EliteEssentials by EliteScouter | GitHub | Report Issues