Compatibility¶



Ember Essentials is one jar, and that one jar covers the whole range:
| Jar | Runs on | Java |
|---|---|---|
EmberEssentials-1.0.0.jar |
Paper, Purpur, Folia 1.21.1 - 26.2 | 21 or newer |
There is no separate build to choose between. The jar is compiled against the 1.21.1 API and emits Java 21 bytecode: a Java 25 server runs Java 21 bytecode happily, and building against the oldest supported API means the compiler refuses anything newer than that API can provide. The range is enforced at compile time rather than promised in a description.
Minecraft moved its Java floor once inside this range, at the version-numbering change: 1.21.11 is the last release that runs on Java 21, and 26.1 is the first that requires Java 25. The same file covers both sides of it.
Tested¶
Every version below was booted with this jar and then had all 243 commands run against it, which is what actually catches a method that exists in one API version and not another.
| Platform | Version | Java | Result |
|---|---|---|---|
| Paper | 1.21.1 | 21 | 243/243 commands clean, no linkage errors |
| Paper | 1.21.11 | 21 | 243/243 commands clean, no linkage errors |
| Paper | 26.2 | 25 | 243/243 commands clean, no linkage errors |
Everything else on this page is optional and detected at runtime - the plugin runs with none of it installed.
Folia¶
Supported and tested on Folia 26.2. Every scheduled task uses the region
schedulers (getGlobalRegionScheduler, getAsyncScheduler, and the per-entity
scheduler) rather than the legacy Bukkit scheduler.
Folia does not hand out scoreboards - a scoreboard is global state, and Folia runs regions in parallel, so it refuses rather than pretending. Two things follow from that:
- The sidebar still works. It is drawn with packets instead of a scoreboard objective (through FastBoard, an MIT library the server downloads on first start), so Java and Bedrock players see the same sidebar as on Paper.
- Rank order in the tab list is off. Ordering the list means giving each player a scoreboard team, which Folia will not do. The tab list still draws, with its header, footer, animation and name formatting; it is simply in the server's own order.
The plugin notices this once at startup, logs one line saying so, and carries on. Nothing else is affected.
Purpur¶
Tested on Purpur 26.2, running alongside the rest of the Ember suite. Purpur is a Paper fork, so there is nothing to configure.
Vault¶
Detected, and re-detected. The economy binding refreshes whenever any plugin registers or unregisters an economy service, plus twice more after startup.
That sounds like belt and braces because it is: the usual reason an essentials plugin "does not work with Vault" is that it looked once, at the wrong moment in the load order, and never looked again.
If nothing else provides an economy, Ember Essentials can register its own -
set economy.provide-vault: auto.
LuckPerms¶
Not required, but everything that gates on a rank gates on a permission, so it works with LuckPerms without either plugin knowing about the other. Prefixes and suffixes are read through Vault's chat service when one is present.
PlaceholderAPI¶
Around 45 placeholders under %emberessentials_...%, covering balances, kits,
homes, claims, warps, jail state, rank, perks, AFK and vanish state, god mode,
flight, playtime, world, teleport cooldowns and watchdog alerts. The full list
is on the reference page.
The expansion is registered only when PlaceholderAPI is present. The class that touches its API is kept separate so it is never loaded otherwise.
WorldGuard¶
Detected reflectively. When present, region flags are respected where they overlap with what this plugin does.
Geyser and Floodgate: Bedrock players¶
Bedrock chat has no click events and no hover events. Geyser drops both. A button sent as-is arrives as its label and does nothing when tapped, which is worse than sending no button at all - the player can see something telling them to click it, and it does not work.
So every message this plugin sends goes out per player. A Bedrock player gets the tree rewritten: anything carrying a click event is shown as the command it would have run, keeping its colour, and every hover is dropped.
| Java sees | Bedrock sees |
|---|---|
[ Click to enter ] |
/giveaway enter |
[ /spawn ] |
/spawn |
[ Open the event panel ] |
/event menu |
| An item preview on hover | The item name, as text |
Both know what to do, and neither is lied to.
Detection uses Floodgate when it is installed, which is exact. Without it, the fallback is Geyser's convention of handing Bedrock players a UUID whose whole first half is zero - no Mojang account looks like that. The answer is cached per player.
Inventory menus are unaffected. /emberadmin, /moderation, the kit
screens, the event panel and the leaderboards are real inventories, and those
work on Bedrock exactly as they do on Java.
ItemsAdder¶
Detected reflectively. When present, custom item icons can be used in chat - typing an item name shows its actual icon rather than its name.
EssentialsX¶
Running both is possible, but only with overlap switched off. They
register many of the same commands. Every Ember feature has an enabled
switch that removes its commands from the server, so the two can share a
server if one of them owns each command name - our claims and EssentialsX's
homes, say. With both left on their defaults they fight over the names.
Ember Essentials shares no code with EssentialsX: no net.ess3 or
com.earth2me imports, no essentials.* permission nodes, and none of its
config keys. It is a clean-room implementation, and its command names are the
conventional ones that every plugin of this kind uses.
Storage¶
Files by default: nothing to set up and nothing to go wrong at three in the morning, saved when the thing they describe changes rather than only on shutdown. One setting switches a network to MySQL or MariaDB so homes, warps, mail, money, bans, player warps and cosmetics purchases are one set of data on every server. See Proxy networks.