Guide
How to update a plugin to a new Minecraft version
Updated October 18, 2026
When your server moves to a new Minecraft version, many plugins keep working without changes, because the Bukkit API is stable. Others stop loading or break in small ways. If the author has not updated a plugin and you have its source, you can update it yourself: here is what changes and in which order.
Describe it as it should work on the new version.
Generate this with CodexeStep by step
1.Try the old .jar first
Put it on a test server of the new version and read the console. If it loads and works, you may not need to change anything.
2.Change the API dependency
In
pom.xmlorbuild.gradle, setpaper-apiorspigot-apito the new version.3.Update api-version and Java
Set
api-versioninplugin.yml(for example'1.21') and compile for the Java the new version needs: Java 17 before 1.20.5, Java 21 from 1.20.5, Java 25 for 26.x.4.Fix what no longer compiles
Build and go through the errors: renamed materials, removed methods, changed event classes. The compiler lists them with file and line.
5.Update dependencies
Plugins your plugin uses (Vault, PlaceholderAPI, ProtocolLib, WorldGuard) need versions that support the new Minecraft version too, both in the build file and on the server.
6.Test on the new version
Load it on a server of the new version with the same plugins, and try every command and feature, not only startup.
What usually breaks
- Material and enum names: the 1.13 update renamed most items and blocks; later versions add, rename or remove some. Code that uses old names or numeric ids fails.
- Deprecated methods removed: methods marked deprecated for several versions eventually disappear.
- Item data: from 1.20.5, item NBT was replaced by data components. Plugins that edit item NBT directly need a rewrite of that part; the normal
ItemMetaAPI keeps working. - NMS and reflection: code that uses internal server classes breaks on almost every version. Replace it with the API where possible, or with a library such as ProtocolLib.
- Library versions: shaded libraries built for an older Java can fail on the new one.
Updating across many versions
Going from 1.8 or 1.12 to 1.21 is closer to a rewrite of the parts that touch items, blocks and particles than to an update. Do it in one go against the new API, not version by version, and expect the config files to need new material names too.
If the plugin must support several versions at once, compile against the oldest one you support and avoid API added later, or use separate builds per version.
With Codexe
On Pro and above you can import the plugin's source as a ZIP and ask, for example, "This is my Paper 1.20.4 plugin. Update it to Paper 1.21.4". Codexe reads the Minecraft version from the build file, builds with the Java that version needs, and repairs compile errors using the real signatures of the API it builds against. For a plugin you made on Codexe, ask for the new version in the project chat.
Compiling proves the plugin builds on the new API. Then try it on a test server, because behaviour changes between versions do not show up as compile errors.
Questions
Can I update a plugin without its source code?
Not reliably. Decompiling a .jar gives code that is hard to maintain and may break the author's license. Look for an updated version or a maintained fork first.
Does a 1.21.1 plugin work on 1.21.4?
Often yes, within the same major version, unless it uses NMS or API that changed. Test it before you rely on it.
Why does the server say "Unsupported API version"?
That is the opposite case: the plugin targets a newer API than the server. Build it for your server's version or update the server.
Rebuild a plugin for your version
This prompt opens ready to send:
“A Paper 1.21.4 version of my Spigot 1.12.2 plugin TreeFeller: breaking the bottom log of a tree with an axe breaks the whole tree, costs durability per log, works for every 1.21 wood type including cherry and mangrove, toggle with /treefeller, settings in config.yml.”
Generate this with Codexe