Skip to content

Compatibility

PaperMC
PaperMC
Purpur
Purpur
Folia
Folia

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.