EliteEssentials | Everything Your Server Needs and More!

Homes, warps, player warps, TPA, RTP, kits, economy, bans, mutes, warnings, admin UI, chat formatting, 500+ configurable messages, SQL storage, PlaceholderAPI, LuckPerms & HyperPerms. The most complete essentials mod for Hytale trusted by top servers.

File Details

EliteEssentials-2.0.0.jar

  • R
  • Mar 27, 2026
  • 8.33 MB
  • 314
  • Early Access

File Name

EliteEssentials-2.0.0.jar

Supported Versions

  • Early Access

2.0.0 - 2026-03-26

Thank you all for using EliteEssentials, we're really proud of how far this addon has come, and that's thanks to every one of you and the suggestions you've sent in. This release brings H2/SQL storage support; fresh installs will default to H2, and existing users can migrate from JSON to H2 or MySQL using /eemigration. There's also a brand new /admin UI, the Hytale UI system is not exactly my strong suit, so please go easy on me. If you have any feedback or suggestions, drop them in Discord or GitHub.

Huge thanks again to everyone using EliteEssentials!

Fixed

  • Hytale API compatibility — updated all calls to match Hytale's latest API changes:
    • PacketHandler.disconnect() now requires Message instead of String — wrapped all disconnect calls with Message.raw() across ban, tempban, IP ban, warn, kick, and Admin UI pages
    • PlayerSetupConnectEvent.setReason() now requires Message instead of String — updated ban/tempban/IP ban connection denial in ConnectListener
    • Player.sendInventory() removed from the API — removed all calls in kit claiming, starter kits, clear inventory, and kit selection GUI. Inventory changes are now applied directly without explicit sync
    • Migrated from deprecated Inventory class to new ECS-based InventoryComponent system — inventory sections (hotbar, storage, armor, utility, tools, backpack) are now accessed as individual ECS components via store.getComponent() instead of the monolithic player.getInventory(). Updated across clear inventory, kit claiming, kit creation, repair, starter kits, and kit selection GUI
    • manifest.json now specifies ServerVersion matching the build target instead of wildcard *, eliminating the "does not specify a target server version" warning on startup. Version is driven from gradle.properties for single-source-of-truth updates

Added

  • SQL database storage support — EliteEssentials can now persist all data to a SQL database instead of JSON files. Choose between three storage backends via config.json:
    • "json" (default) — existing JSON file storage, no changes to current behavior
    • "h2" — embedded H2 database, zero setup required. Database file stored in the plugin data folder. Great for single-server setups that want SQL performance and data integrity without installing external software
    • "mysql" — external MySQL/MariaDB database for multi-server networks. Player data is shared across all connected servers. Reads fresh data on player join to avoid stale caches
  • Storage provider abstraction — all services now depend on PlayerStorageProvider and GlobalStorageProvider interfaces instead of concrete storage classes. JSON and SQL backends implement these interfaces identically
  • Connection pooling — SQL storage uses HikariCP for efficient connection management. Pool size, idle connections, and timeout are all configurable
  • Automatic schema management — SQL tables and indexes are created automatically on first startup. Schema versioning via a metadata table supports incremental migrations in future updates
  • Async SQL writes — write operations run on a background thread to avoid blocking the server main thread. In-memory cache for online players matches existing JSON behavior
  • JSON-to-SQL migration command/eemigration sql [force] reads all existing JSON data (players, warps, spawns, first-join spawn) and writes it into the configured SQL database
    • Reports progress during migration (records processed)
    • Continues on individual record failures, logging the specific UUID/identifier
    • Reports summary on completion (total migrated, failed, elapsed time)
    • Refuses to run when storageType is "json"
    • Checks if target tables are empty before migrating; use force to overwrite
  • Configurable table prefix — all SQL table names use a configurable prefix (default ee_) to avoid conflicts when sharing a database with other plugins
  • Graceful shutdown — all pending SQL writes are flushed before the connection pool closes. Pool waits up to 30 seconds for active queries to complete
  • Multi-server freshness — when using MySQL, player data is loaded fresh from the database on join rather than relying on stale cache. Data is flushed to DB and evicted from cache on disconnect
  • Post-migration cleanup/eemigration cleanup moves migrated JSON files (players/, warps.json, spawn.json, firstjoinspawn.json, player_index.json) into a backup/ subfolder. Only available when storageType is not "json". Keeps the data folder clean after switching to SQL
  • Smart storage defaults for new installs — fresh installs (no existing data files) now default to "h2" storage for better out-of-the-box performance. Existing installs upgrading to 2.0.0 keep "json" unless manually changed. If config.json is missing but JSON data files exist (e.g. player_index.json, players/, warps.json, spawn.json), the plugin stays on "json" to protect existing data

Configuration

  • New storage section in config.json:
  "storage": {
    "storageType": "json",
    "mysql": {
      "host": "localhost",
      "port": 3306,
      "database": "eliteessentials",
      "username": "root",
      "password": "",
      "tablePrefix": "ee_",
      "connectionPool": {
        "maximumPoolSize": 10,
        "minimumIdle": 2,
        "connectionTimeout": 30000
      }
    }
  }
  • storageType options: "json" (default, file-based), "h2" (embedded SQL database, stored in plugin folder), "mysql" (remote MySQL/MariaDB server)
  • The mysql section is only used when storageType is "mysql"
  • Unrecognized storageType values log an error and fall back to "json"
  • Schema migration failures log an error and fall back to "json" to prevent data corruption