All Classes and Interfaces
Class
Description
JDBC-backed
StorageBackend shared by all three dialects.Which native upsert conflict clause the dialect speaks.
Write-back scheduling for the lazy cache: an async repeating timer at the configured
database.autosave-interval (default 3m) that calls CachedStorage.flush() and then
CachedStorage.evictIdle() (releasing owners who are offline and fully flushed), plus the
per-player write-back a few seconds after a quit (AutosaveService.flushQuitterLater(java.util.UUID)).Migrates vaults from an AxVaults installation into EnhancedEchest's storage.
Outcome of a migration run.
Reads an AxVaults (Artillex-Studios) database directly and decodes its vault contents into
Bukkit
ItemStack arrays, ready to be re-encoded into EnhancedEchest's own storage.A single AxVaults vault as decoded for migration.
Takes scheduled, self-pruning snapshots of the database.
Lazy-loading write-back cache over the SQL backend, and the
EnderChestStorage the rest of
the plugin sees.A bounded, batched audit pipeline designed for busy servers.
Admin chest management: /ee add|resize|delete <player> ...
Builds the /ec list management dialogs using Paper's (experimental) Dialog API.
The owner/permission context a per-chest detail dialog operates in.
Whether an ender chest is a permanent ("normal") chest, a transient overflow ("temp") chest, or a
permission-granted chest.
Marker holder for the simple 27-slot
/eclist inventory menu — the alternative to the Dialog-API
list, selected with enderchest.list-menu: inventory.Builds the simple
/eclist inventory menu — the alternative to ChestDialogs' Dialog-API
list, chosen with enderchest.list-menu: inventory.Drives the simple 27-slot
/eclist inventory menu (ChestListHolder).Decides what to open for
/ec, /eclist, right-click and the admin /ee
view, and orchestrates the management dialogs.Owns the shared-live-inventory registry and the dupe-safety contract for every open chest: this is
the single closed class that mutates the
ChestSessionManager.sessions map, and it does so only on the
ChestSessionManager.onGlobal(java.lang.Runnable) bookkeeping thread.A public (owner, index) reference for multi-chest exclusive operations (see
ChestSessionManager.runExclusiveAcross(java.util.List<com.enhancedechest.service.ChestSessionManager.ChestRef>, java.util.function.Supplier<T>)).Item-moving chest operations: shrink-spill, delete (spill or force), bulk delete, and the reverse
move that pulls a temp chest back into a newly granted chest (
ChestSpillService.reclaimTempInto(java.util.UUID, int)).Lightweight description of one of a player's ender chests, used to build the
/ec list management dialog and to decide which chest /ec opens.
/ee transfer <from> <to> <index|name|all> [override|temp] — moves a player's ender chests onto
another account when someone switches accounts.Moves a player's ender chests onto another account (
/ee transfer) for the "I switched account"
case.What to do when the destination already holds items in chests this transfer would replace.
Central registry for all YAML key renames across plugin versions.
Encodes and decodes a 54-slot inventory for DB storage.
Coordination contract that makes the lazy write-back cache safe to run on several servers sharing
one database (
cross-server.enabled).Thrown by
CrossServerCoordinator.acquireOwner(java.util.UUID) when an owner's lock could not be obtained
within the acquire timeout — typically because the player is still online on another server, or
that server is still writing their data back.Migrates ender chests from a CustomEnderChest (maiminhdung) installation into EnhancedEchest's
storage.
Outcome of a migration run.
Reads a CustomEnderChest (maiminhdung) installation's
storage.type: yml player files and
decodes them into Bukkit ItemStack arrays, ready to be re-encoded into EnhancedEchest's own
storage.One player's CustomEnderChest data as decoded for migration.
Copies all EnhancedEchest data from an old database backend into the plugin's active backend
(
/ee import).Outcome of an import run: how many rows landed in the destination.
Shared daemon thread-pool for all asynchronous storage work (
EnhancedEchest-db).Parses and formats human-friendly durations.
One unit component of a formatted duration: a whole
count of the unit named by
unit (one of year month week day hour minute second).Triggers the vanilla ender chest open/close lid animation and sound.
A single ender chest belonging to a player, as loaded from storage for opening.
Marker holder attached to every custom enderchest Inventory.
All methods execute synchronously on the calling thread.
Lightweight reference to an expired chest, returned by
EnderChestStorage.findExpired(long).One known player for the in-memory name index: their UUID, last recorded name, and last-seen time.
One
enderchests row read verbatim from a source database for EnderChestStorage.importRows(java.util.List<com.enhancedechest.storage.EnderChestStorage.RawPlayerRow>, java.util.List<com.enhancedechest.storage.EnderChestStorage.RawChestRow>).One
players row read verbatim from a source database for EnderChestStorage.importRows(java.util.List<com.enhancedechest.storage.EnderChestStorage.RawPlayerRow>, java.util.List<com.enhancedechest.storage.EnderChestStorage.RawChestRow>).Adventure
Translator backing EnhancedEchest's per-viewer
localization.Periodically scans for expired chests and disposes of them.
FastStats-backed
Telemetry: one BukkitContext carrying custom metrics and error
tracking.Catalog of pickable chest icons, backed by the server's
Material registry, plus helpers to
render a chosen icon as an Adventure sprite object component — the icon shown inside
Dialog action buttons (since 1.21.9 / Adventure 4.25.0, no resource pack required).One pickable icon: a material with its precomputed display name, reusable sprite component, and
a translatable name component.
/enhancedechest import — opens the DB→DB import dialog so an admin can copy all EnhancedEchest
data from an old database backend into the plugin's active backend.Auto-migrates un-migrated players on join when migration mode is ON.
Loads the plugin's language files and exposes them as Adventure
Components./enhancedechest migrate axvaults [all|<player>] — imports vaults from an AxVaults
database into EnhancedEchest./enhancedechest migrate customenderchest [all|<player>] — imports ender chests from a
CustomEnderChest installation into EnhancedEchest./enhancedechest migrate playervaultsx [all|<player>] — imports vaults from a PlayerVaultsX
installation into EnhancedEchest./enhancedechest migrate vanilla [all|<player>] — migrates online players' vanilla
ender chests into their EnhancedEchest chest #1.Orchestrates migration of vanilla enderchest data into the plugin's storage.
Grants and revokes ender chests based on a player's permissions.
Both permission-derived targets, resolved together: the PERM-chest target as
size → count
and the base-chest size override (the largest valid default_size permission held, or
0 for none).In-memory index of every player name the plugin has ever recorded (the
players.username
column — see PlayerSettingsCache#markSeenAsync), used to answer offline-player
tab-completion and name resolution from memory instead of hitting the DB on every keystroke.One recorded player: their current known name, UUID, and the epoch-ms they were last seen
(
0 when never recorded — a row that predates last-online tracking).Backstop detach when the player disconnects while the custom GUI is open.
Resolves a player name to a UUID for admin commands, working for offline players.
Per-player state, persisted one row per player in
players.Write-through read cache of per-player settings, keyed by UUID.
Drives the lifecycle of per-player transient state around join/quit:
Join: pin the player in the lazy storage cache (never evicted while online), then
preload their settings — the preload's
loadSettings call is also what materializes
the player's chest rows into the cache, so it doubles as the join prefetch and their first
chest open touches no database.
Quit: stamp last_online, evict the settings cache entry and the sort-cooldown timestamp, unpin the
storage cache entry, and schedule the delayed write-back + eviction of their rows
(AutosaveService.flushQuitterLater(java.util.UUID)) — so a leaver's changes reach the database within
seconds and their memory is freed.Migrates vaults from a PlayerVaultsX installation into EnhancedEchest's storage.
Outcome of a migration run.
Reads a PlayerVaultsX installation's flat-file vault data and decodes it into Bukkit
ItemStack arrays, ready to be re-encoded into EnhancedEchest's own storage.A single PlayerVaultsX vault as decoded for migration.
TLS mode for a remote database connection, mirroring the drivers' own
sslMode/sslmode
levels.How the
/eclist chest list is rendered.Redis implementation of
CrossServerCoordinator: one lock key per owner
(<prefix>lock:<uuid> holding this server's id, TTL-protected and heartbeat-extended) plus
one pub/sub channel (<prefix>events) used to hand owners over quickly.Task scheduler built directly on Paper's own region-aware scheduler API
(
io.papermc.paper.threadedregions.scheduler.*).Opens an EnhancedEchest database of any supported dialect read-only and reads its
players and enderchests tables (under the active install's
database.table-prefix) verbatim, for the /ee import DB→DB copy.The two tables read from the source, kept in memory (data is modest — see the import plan).
Connection details for the source database of a
/ee import DB→DB conversion, as filled
in by the import dialog.The SQL half of the lazy-load + write-back cache model: the narrow contract
CachedStorage
needs from a database backend.Primary key of one
enderchests row, used to flush a deletion.Primary key + kind of one expired
enderchests row, returned by StorageBackend.findExpired(long).One player's full cache-miss load: their
enderchests rows plus their (nullable) players row.Thin async wrapper over
EnderChestStorage: every method dispatches a single synchronous
storage call onto the shared DbExecutor.Plugin-facing telemetry facade.
Reminds a player on join, when they still have items sitting in one or more temporary chests, to
collect them before those chests expire (config
temp-enderchest.join-notify, default on).Tells a player where their temporary-chest items went when
ChestSpillService.reclaimTempInto(java.util.UUID, int) moved them into a newly granted chest
(temp-enderchest.reclaim-notify, default on).Generic YAML migrator that runs on startup for every config/language file.
A key rename for one specific version upgrade.