Server Admin

Endless Leveling

The core plugin: requirements, admin access, staff commands, permission nodes, server-overrides.json and the config files, player data and integrations.

Gameplay GuideView the players side of Endless Leveling

Last updated

Install, staff-command, permission and configuration reference for the core plugin, EndlessLevelingCore. Every other Endless addon runs on top of it. For how levels, prestige and augments play, see the Endless Leveling gameplay guide.

  • Plugin version: 14.1.2
  • Jar: EndlessLeveling.jar (the file name carries no version)
  • Data folder: mods/Airijko_EndlessLevelingCore/

Requirements

PluginVersionType
Hytale Server≥ 0.7.0-pre.0, < 0.8.0Required
PartyPro≥ 0.8.0Optional (/party and party XP share)
EndlessDurability≥ 1.1.0Optional
TriggerVolumesanyOptional (shared-dungeon triggers)
LuckPermsanyOptional (prestige rank sync runs lp console commands)
PlaceholderAPIanyOptional (%el_*% placeholders, see the Placeholder API page)
EndlessLinkanyOptional (titles, Discord log relay, raid reminders)

EL-Core has no hard plugin dependencies. Some features need a Server Addon (a partner addon jar) as well. Any tier unlocks XP boosts, console use of most admin commands and raid slots in the Activity Director. The external MySQL store needs the SSS or Z tier, the campaign needs the Z tier, and cross-server raids need the Official (SSS) addon with an active license. Those rows are marked below.


Who counts as an admin

Most staff commands check for admin access when they run. A player has admin access when either of these is true:

  • they are an engine operator, or in a permission group named op, admin or administrator;
  • they hold any of these nodes:
*  op  operator  admin
hytale.*  hytale.op  hytale.operator  hytale.admin
endlessleveling.*  endlessleveling.op  endlessleveling.operator  endlessleveling.admin
  • or they hold any node that ends in .*, or that has op, operator, admin, administrator or owner as one of its parts (for example essentials.* or staff.admin).

Grant broad wildcards carefully: they make that player an Endless Leveling admin.

Commands marked (engine node) below also carry the engine's generated command permission, airijko.endlesslevelingcore.command.<path>. For example, /lvl reload carries airijko.endlesslevelingcore.command.lvl.reload. A staff member who holds endlessleveling.admin but not * also needs that node, or the engine blocks the command before EL-Core's own check runs. Granting airijko.endlesslevelingcore.command.* covers all of them.


Command roots

The main root is /lvl. Its aliases are /el, /sk, /eskills, /level and /endlessleveling. If another mod already owns /lvl, EL-Core takes the first free alias and logs a warning.

These shortcut roots are registered as well: /profile (/profiles), /ps, /races (/race), /classes (/class), /priest, /augments (/augment, /aug, /a), /dungeons (/dungeon), /raid, /join, /leave, /upcoming (/nextevent, /whatsnext), /xpstats (/xps), /bounty, /eqrreload and /party (only when PartyPro is installed).

/leave is also registered by Endless Rifts. When Rifts is installed, its /leave wins.

Player commands (/lvl prestige, /profile, /races, /classes, /augments reroll, /join, /leave, /lvl claim, and so on) need no permission and are covered in the gameplay guide.


Admin Commands: player data

All are /lvl <command>. [player] means you can leave the player out to target yourself.

CommandDescription
setlevel [player] <level>Set a player's level (engine node)
setprestige <prestige> · setprestige <player> <prestige> [profile]Set prestige (alias prestigeset) (engine node)
checkprofile <player>Inspect a player's profile (aliases profilecheck, checkprestige) (engine node)
resetlevel [player]Reset level on the active profile (engine node)
resetprestige [player]Reset prestige (alias prestigereset) (engine node)
resetall [player]Full profile reset (alias fullreset) (engine node)
resetallplayersSet every currently loaded player to level 1. Runs at once, with no confirm step. Offline players are not touched (engine node)
resetskillpoints [player]Refund all spent skill points (alias resetskills) (engine node)
skillpointssyncRecompute skill points for everyone (alias spsync) (engine node)
resetcooldownsIn-game only. Clear passive, augment and ability cooldowns for every player (aliases resetcds, cdreset) (engine node)
syncraceclass confirmRe-sync every player's race and class to the current definitions (engine node)
syncplayerraceclass <player> confirmSame, for one player (engine node)
addswapsall <type> <count>Give every profile of every player (online and offline) swaps. <type> is race, primary, secondary, class or all (engine node)
/races addswap [player] <count>Give race swaps (engine node)
/classes addswap [player] <slot> <count>Give class swaps for one class slot (engine node)
resetcampaign [player] · resetcampaignall confirmReset campaign progress (engine node)
resetraidcooldown [player] · resetraidcooldownall confirmClear the raid reward cooldown (engine node)
xp give <player> <amount> [profile]Grant XP
rank resync <player> · rank resyncall · rank status [player]Re-run the prestige rank sync (LuckPerms track)
build apply <id> [player] · build view <id> [player] · build info <id>Apply or inspect a saved build preset. apply and view need a Server Addon, and apply needs the target on a temp profile first (/lvl temp grant)
restoreprofile list <player> · restoreprofile restore <player> <file> [--slot=<n>] [--confirm] [--force] [--force-addon]Restore a deleted profile from the archive. The player must be online. It goes to the first empty slot unless --slot is given; an occupied slot needs --confirm
temp grant <player> <prestige> <level> <hours> · temp revoke <player> · temp deleteall · temp status <player>Temporary test profiles (see endlessleveling.temp)
inv status [player] · inv migrate <player> <server> · inv cancel <player> · inv restore <player> <which> · inv nodesInventory migration and restore (see endlessleveling.inventory)
sync set <player> <mode> · sync statusNetwork sync scope (see endlessleveling.sync)
copyprofile player <player> [server]Copy a player's profile from another network store (see endlessleveling.copyprofile). Players can run copyprofile from <server> on themselves while profile_copy.self_service is true (the default). Only active when a licensed Server Addon provides a source
/priest admin remove <player_uuid>Remove a player's Priest church (engine node)

Augment admin (/augments …)

All carry the engine node.

CommandDescription
addreroll <player> <type> <count> · addrerollall <type> <count>Grant rerolls
clearreroll <player> <type> · clearrerollall <type>Remove rerolls of one type
resetreroll <player> · resetrerollallReset rerolls to the earned amount
rerolls <player>Show a player's rerolls (aliases listrerolls, rerollinfo)
refresh [player]Refresh stored augment offers. Chosen augments are unchanged
reset [player] · resetallplayersClear chosen augments
resettier <tier> [player] · resetallplayerstier <tier>Clear one tier
resetcommon [player] · resetcommonallClear Common-tier picks
trimall [confirm]Trim excess augment slots and stale offers on every profile to match the current schedule. Without confirm it only previews

Admin Commands: server and content

CommandDescription
/lvl reloadReload configs, races, classes and mob levels (engine node)
/lvl overrides sync [apply] · /lvl overrides reset --confirmPreview or merge new keys into server-overrides.json, or restore it to defaults
/lvl import list · install|update|remove <name> [force|now] · info <name>Manage drop-in content packs in imports/ (aliases imports, dlc; remove is also uninstall). /lvl import alone opens the import panel
/lvl storage status · /lvl storage exportShow the active storage backend, export data (engine node)
/lvl backup now · list · info <set>Take or list suite backups (engine node)
/lvl restore player <player> <set> · restore all <set>Restore from a backup. Destructive, asks for a confirm token (engine node)
/lvl restore only <slices> player <player> <set|latest> · restore only <slices> all <set|latest>Restore only some data. <slices> from fates, augments, augments-missing, rerolls, ledger (engine node)
/lvl director status · plan · next [raid|clear] · skip · force <kind> [id] · release · sync [apply] · reset --confirmActivity Director: inspect, pin, skip or force the next scheduled activity
/lvl dmgtrack start [name] · stop · delete <id> · guildpay <id> [confirm]Run a damage leaderboard and pay its guilds
/lvl dpsmeter [player]Watch another player's DPS meter on your own HUD. off returns to your own; no argument toggles your meter
/xpstats admin · refresh · feedXP analytics panel and feed (engine node)
/dungeons setjoinpoint · clearjoinpointSet where players arrive when joining a dungeon
/lvl bounty place · remove · refreshManage bounty targets
/lvl lang import <locale|all>Copy a language file into lang/ for editing (operators and op/admin groups only). It overwrites an existing file in lang/ without a backup
/eqrreloadReload quests and rewards (aliases questsreload, eqreload) (engine node)
/lvl waves · /lvl startWave maker panel; start the Outlander Bridge waves

Raids (/raid …, also /lvl raid …)

join, time and netboard are open to players. Everything else is admin.

CommandDescription
call <raid-id> [local|network]Arm a raid now. From the console it needs a Server Addon
test <raid-id>Staff test run, no rewards
start · stop · abort · restart · status · skip [waves]Control the running raid
allowlist · testallow <player> · testdeny <player>Who may join staff test runs
setjoinpoint · clearjoinpointRaid arrival point
adminRaid scheduling panel
dailytime <HH:mm> · dailyraid <raid-id>Built-in daily raid time and raid. Refused while a partner Activity Director controls scheduling; edit activity/activity-director.json instead
sharding <true|false|auto|status>Split large raids into shards
bakeworld · sim · split · boardRaid world baking, simulation, shard split and board tools
createPoints to the raid creator on the website. Drop the downloaded zip in imports/ and run /lvl import install <name>

Shared dungeons and campaign

CommandDescription
/lvl <dungeon> reset · start · door <door> <action> · spawnboss <boss> · tp <zone> · vaultreset · questsStaff controls for a shared dungeon (mournhollow, evergreen, infernal-kingdom, upper-lower-city, eternal-realm, plus any pack ids)
/lvl <dungeon> collectibles status|reset|reroll|open|skip|add <n>|set <n>Collectible hunt controls (aliases hexcores, hunt)
/lvl campaign start [chapter] · cutscene <id> · act <act> · skirmish <key> · waypoints · statusCampaign staff tools
/lvl campaign enable|disable <chapter|all>Open or close campaign chapters. all writes campaign_enabled into server-overrides.json
/lvl quests zone pos1|pos2|box <id>|sphere <id> <radius>|remove <id>|listQuest zones
/lvl quests create · migrate <mode> · providers · credit <player> <key> [amount] · event trigger|clear|giver|giversQuest tools and manual credit. create points to the Quest Maker on the website

XP boosts (Server Addon only)

This subtree only exists when a Server Addon is installed.

CommandDescription
/lvl xp boost global start <mult> <minutes> [name] · stop · statusServer-wide XP boost
/lvl xp boost player start <player> <mult> <minutes> [name] · stop · statusOne player's boost
/lvl xp boost stacking [mode]How overlapping boosts combine

Debug and developer tools

/lvl debug …, /lvl spawn <boss> [level], /lvl telegraph …, /lvl augmenttest …, /lvl bossbar, /lvl applymodifiers and /lvl trim_instance <radius> <minY> are development tools. /lvl debug is gated only by its engine node, airijko.endlesslevelingcore.command.lvl.debug. trim_instance deletes chunks and blocks in the world you stand in. Keep these to developers.

Console use

These admin commands refuse the console unless a Server Addon is installed: setlevel, setprestige, resetlevel, resetprestige, resetall, resetallplayers, resetskillpoints, skillpointssync, syncraceclass, syncplayerraceclass, addswapsall, /races addswap, /classes addswap, resetcampaign, resetcampaignall, checkprofile, xp give, rank, the /augments admin commands, import, build, temp, storage, backup, restore, restoreprofile and xpstats refresh|feed. In-game admins are unaffected.

reload, overrides, director, inv, sync, copyprofile, resetraidcooldown, resetraidcooldownall, and the /raid and shared-dungeon commands accept the console. /raid call needs a Server Addon there. resetcooldowns, /raid admin, /priest admin remove and dungeon tp are in-game only.


Permissions

There are three kinds of node.

Explicit grant only

These match only the literal node. *, endlessleveling.*, op/admin groups and prefix wildcards do not grant them, so an admin never skips a cooldown by accident. Nobody has them by default.

NodeEffect
endlessleveling.dungeon.bypass_cooldownSkip the reward-claim cooldown in every dungeon
endlessleveling.dungeon.bypass_cooldown.<slug>Skip it in one dungeon. <slug> is the dungeon's world name without the instance- prefix and -* suffix. Nodes are registered from dungeons.json on every reload, so they tab-complete
endlessleveling.race.bypass_cooldownSkip the race-swap cooldown
endlessleveling.class.bypass_cooldownSkip the class-swap cooldown
endlessleveling.race.bypass_countUnlimited race swaps
endlessleveling.class.bypass_countUnlimited class swaps
endlessleveling.campaign.testerOpen the campaign for this player while campaign_enabled is false (still needs the Z Server Addon)

Staff tool nodes

Admins and wildcards already pass these. Grant the node to give a non-admin staff member just that tool. The root node grants every sub-node.

NodeGrants
endlessleveling.inventory · .migrate · .status · .restore/lvl inv
endlessleveling.temp · .grant · .revoke · .deleteall · .status/lvl temp
endlessleveling.sync · .set · .status/lvl sync
endlessleveling.copyprofile · .others/lvl copyprofile (.others acts on other players)

Normal nodes

An exact grant or admin access passes these.

NodeEffect
endlessleveling.profile.bypass_cooldownSkip the profile-creation cooldown
endlessleveling.dungeon.bypass_levelSkip the dungeon level requirement. The node name is set by level_requirement.bypass_permission in dungeons.json
endlessleveling.raid.bypass_prestigeSkip the raid minimum-prestige gate. Set by prestige_requirement.bypass_permission in raids/settings.json
class required_permissionA class can name a node in its definition. Only holders (or admins) can pick that class. Unlocking the class in Endless Tower also counts

Configuration & Tuning

All files live in mods/Airijko_EndlessLevelingCore/. Apply changes with /lvl reload.

Edit server-overrides.json, not the bundled files

Most bundled files are rewritten from the jar while their force_builtin_* flag in config.json is true (the default). config.json and leveling.json are re-synced every time they load, so a hand edit is reverted on the next /lvl reload as well as on restart. dungeons.json, world-settings/, races/, classes/, augments/ and passives/ are replaced when an update ships a newer bundled version. The old copy is archived to old/ first.

You have two supported options:

  1. server-overrides.json (recommended). It is created once and never overwritten. Its values are laid over the loaded config at runtime, so updates keep working. Only the keys already listed in the file are honoured; an unknown key is logged as a warning and ignored. After an update, run /lvl overrides sync to preview. /lvl overrides sync apply adds new keys, drops keys that no longer exist, refreshes the help text and saves a backup first. Your values are kept.
  2. Turn a flag off. Set force_builtin_config, force_builtin_leveling, force_builtin_dungeons and so on to false in config.json. Those flags survive rewrites. The file then keeps your values and only gains new keys on update. You also stop getting balance fixes for that file.

Level-cap and prestige keys in leveling.json, and everything in dungeons.json except reward_commands_enabled, are not in the overrides list. Changing them means option 2.

Never overwritten, so edit them directly: server-overrides.json, world-settings/disabled-worlds.json, everything under raids/, and activity/activity-director.json.

Main files

FileWhat it controlsKeys operators usually tune
config.jsonFeature switches and defaultsauto_update_imports (on), enable_races, enable_classes, default_race, choose_race_cooldown (3600 s), choose_class_cooldown (1800 s), default_race_swaps, default_class_swaps (-1 or ENDLESS = unlimited), starting_profiles (3), create_profile_cooldown (1800 s), leave_command_enabled, dungeons_page_enabled, quests_page_enabled, campaign_enabled (off), global_scaling, pvp_scaling, server_timezone, language.locale, deleted_profile_archive
leveling.jsonXP curve and capsplayer_level_cap (50), absolute_level_cap_value (250), baseSkillPoints (10), skillPointsPerLevel (4), prestige.level_cap_increase_per_prestige (10), prestige.base_xp_increase_per_prestige (20), death_xp_penalty, party_xp_share, Mob_Leveling
events.jsonConsole commands on level-up, prestige and schedulesprestige_level_up, player_level_up, prestige_rank_sync (LuckPerms track), scheduled (e.g. a weekend XP boost). Not overwritten unless force_builtin_events is true
dungeons.jsonPer-dungeon ruleslevel_requirement (tolerance 5, exempt_prestiged), entry_cooldown, progression.reset_hour, fragment_queue, matchmaking_defaults, per-dungeon xp_banking
world-settings/disabled-worlds.jsonWhere Endless runsDisabled_Worlds (Endless fully off), Blacklisted_Worlds (no XP, no mob levels), XP_Only_Blacklisted_Worlds (no XP, everything else on). Exact names or * globs
world-settings/*.jsonPer-world mob levels and XP rulesglobal.json plus one file per dungeon
raids/settings.jsonRules for every raidreward_cooldown_seconds (3600), max_raid_rewards_per_day (4), sharding.defaults, prestige_requirement
raids/network.jsonCross-server raidsenabled (off; needs the Official (SSS) addon and a license)
activity/activity-director.jsonWhen raids, events and gates runenabled, mode, window_start, window_hours, interval_minutes, composition. Per server: activity_director.enabled in server-overrides.json (auto, true, false)
weapons.jsonWeapon familiesMerged on update by default
imports/Drop-in content packsManaged with /lvl import
lang/<locale>.langYour own text overridesSeed one with /lvl lang import <locale>

Money rewards. Dungeon reward commands (xp_banking.reward_commands, for example eco give) can be switched off server-wide with reward_commands_enabled in server-overrides.json. Raid reward commands, set in each raid's rewards.json, have no such switch.

Imports on a busy server. Installing, updating or removing a pack applies live, but briefly freezes every world while assets re-register. Large installs and forced updates or removals are refused above imports.live_apply_max_online (10) players online; packs of 8 MiB or less still install. Removing a pack with players online hides it now and unloads it at the next restart. imports.live_apply_override skips the check. With auto_update_imports on, pack updates apply at boot.

Player data

Player data is SQLite at db/endlessleveling.db. Backups go to backups/suite/ and deleted profiles to backups/deleted-profiles/ (20 per player, kept 90 days). An external MySQL store needs the SSS or Z Server Addon.

If the data folder is read-only, EL-Core moves its data to a user-writable location and logs where.

JVM flags

FlagEffect
-Dendless.prefabLibrary.enabled=falseStop building the Endless pack in the prefab browser
-Dendless.quests.modGate.enabled=falseShow quests even when the mod they need is missing
-Dendless.ui.statIcons=falsePlain text instead of stat icons
-Dendlessleveling.disableCrossServerRaids=trueTurn off cross-server raids
-Dendlessleveling.disableRealmHeartbeat=true · -Dendlessleveling.disableRealmStatus=trueStop reporting this server's heartbeat and status to the realm list
-Del.raid_grant.enabled=falseGrant raid rewards in one go instead of spreading them over ticks (el.raid_grant.per_tick, default 6, and el.raid_grant.drip_ms, default 100, tune the spread)

Integrations

  • LuckPerms: no API hook. prestige_rank_sync in events.json and /lvl rank resync run lp user … promote / parent set console commands.
  • PlaceholderAPI: registers %el_*% and %endlessleveling_*%. Token list on the Placeholder API page.
  • PartyPro: parties, /party, party XP share.
  • EndlessLink: titles, Discord server-log relay, inbox, raid pre-reminders.
  • Endless Skills, Fates, Elite Mobs, Tower: detected at runtime, never required. Tower can unlock classes and, through tower_integration in config.json, take over reroll and swap rewards.
  • Economy: EL-Core uses no economy API. Money comes from reward console commands (see above).
  • OrbisGuard, SimpleClaims: Priest church placement respects their claims.