0014 - One Jar for Every Supported Minecraft Version¶
Status¶
Accepted (1.1.0)
Context¶
UniversalAdmin was built for a single Paper version with Java 25 bytecode. Many servers stay on an older Minecraft version for a long time, and a new Paper version appears every few months. Server owners download from Modrinth, which only offers a release for the Minecraft versions it lists.
Decision¶
- One jar per release for every supported version: Java 21 bytecode
(
options.release.set(21), built with the Java 25 toolchain) andapi-version: '1.21.7'in everyplugin.yml. - The floor is Paper 1.21.7, the first version with the dialog API the
GUI text input uses. Code may only use API that exists on the floor; an
API that changed later is accessed through a small reflective helper
(e.g.
WorldBorderWarnings). supported-versions.txtis the single list of supported Minecraft versions, in Modrinth's naming. The release workflow publishes every release for exactly those versions.- CI checks both ends: every build compiles against the oldest and the
newest Paper API (
-PpaperApiVersion). A weekly compatibility workflow compiles against and boots (scripts/paper-smoke-test.sh) every Paper version not listed yet; if it passes, the version is added to the newest Modrinth release at once and a pull request adds it to the list. Failures open an issue.
Consequences¶
- A new Minecraft version is usually available on Modrinth within a week, without a new UniversalAdmin release.
- Raising the floor is a deliberate change (new API wanted) and is noted in the changelog.
- Java 21 language features only, also in the API module.
Alternatives¶
- One jar per Minecraft version. More builds, more downloads to choose from, no benefit while the API stays compatible.
- Always only the newest version. Simplest, but locks out most servers for months after each Minecraft release.