File Details
EliteEssentials-2.0.3.jar
- R
- Mar 31, 2026
- 8.38 MB
- 520
- Early Access
File Name
EliteEssentials-2.0.3.jar
Supported Versions
- Early Access
2.0.3 - 2026-03-29
Added
- Player Warps (
/pwarp) -- a full player warp system where players can create, share, and teleport to each other's warp locations. Disabled by default; enable withplayerWarps.enabled: truein config.json/pwarpshows a help menu with all subcommands/pwarp guiopens an interactive GUI with pagination, showing warp name, owner, description, and visibility/pwarp create <public|private> <name> [description]creates a warp at the player's current location/pwarp delete <name>deletes a warp (owner only, or admin withpwarp.admin.delete)/pwarp <name>teleports to a player warp with warmup, cooldown, and cost support/pwarp listshows the player's own warps with count and limit/pwarp info <name>shows warp details (owner, visibility, description, coordinates)/pwarp setdesc <name> <description>updates a warp's description/pwarp setloc <name>moves a warp to the player's current position/pwarp toggle <name>switches a warp between public and private visibility- Public warps are visible and usable by all players; private warps are only visible to the owner
- GUI includes delete button for owned warps with double-click confirmation (same pattern as server warps)
- Full storage backend support: JSON (
player_warps.json), H2, and MySQL. Follows the configuredstorage.storageTypeautomatically. SQL schema is added via migration (v3) - Full LuckPerms/HyperPerms integration: per-group warp limits (
pwarp.limit.<number>,pwarp.limit.unlimited), cooldown/warmup bypass and overrides, cost bypass - Config section:
playerWarpswithenabled(default true),blacklistedWorlds(wildcard support),cooldownSeconds,warmupSeconds,maxWarps,groupLimits,cost(teleport),createCost(creation) - 25+ configurable messages in
messages.json(all prefixed withpwarporgui.PlayerWarp) - Warp names validated: alphanumeric with underscore/dash, max 32 chars. Descriptions max 100 chars
- Reload support via
/eliteessentials reload
- Per-rank kit cooldowns — kit cooldowns can now be overridden per rank using LuckPerms or HyperPerms permissions. Assign
eliteessentials.command.kit.cooldown.<kitname>.<seconds>to a group to give that rank a custom cooldown for a specific kit (e.g.eliteessentials.command.kit.cooldown.daily.3600for a 1-hour cooldown on the "daily" kit). The existingeliteessentials.command.kit.bypass.cooldownpermission still works to skip cooldowns entirely. Without a permission override, the kit's default cooldown fromkits.jsonis used. Follows the same pattern as/heal,/repair,/rtp, and other commands that already support per-rank cooldowns - Kit inventory space check — kits can no longer be claimed when the player's inventory is full. If there aren't enough empty slots in hotbar/storage to hold the kit items (accounting for items that fit in their target slots), the claim is blocked with a configurable message (
kitInventoryFull). Replace-inventory kits are exempt since they clear the inventory first. Previously, overflow items were silently dropped on the ground - Player Warps in
/eeadminPlayer Data tab — the Player Data tab now shows a "Player Warps" section listing all warps created by the looked-up player. Each entry displays the warp name, visibility ([Public]/[OP]), and coordinates with TP and DEL buttons matching the existing Homes layout. Warp count is also shown in the summary panel. Deletions are logged to the activity log. Gated by the existingeliteessentials.admin.playerdatapermission - Quick-remove buttons in
/eeadminBans, Mutes, and Warnings tabs — active bans, active mutes, and warning entries now display an <input disabled="disabled" type="checkbox" checked="checked" /> button next to each row. Clicking it immediately unbans, unmutes, or removes that individual warning without needing to type the player name into the unban/unmute input field. The ban list handles both permanent and temp bans. Warning removal is per-entry (not clear-all), so admins can surgically remove a single warning from a player's history. All removals are logged to the activity log
Fixed
/freezenot actually freezing players — freeze only set movement speeds to 0 once (on command execution or player join), but the Hytale engine resetsMovementSettingson respawn, game mode changes, and other events, allowing frozen players to move again almost immediately. Added a scheduled enforcement loop inFreezeServicethat re-applies zero movement settings to all frozen online players every 500ms. Also centralized the movement manipulation intoapplyFreeze()/removeFreeze()static helpers to eliminate duplicated logic across the command, connect listener, and admin UI/eeadminfreeze button not applying movement changes — the freeze/unfreeze buttons in both the Admin Dashboard and Admin Players pages only toggled the data state inFreezeServicewithout actually applying or removing the movement speed changes on the target player. Freeze from the UI would only take effect after the player rejoined, and unfreeze would never restore movement. Both pages now dispatchapplyFreeze()/removeFreeze()on the target's world thread for immediate effect- Sleep percentage not skipping night —
SleepService.triggerSlumber()was settingWorldSomnolencetoWorldSlumberstate and promoting sleeping players toSlumber, but the engine'sUpdateWorldSlumberSystemhas additional validation (likely checking all players are in beds) that silently cancelled the slumber when only a percentage of players were sleeping. The "Skipping to morning" message would appear but time never advanced. Fixed by usingtimeResource.setGameTime()to jump directly to morning instead of relying on the engine's slumber pipeline. The 2.0.2 crash fromsetGameTime()was caused by also manually manipulatingPlayerSomnolence/MorningWakeUpstate; the new approach only sets the time and lets the engine handle player wake-up naturally. Also added debug logging at the counting and trigger points for easier diagnosis - Offline player lookup requiring exact name — all commands that target offline players (
/ban,/tempban,/mute,/warn,/warnings,/clearwarnings,/freeze,/ipban,/ignore,/unignore,/mail send,/seen,/playerinfo,/playtime,/joindate,/eco,/wallet, and the admin UI pages) required the exact full player name to be typed. Online player lookup uses starts-with-ignore-case matching (typing "eli" finds "EliteScouter"), but the offline fallback did a strict exact match against the name index, so partial names would fail with "player never joined." BothPlayerFileStorageandSqlPlayerStoragenow fall back to starts-with partial matching when no exact match is found, giving offline lookups the same fuzzy behavior as online ones - Admin Dashboard ban/tempban/ipban/mute/warn/clearwarns/warnlookup not working for offline players — the main Admin Dashboard page (
/eeadmin) only used online player lookup (findPlayer()) for all ban, temp ban, IP ban, mute, warn, clear warnings, and warning lookup actions, showing "Player is not online" for any offline player. Added offline fallback viaPlayerStorageProvider.getUuidByName()to all seven actions so they now work for any player who has joined before. IP ban uses the player's last known IP from their stored IP history when offline. The dedicated Admin Bans/Mutes/Warns sub-pages already had offline support - Warmup poller silent death - a single uncaught exception in
WarmupService.pollWarmups()could permanently kill the warmup poller thread, causing all warmup-based teleports (/home,/warp,/tpa,/spawn,/back,/rtp) to silently stop working for every player until server restart. Admin teleports with 0 warmup were unaffected, masking the issue. Fixed by adding two-layer try/catch protection inpollWarmups()so one bad warmup entry cannot kill processing for other players, fixingensurePollerRunning()to checkisDone()in addition toisCancelled()so crashed pollers are properly detected and restarted, and adding a 60-second maximum lifetime safety net to clear stuck warmup entries that were never completed. Thanks to Dimotai for identifying and fixing this (PR #58)