-
Notifications
You must be signed in to change notification settings - Fork 12
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,
"cooldownSeconds": 30,
"warmupSeconds": 3,
"maxAttempts": 10,
"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 |
cooldownSeconds |
int | 30 |
Cooldown between uses (0 = no cooldown) |
warmupSeconds |
int | 3 |
Time player must stand still before teleport (0 = instant) |
maxAttempts |
int | 10 |
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) |
"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) |
"spawn": {
"enabled": true,
"cooldownSeconds": 0,
"warmupSeconds": 3,
"perWorld": false,
"mainWorld": "default",
"cost": 0.0
}| 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) |
"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 (fall, fire, drowning, etc.) |
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. This is useful for spawn areas where you want players to be completely safe.
"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
}| Option | Type | Default | Description |
|---|---|---|---|
enabled |
boolean | true |
Enable/disable the /god command |
cooldownSeconds |
int | 0 |
Cooldown between uses (0 = no cooldown) |
"heal": {
"enabled": true,
"cooldownSeconds": 0,
"cost": 0.0
}| Option | Type | Default | Description |
|---|---|---|---|
enabled |
boolean | true |
Enable/disable the /heal command |
cooldownSeconds |
int | 0 |
Cooldown between uses (0 = no cooldown) |
cost |
double | 0.0 |
Cost to use this command (requires economy enabled) |
"fly": {
"enabled": true,
"cooldownSeconds": 0
}| Option | Type | Default | Description |
|---|---|---|---|
enabled |
boolean | true |
Enable/disable the /fly command |
cooldownSeconds |
int | 0 |
Cooldown between uses (0 = no cooldown) |
"repair": {
"enabled": true,
"cooldownSeconds": 0
}| Option | Type | Default | Description |
|---|---|---|---|
enabled |
boolean | true |
Enable/disable the /repair command |
cooldownSeconds |
int | 0 |
Cooldown between uses (0 = no cooldown) |
"clearInv": {
"enabled": true,
"cooldownSeconds": 0
}| Option | Type | Default | Description |
|---|---|---|---|
enabled |
boolean | true |
Enable/disable the /clearinv command |
cooldownSeconds |
int | 0 |
Cooldown between uses (0 = no cooldown) |
"top": {
"enabled": true,
"cooldownSeconds": 0,
"cost": 0.0
}| Option | Type | Default | Description |
|---|---|---|---|
enabled |
boolean | true |
Enable/disable the /top command |
cooldownSeconds |
int | 0 |
Cooldown between uses (0 = no cooldown) |
cost |
double | 0.0 |
Cost to use this command (requires economy enabled) |
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 (e.g.,.cooldown.60for 1 minute)
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
}| Option | Type | Default | Description |
|---|---|---|---|
enabled |
boolean | false |
Enable/disable the economy system |
currencyName |
string | "coin" |
Singular currency name (e.g., "1 coin") |
currencyNamePlural |
string | "coins" |
Plural currency name (e.g., "5 coins") |
currencySymbol |
string | "$" |
Symbol shown before amounts (e.g., "$100") |
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 |
Economy API:
Other mods can integrate with EliteEssentials economy using the public API at com.eliteessentials.api.EconomyAPI:
// Check if economy is available
if (EconomyAPI.isEnabled()) {
// Get player balance
double balance = EconomyAPI.getBalance(playerUUID);
// Check if player can afford something
if (EconomyAPI.has(playerUUID, 100.0)) {
// Withdraw money
EconomyAPI.withdraw(playerUUID, 100.0);
}
// Deposit money
EconomyAPI.deposit(playerUUID, 50.0);
// Transfer between players
EconomyAPI.transfer(fromUUID, toUUID, 25.0);
// Format amount with currency symbol
String formatted = EconomyAPI.format(100.0); // "$100.00"
}"playTimeRewards": {
"enabled": true,
"checkIntervalSeconds": 60,
"onlyCountNewPlaytime": true,
"enabledTimestamp": 0
}| Option | Type | Default | Description |
|---|---|---|---|
enabled |
boolean | true |
Enable/disable the playtime rewards system |
checkIntervalSeconds |
int | 60 |
How often to check for reward eligibility (seconds) |
onlyCountNewPlaytime |
boolean | true |
Only count playtime accumulated after system was enabled |
enabledTimestamp |
long | 0 |
Auto-populated when system first starts (Unix timestamp) |
Reward Configuration:
Rewards are configured in mods/EliteEssentials/playtime_rewards.json. This file contains an array of reward definitions.
Example 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] &fAmazing! 100 hours played! You've earned VIP status!",
"commands": [
"lp user {player} group set vip",
"eco add {player} 5000"
]
},
{
"id": "rank_up",
"name": "Rank Promotion",
"minutesRequired": 1440,
"repeatable": false,
"enabled": true,
"message": "&b[Rank Up] &fYou've been promoted on the ranks track!",
"commands": [
"lp user {player} promote ranks"
]
}
]Reward Options:
| Field | Type | Description |
|---|---|---|
id |
string | Unique identifier for the reward |
name |
string | Display name for the reward |
minutesRequired |
int | Minutes of playtime required to earn this reward |
repeatable |
boolean | If true, reward triggers every X minutes; if false, one-time milestone |
enabled |
boolean | Enable/disable this specific reward |
message |
string | Message sent to player when reward is granted (supports color codes) |
commands |
array | Commands to execute when reward is granted |
Supported Commands:
| Command Type | Format | Description |
|---|---|---|
| Economy | eco add {player} <amount> |
Add currency to player |
| Economy | eco remove {player} <amount> |
Remove currency from player |
| Economy | eco set {player} <amount> |
Set player's balance |
| LuckPerms | lp user {player} group set <group> |
Set player's primary group |
| LuckPerms | lp user {player} group add <group> |
Add player to a group |
| LuckPerms | lp user {player} group remove <group> |
Remove player from a group |
| LuckPerms | lp user {player} permission set <perm> [true/false] |
Set a permission |
| LuckPerms | lp user {player} permission unset <perm> |
Remove a permission |
| LuckPerms | lp user {player} promote <track> |
Promote player on a track |
| LuckPerms | lp user {player} demote <track> |
Demote player on a track |
Important Notes:
- The
{player}placeholder is replaced with the player's name - Economy commands execute internally via the EliteEssentials economy system
- LuckPerms commands execute via the LuckPerms API (requires LuckPerms to be installed)
- If LuckPerms is not installed, LP commands are skipped with a warning in the console
- The mod works fine without LuckPerms - you just can't use LP commands in rewards
- Repeatable rewards grant ONE reward per check cycle (not all at once)
- Claims are tracked in
playtime_claims.jsonto prevent duplicate claims
onlyCountNewPlaytime:
When true (default), this prevents a flood of catch-up rewards when enabling the system on an existing server. Players who have accumulated playtime before the system was enabled will start fresh from when the system was turned on.
"discord": {
"enabled": true
}| Option | Type | Default | Description |
|---|---|---|---|
enabled |
boolean | true |
Enable/disable the /discord command |
Configuration:
The discord content is configured in mods/EliteEssentials/discord.json. Edit this file to customize your server's discord information. URLs are automatically made clickable.
"motd": {
"enabled": true,
"showOnJoin": true,
"delaySeconds": 1,
"serverName": "Our Server"
}| Option | Type | Default | Description |
|---|---|---|---|
enabled |
boolean | true |
Enable/disable MOTD display |
showOnJoin |
boolean | true |
Show MOTD automatically when player joins server |
delaySeconds |
int | 1 |
Delay before showing MOTD on join (0 = instant) |
serverName |
string | "Our Server" |
Server name for {server} placeholder |
Configuration:
The MOTD content is configured in mods/EliteEssentials/motd.json.
Example motd.json:
{
"lines": [
"",
"&6&l========================================",
"&b&l Welcome to {server}, &f{player}&b&l!",
"&6&l========================================",
"",
"&7There are &e{playercount} &7players online.",
"&7You are in world &a{world}&7.",
"",
"&6&l> &eServer Resources:",
" &7* Type &a/help&7 for commands",
" &7* Type &a/rules&7 for rules",
""
],
"worldMotds": {
"explore": {
"enabled": true,
"showAlways": false,
"lines": [
"",
"&a&l=== Welcome to Explore! ===",
"&7This is the exploration world.",
"&7Be careful out there, &f{player}&7!",
""
]
}
}
}Global MOTD:
- The
linesarray is the global MOTD shown when players first join the server - Only shows on initial server connection, NOT when changing worlds
Per-World MOTDs:
- Configure unique MOTDs for specific worlds in the
worldMotdssection - Each world entry has:
-
enabled- Enable/disable this world's MOTD -
showAlways- Whentrue, shows every time player enters the world; whenfalse, shows only once per session (first time entering) -
lines- Array of message lines to display
-
Placeholders:
-
{player}- Player's name -
{server}- Server name from config -
{world}- Current world name -
{playercount}- Number of online players
Color Codes:
All standard color codes are supported: &0-9, &a-f, &l (bold), &o (italic), &r (reset)
"autoBroadcast": {
"enabled": true
}| Option | Type | Default | Description |
|---|---|---|---|
enabled |
boolean | true |
Enable/disable the auto broadcast system |
Configuration:
Auto broadcasts are configured in mods/EliteEssentials/autobroadcast.json. This file contains an array of broadcast groups, each with their own settings.
Example autobroadcast.json:
{
"broadcasts": [
{
"id": "discord",
"enabled": true,
"intervalSeconds": 600,
"prefix": "",
"random": false,
"requirePlayers": true,
"messages": [
"&5&l[Discord]&7 - &fJoin our community!\n&7Chat, updates, events & support.\n&bhttps://discord.gg/YourInvite",
"&6&l[Tip]&7 - &fNeed help getting started?\n&7Check out our commands with &e/help\n&7Set your home with &e/sethome"
]
}
]
}Broadcast Options:
| Option | Type | Default | Description |
|---|---|---|---|
id |
string | required | Unique identifier for this broadcast group |
enabled |
boolean | true |
Enable/disable this specific broadcast |
intervalSeconds |
int | 600 |
Seconds between broadcasts |
prefix |
string | "" |
Prefix added before each message (supports color codes) |
random |
boolean | false |
If true, picks random message; if false, cycles sequentially |
requirePlayers |
boolean | true |
Only broadcast when players are online |
messages |
array | required | Array of messages to broadcast |
Multi-line Messages:
Use \n within a message string to create multiple lines:
"messages": [
"&5&l[Discord]&7 - &fJoin our community!\n&7Chat, updates & support.\n&bhttps://discord.gg/YourInvite"
]Color Codes:
All standard color codes are supported: &0-9, &a-f, &l (bold), &o (italic), &r (reset)
Clickable URLs:
URLs starting with http:// or https:// are automatically made clickable.
All player-facing messages can be customized in the messages section. See Placeholders for available placeholders.
"messages": {
"prefix": "[EliteEssentials] ",
"noPermission": "You don't have permission to use this command.",
"playerNotFound": "Player not found.",
"commandDisabled": "This command is disabled.",
"onCooldown": "You must wait {seconds} seconds before using this command again.",
"warmupStarted": "Teleporting in {seconds} seconds. Don't move!",
"warmupCancelled": "Teleport cancelled - you moved!",
"warmupCountdown": "Teleporting in {seconds}..."
}See the Placeholders page for a complete list of all configurable messages and their placeholders.
{
"debug": false,
"advancedPermissions": false,
"rtp": {
"enabled": true,
"minRange": 500,
"maxRange": 10000,
"cooldownSeconds": 300,
"warmupSeconds": 5
},
"homes": {
"enabled": true,
"maxHomes": 3,
"warmupSeconds": 5
},
"tpa": {
"enabled": true,
"timeoutSeconds": 60,
"warmupSeconds": 5
}
}{
"debug": false,
"advancedPermissions": false,
"rtp": {
"enabled": true,
"cooldownSeconds": 0,
"warmupSeconds": 0
},
"homes": {
"enabled": true,
"maxHomes": 10,
"warmupSeconds": 0
},
"tpa": {
"enabled": true,
"warmupSeconds": 0
}
}{
"debug": false,
"advancedPermissions": true,
"rtp": {
"enabled": false
},
"back": {
"enabled": true,
"workOnDeath": false,
"cooldownSeconds": 600
},
"homes": {
"enabled": true,
"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 supports charging players for using commands when the economy system is enabled. This allows server owners to create an economy sink and add value to their currency.
- Enable the economy system in config:
"economy": { "enabled": true } - Set costs for individual commands (default is 0.0 = free)
- Players are charged when they execute the command
- Admins and players with bypass permissions are not charged
The following commands support costs:
| 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 |
{
"economy": {
"enabled": true,
"currencyName": "coin",
"currencyNamePlural": "coins",
"startingBalance": 100.0
},
"homes": {
"cost": 5.0,
"setHomeCost": 25.0
},
"rtp": {
"cost": 10.0
},
"spawn": {
"cost": 0.0
}
}In advanced permissions mode, players can bypass costs with:
-
eliteessentials.bypass.cost- Bypass all command costs -
eliteessentials.bypass.cost.<command>- Bypass cost for specific command (e.g.,eliteessentials.bypass.cost.home)
Admins automatically bypass all costs.
Command aliases are stored in mods/EliteEssentials/aliases.json. You can create aliases using the /alias command, but some options like silent mode must be configured by editing the file directly.
{
"explore": {
"command": "warp explore",
"permission": "everyone",
"silent": false
},
"hub": {
"command": "warp spawn",
"permission": "everyone",
"silent": true
}
}| Field | Type | Default | Description |
|---|---|---|---|
command |
string | required | The command to execute (without leading /) |
permission |
string | "everyone" |
"everyone", "op", or custom permission node |
silent |
boolean | false |
Suppress teleport confirmation messages |
When silent: true is set on an alias:
- The initial warmup message ("Teleporting to warp 'X' in Y seconds...") is hidden
- The warmup countdown messages (3... 2... 1...) still display so players know something is happening
- The final confirmation message ("Teleported to warp 'X'") is hidden
This is useful when combined with per-world MOTDs that provide context about the destination instead of generic teleport messages.
Example Use Case:
You have a /explore alias that warps to the "explore" world, and that world has a per-world MOTD configured. With silent mode, players see:
-
Teleporting in 3... 2... 1...(countdown) - teleport happens
- World MOTD displays with welcome message
Instead of:
Teleporting to warp 'explore' in 3 seconds... Stand still!Teleporting in 3... 2... 1...- teleport happens
Teleported to warp 'explore'- World MOTD displays
EliteEssentials by EliteScouter | GitHub | Report Issues