Running a server
Folia
The same jar. No separate build, no separate config, nothing to switch on.
On Folia the startup banner's Scheduling line reads Folia regions instead of
one server thread. /chorus debug says the same.
What Folia changes#
Folia has no single server thread. The world is split into regions that tick in parallel, a player belongs to whichever region they are standing in, and reaching them from anywhere else is a crash rather than a race.
Every job therefore goes to the thread that is allowed to touch what it is about to touch:
| The job | Where it runs |
|---|---|
Anything done to a player — /heal, /gamemode, /give, /sudo, /tempfly |
That player's own thread, wherever they are standing |
Anything done at a place — /smite, /spawnmob, a shop's floating item |
The region that owns those blocks |
/sweep and the auto-sweep |
Chunk by chunk, each on its own region, with the totals added up as the answers come back |
| Teleports | Paper's own asynchronous teleport, which moves the player between regions properly |
| Pruning, timers, the update check, anything belonging to no one place | The global region |
Because the sweep is spread over regions rather than run in one pass, it also uses as many threads as the server has regions. On an ordinary server that changes nothing; on a busy Folia server it is the difference between a hitch and none.
Cooldowns are held in a concurrent map for the same reason — two players in two regions running a priced command reach it at the same moment.
Vault on Folia#
Folia has no Vault, and that is not a problem here.
ChorusCore keeps its own balances, so /pay, /balance, prices on commands and chest shops
all work with nothing else installed. economy.provider: auto finds no Vault, falls back to
the built-in ledger, and says so on the startup banner.
Set provider: self if you want to be explicit about it.
The one thing you lose is other plugins sharing the same money, which needs Vault to be possible at all.
PlaceholderAPI on Folia#
Works if you have a build of PlaceholderAPI that runs on Folia. If not, the expansion simply does not register and the banner says PlaceholderAPI is not installed.
What to test on a new Folia server#
The failure mode on Folia is not a wrong answer, it is a crash from the wrong thread. Anything that reaches across regions is worth a look, so test with a second player standing thousands of blocks away:
/heal <them> /feed <them> /god <them> /fly <them>
/gamemode creative <them> /give <them> diamond
/exp give <them> 100 /tempfly <them> 5
/sudo <them> help /invsee <them>
/restore <them> /smite <them>
/spawnmob cow 1 <them>
/sweep drops (no radius — the whole world)Then fly away from a chest shop and come back, to see the floating item go and return.
If something is wrong you will get an exception in the console naming a region, not a wrong result.
How it works underneath#
Folia's scheduler classes do not exist in the 1.18.2 API this jar is compiled against, so they are reached by reflection. Every signature is listed in one place and checked at build time against the newest Paper API, which does ship those classes — a method that was renamed fails the build rather than a server.
Detection looks for a class that only Folia has. If this is Folia and its schedulers cannot be reached, the plugin refuses to start rather than falling back to the Bukkit scheduler: under Folia every one of that scheduler's methods throws, so carrying on would turn one wrong signature into a crash somewhere else entirely, with nothing pointing back at the cause.
What is not different#
Everything else. The config files, the commands, the permissions, the database and the messages are identical. There is no Folia section in any config file and nothing to turn on.
