hyperdefined

hyperdefined

Paper's Hard Fork Effects

14 December 2024 - 4 minutes

Recently, PaperMC has started their hard fork process. With this new change, plugins that I maintain are changing and here's what happening.

Recently, PaperMC has started their hard fork process. With this new change, plugins that I maintain are changing and here’s what happening.


tl;dr

I will be dropping Spigot support for my plugins. I will be discontinuing most of my older plugins. This means any plugins I work on still will use Paper and not work on Spigot anymore and only support the latest versions.

You can read Paper’s announcement here.

What is Paper?

PaperMC is a fork of Spigot, Minecraft server software that supports plugins. Paper adds their own patches to Spigot, which vary. Most of these patches are fixes, improvements to API, or performance improvements. However, Paper has always sticked to supporting Spigot plugins. That makes Paper a drop in replacement, since it still supports Spigot plugins.

What’s a fork?

A fork is a copy of a project with changes. Let’s say I have a project open source. Someone can fork the repository and make their own changes. This copy is a fork. PaperMC is a fork of SpigotMC, which is a fork of Bukkit. Confusing? Yeah, a fork of a fork of a fork…

Why not add these changes into Spigot?

Everyone asks this question, and it mostly boils down to Spigot not accepting contributions mostly. Most Paper devs have contributed to Spigot. However, Paper was created for this reason. I’m not sure if this is 100% accurate, so correct me.

What’s a hard fork?

A hard fork means you take a snapshot of the upstream project (in this case Spigot is the upstream source), and stop pulling updates from there. Any changes in Spigot get pulled into Paper eventually. However, a hard fork stops this upstream pulling and does not pull changes.

Paper’s development has slowed down due to the API compatibility Spigot has. Spigot focuses on not breaking API so plugins don’t require major changes. However, this has lead to no innovation or improvements to the API as time goes. Paper has always wanted to make these improvement and changes, but could not due to compatibility.

With the recent announcement, Paper will make these major changes for the future, and not rely on Spigot anymore. This means when any new major Minecraft update drops, they can start updating right away instead of waiting for Spigot.

This means any plugins that rely on Paper’s API will not work on Spigot, and vice versa. However, Paper is vastly more popular than Spigot.

What this means for my plugins

I have not been active recently with working on my plugins. I see them mostly as feature complete for the time being. I will be moving them over to Paper’s API and dropping Spigot support. However, not all plugins will survive and some will be discontinued. Most of these plugins are old and I have no interest in them anymore. If any developer wants to fork them, feel free.

I’ve tried to make my plugins support the most amount of versions possible. This means locking to Java 8, and sticking to old Spigot API versions. Going forward, I will be using Java 21 and supporting only the latest version.

This table below lists all my plugins and the status of them.

Plugin Status
AnarchyStats Will migrate
AutoWhitelistRemove Will migrate
BuildNotifier Will migrate
CompassTracker Discontinued
EzHomes Discontinued
hyperMOTD Will migrate
NoEndCrystals Will migrate
PartyChat Discontinued
PerWorldChat Will migrate
PetLives Discontinued
RandomEnchant Discontinued
SimpleHub Discontinued
SimplePlayTime Will migrate
SlashShrug Discontinued
TabCompleter Discontinued
TimeBar Will migrate
ToolStats Will migrate
TorchRefill Discontinued

What if I use a discontinued plugin?

Use it until it breaks, but I will not be supporting it anymore.

Why only the latest version?

It’s easier to maintain and I don’t really care for older versions of Minecraft.

Conclusion

Plugins that will be discontinued will be archived on GitHub with a notice. In the next coming days I will be swapping the plugins to use Paper’s API and updating them to use Java 21.

I’ve been waiting for this change, and this is for the future of my software.