Migrating from EssentialsX
Already running EssentialsX (or a few other plugins)? You don't have to lose your players' data. uxmEssentials ships a built-in importer that reads your existing files and pulls the data across in one shot.
How It Works¶
The importer is a single admin command:
- It runs off the main thread, so your server never freezes during an import.
- It is idempotent — every record is written as an upsert keyed by identity. Balances are set, never added, so re-running an import can never double a player's money.
- It's safe to run again if something looked off, or if new data appeared.
To see which sources are available on your setup:
You need the uxmessentials.admin.import permission (operators have it by default).
Back up first, then dry-run
Always take a backup of your world and plugin data before importing, and
always run with --dry-run first. A dry run produces the exact same
per-record report as a real import — it just doesn't write anything — so you
can review precisely what would change before committing.
Enabling the Importer¶
The importer lives in the migration module, which is the only module that ships
disabled (it's a one-shot admin tool, not something you want running day to day).
- Open
plugins/uxmEssentials/modules/migration/config.conf. - Set
enabled = true. - Run
/uxmess reload migration.
When you're done migrating, set it back to enabled = false and reload again.
Import Sources¶
These are the sources uxmEssentials can read:
| Source | Brings across | Notes |
|---|---|---|
essentialsx |
Homes, balance (default currency), mail, warps, kits, jail/mute | Reads the EssentialsX file tree |
vault |
Balance | Live read of the running Vault economy |
playerpoints |
Balance | Live read of the running PlayerPoints plugin |
litebans |
Bans, IP-bans, mutes, warns | Reads the LiteBans database over JDBC |
decentholograms |
Holograms | Reads plugins/DecentHolograms/holograms/*.yml |
fancyholograms |
Holograms | Reads plugins/FancyHolograms/holograms.yml |
What EssentialsX brings over¶
From each player's userdata/<uuid>.yml, plus warps/, kits.yml and jail.yml:
- ✅ Homes
- ✅ Balance (default currency only)
- ✅ Warps
- ✅ Kits (written into the kit catalog)
- ✅ Jail & mute state
Not migrated: nicknames / display names, chat formatting, powertools, per-permission kit-delay overrides, GeoIP data, spawn-on-join, and non-native or multi-economy balances. EssentialsX has no player-vault data, so no vaults are produced.
Where does it look?
The EssentialsX path defaults to plugins/Essentials and can be changed with
source-path in modules/migration/config.conf. For LiteBans, an empty
jdbc-url will auto-detect the local LiteBans database.
Conflict Policy¶
When an incoming record collides with something already in uxmEssentials, the
on-conflict setting in modules/migration/config.conf decides what happens:
Keep what's already there. The safest choice — nothing existing is overwritten.
The imported value replaces the existing one.
Combine both: warps/homes are unioned by name, mail is de-duplicated, and for moderation records the longest-remaining expiry wins.
Balances have their own conservative guard, balance-policy (default
skip-if-present), so an import won't quietly stomp on money a player already has.
Imported homes and vaults go through the same rules as /sethome and /vault, so
your per-group quotas still apply to migrated data.
Recommended Checklist¶
- Back up your world folder and
plugins/directory. - Install uxmEssentials and start the server once so it generates its files.
- Enable the
migrationmodule (enabled = true→/uxmess reload migration). - Check available sources with
/uxmess import --list. - Dry-run first:
/uxmess import essentialsx --dry-runand review the report. - Set your
on-conflict/balance-policyif you want anything other than the safe defaults. - Import for real:
/uxmess import essentialsx. - Repeat for any other sources (
vault,litebans, ...). - Spot-check in-game:
/home,/balance,/warp list,/kit. - Disable the
migrationmodule again and remove the old plugin.
Next Steps¶
- 🔧 Installation — if you haven't installed the plugin yet
- 🧠 Core Concepts — how modules, config and permissions fit together
- 📟 Commands Overview — the full command set
- 🔑 Permission Reference — quotas and node families