Paper · Purpur · Folia

Paper plugin generatorbuilt for the modern API.

Describe the plugin and Codella writes it against the Paper API — Adventure components, async chat, the modern scheduler, Folia-safe region threading — then compiles it to a .jar your server can load. The parts most hand-written plugins get wrong are the parts this targets first.

  • Folia ready
  • Adventure API
  • Async safe
paper ~ consolerunning
[18:07:12 INFO]: This server is running Paper version 1.21.4-128[18:07:15 INFO]: Loading plugins...[18:07:16 INFO]: [RegionGuard] Loading RegionGuard v2.1.0[18:07:17 INFO]: [RegionGuard] Adventure components enabled[18:07:17 INFO]: [RegionGuard] Folia detected — using region schedulers[18:07:18 INFO]: [RegionGuard] Hooked into Vault (EssentialsX)[18:07:19 INFO]: Done (7.221s)! For help, type "help"> 
Why target Paper

Paper is not just a faster Spigot. It is a bigger API.

If your server already runs Paper, generating against Spigot leaves capability on the table — and forces workarounds for things Paper simply exposes.
  1. Adventure components, not colour codes

    Text built with the Adventure API — hover events, click actions, gradients and translatable keys — instead of legacy section-sign strings that cannot express any of that and get mangled the moment a message passes through another plugin.

  2. Async chat and event handling

    Paper's asynchronous chat events handled properly, so chat formatting, filtering and Discord relays do not stall the main thread while they wait on something slow.

  3. Threading that respects the server

    Database and network work off the main thread, world and entity access back on it. On Folia, region and entity schedulers are used so a task runs on the thread that actually owns the chunk it is touching.

  4. APIs instead of NMS

    Paper exposes as real API much of what a Spigot plugin would reach for reflection to do. The generated code uses those APIs, which is the difference between a plugin that survives a Minecraft update and one that has to be rewritten after it.

  5. The right manifest, written for you

    plugin.yml or paper-plugin.yml depending on the target, with dependencies, load order, permission defaults and api-version filled in — including soft dependencies so the plugin still loads when an optional integration is absent.

  6. Performance treated as a requirement

    Chunk-safe lookups, cached configuration reads, bounded task frequencies and no per-tick allocation storms. A plugin that works but drops the server to 12 TPS has not solved the problem.

Target
Paper · Purpur · Folia
Text
Adventure API
Threading
Region-aware
Versions
1.16 → 1.21+
Folia

Region threading changes what a plugin is allowed to do.

Folia splits the world across threads that each own a set of regions. The assumption every Bukkit tutorial makes — that a scheduled task on the main thread can touch any entity anywhere — stops being true, and a plugin written on that assumption will throw or corrupt state under load. Generating for Folia means the schedulers and the thread-ownership rules are applied from the start rather than patched in afterwards.
paper-plugin.yml
# paper-plugin.yml — written for youname: RegionGuardversion: 2.1.0main: ai.codella.regionguard.RegionGuardapi-version: 1.21folia-supported: truedependencies:  server:    Vault:      load: BEFORE      required: false

The manifest declares Folia support, the API version, and dependency load order — including optional dependencies marked required: false so the plugin still loads on a server that does not run Vault.

None of this is something you have to know to ask for a plugin. It is something you should be able to read afterwards, which is why the full source comes with every build.

Portability

When you should generate for Spigot instead.

A Paper plugin that uses Paper APIs will not load on plain Spigot. If you are publishing the plugin, selling it, or handing it to someone whose server software you do not control, target Spigot — Paper and Purpur both load Spigot plugins unchanged, so the Spigot build is the one that runs everywhere. Generate against the Spigot API instead.
Try it

Describe your Paper plugin.

Say which Paper version you run and whether it is Folia. Everything else is a plain description of the behaviour you want.
Your prompt

A Paper 1.21 plugin that logs every player death to a MySQL table asynchronously, shows a /deaths GUI with the last 45 deaths paginated, and broadcasts a clickable Adventure component linking to the death location for staff only.

FAQ

Questions about generating Paper plugins

What does the Paper API give me that Spigot does not?

Asynchronous chat events, the Adventure component API for text and formatting instead of legacy colour codes, richer scheduler access, entity and world APIs that avoid NMS, and a long list of events Spigot never added. In practice it means a plugin can do more without reflection, and reflection is what breaks on every Minecraft update.

Will a Paper plugin run on Spigot?

Not if it uses Paper-only APIs — the server will fail to load the class and log a NoClassDefFoundError. If you need one .jar that runs on both, generate against Spigot instead: Paper loads Spigot plugins without any changes, so targeting Spigot is the portable option.

Does it support Folia?

Yes. Folia replaces the single main thread with per-region threads, which means the usual assumption that a scheduled task can touch any entity anywhere is no longer true. Generating for Folia uses the region, entity and global schedulers appropriately and keeps world access on the thread that owns that region.

What is a paper-plugin.yml and do I need one?

It is Paper's own plugin manifest, which supports features the Bukkit plugin.yml cannot express, such as the modern bootstrapper and dependency model. Codella writes whichever manifest matches the target you chose, so you do not have to decide — but you can read and edit it in the generated source.

Can it write async code safely?

That is one of the main reasons to target Paper. Long work — database queries, HTTP calls, file writes — is moved off the main thread, and anything that touches the world, entities or inventories is handed back to the correct thread before it runs. Getting this wrong is the single most common cause of a plugin freezing a server.

Which Minecraft versions are supported?

Paper builds from the older 1.16-era releases through the current 1.21 line. The version you pick sets the API surface the code is written against and the manifest's api-version, which matters because Paper's own APIs have moved considerably across those releases.

Related

Codella targets every major Bukkit fork from one workflow. Start from the overview, or from an idea if you know you want a plugin but not yet which one.

© 2026 Codella AI - All rights reserved.