PA

paper-version-compat

Provides a consistent procedure to research and document plugin compatibility against new Minecraft or Paper API updates.

Install

mkdir -p .claude/skills/paper-version-compat && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/18561" && unzip -o skill.zip -d .claude/skills/paper-version-compat && rm skill.zip

Installs to .claude/skills/paper-version-compat

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Repeatable procedure for validating and honestly documenting a Bukkit/Paper/Folia plugin's compatibility when a new Minecraft/Paper version ships — research-first API checking, build strategy, runtime verification, and maintaining a tested-vs-assumed compatibility matrix. Use whenever a new Minecraft or Paper version is released, the user asks "does my plugin support version X", a paper-api dependency bump is considered, or release notes need a compatibility claim.
469 chars✓ has a “when” triggerlonger than Claude Code's old 250-char listing cap (fine on current versions)
Advanced

Key capabilities

  • Validate plugin compatibility with new Minecraft/Paper versions
  • Research Paper release announcements for API changes and requirements
  • Grep plugin source for actual API surface usage
  • Decide build strategy (e.g., compiling against oldest supported API)
  • Perform runtime verification through booting, manual passes, and suite passes

How it works

The skill follows a research-first approach to validate plugin compatibility, auditing API usage, defining build strategies, and performing multi-rung runtime verification.

Inputs & outputs

You give it
new Minecraft/Paper version, plugin source code
You get back
documented compatibility claim (Tested, Assumed, etc.) in a compatibility matrix, and updated changelog/README

When to use paper-version-compat

  • Verifying plugin support for a new Minecraft release
  • Updating a plugin's build configuration for Paper API changes
  • Auditing API usage to identify breaking changes
  • Generating an honest 'tested' vs 'assumed' compatibility report

About this skill

Validating a Paper plugin against a new Minecraft/Paper version

The goal is an honest, documented compatibility claim — "tested" and "assumed" are different statements and users deserve to know which one they're getting. Most version bumps need zero code changes; the work is research, verification, and documentation discipline.

Step 1 — Research first (never trust model memory)

New MC/Paper versions are usually past the model's training cutoff, and Minecraft's versioning/cadence has changed over time. Before any code conclusion:

  1. Web-search the Paper release announcement and docs.papermc.io update notes for the target version. Look specifically for: required Java version, plugin-affecting API removals, api-version policy changes, and remap/mappings changes.
  2. Check the loaders-that-lag: Folia releases behind Paper — if no Folia build exists for the target version, the matrix entry is "N/A yet", not "supported".
  3. If findings are thin (fresh release), mark every conclusion medium-confidence and say so in anything you write.

Step 2 — Grep the plugin's real API surface

Don't audit the whole Bukkit API — audit what the plugin actually touches. Build the list once and keep it in the project's context doc:

grep -roh --include=*.kt --include=*.java \
  -E 'org\.bukkit\.[A-Za-z.]+|io\.papermc\.[A-Za-z.]+|net\.kyori\.[A-Za-z.]+' src/ \
  | sort -u

Cross-check that list against the release's deprecations/removals. Typical hot spots: registry access patterns (enum → Registry migrations), scheduler APIs (legacy scheduleSyncRepeatingTask-style methods are perennial removal candidates), event signature changes, ItemStack/component APIs, and anything @Deprecated(forRemoval = true) in the current compile.

Step 3 — Decide the build strategy (this is a policy, not a routine step)

  • Default: keep compiling against the oldest supported Paper API. One JAR spanning versions comes from API stability plus conservative bytecode targeting — not from chasing the newest paper-api.
  • Only bump paper-api / api-version when (a) you need a new API, or (b) you are deliberately dropping old-version support. Both are support-range decisions; changelog them.
  • Java: servers may raise their required Java version across MC versions while old servers stay lower. Keep the bytecode target at the floor (e.g. Java 21 bytecode runs fine on a Java 25 server); use a newer toolchain freely. Verify Gradle itself can run on the JDK in use — Gradle's max-supported-JVM lags JDK releases, and the failure message is cryptic (run Gradle on an older JDK via JAVA_HOME; keep the toolchain block for compilation).

Step 4 — Build & fix

Branch (e.g. dev/<new-version>), build, and treat new deprecation warnings as work items now — they're the removals of the next cycle.

Step 5 — Runtime verification ladder

Each rung upgrades the claim you're allowed to make:

  1. Boots clean — plugin enables on the target version, no stack traces, info command works.
  2. Manual pass — one full cycle of the plugin's core flow(s) by hand.
  3. Suite pass — the project's e2e/bot suite green on the target version. Caveat for bot-based suites: bot libraries (mineflayer etc.) lag new protocol versions — options are ViaVersion on the test server (bots handshake old, server runs new) or deferring the "tested" claim, explicitly.
  4. Folia pass — separate rung; Paper-tested says nothing about region-thread behavior.

Only rung 3+ justifies "Tested" in public docs. Rungs 1–2 justify "expected to work".

Step 6 — Update the compatibility matrix (the durable artifact)

Maintain a table in the project context doc with Status ∈ {Tested, Assumed, Partially tested, N/A yet, Not supported} and an evidence column (what ran, when). Rules:

  • Never promote to "Tested" without the suite/manual pass on that exact platform+version.
  • Downgrade honestly: a big internal change (threading, scheduler rework) drops previously "Tested" platforms back to "Partially tested" until re-run.
  • Mirror the matrix everywhere users see claims: release notes, README badges, and the Modrinth/Hangar listing's game-version range — same commit.

Step 7 — Release hygiene

  • Changelog states the new supported range and whether code changed or only verification.
  • If zero code changes were needed, say exactly that — "no code changes; verified on X" is a meaningful, reassuring release note.
  • Update the local dev server pin (runServer version or equivalent) so the next contributor tests against the new default.

Anti-patterns

  • Claiming a version range from API stability alone while labeling it "tested".
  • Bumping paper-api to the newest version reflexively — it silently narrows your floor.
  • Skipping the Folia check because "it's just Paper with threads" (it is not).
  • Letting the compatibility claim live only in a Modrinth dropdown, with no evidence trail in the repo.

When not to use it

  • When claiming a version range from API stability alone as 'tested'
  • When reflexively bumping `paper-api` to the newest version
  • When skipping Folia compatibility checks

Limitations

  • Folia releases behind Paper, impacting compatibility claims
  • Bot libraries for e2e suites may lag new protocol versions
  • Requires manual updates to the compatibility matrix in project context docs

How it compares

This skill provides a repeatable, research-driven procedure for honestly documenting plugin compatibility, distinguishing between 'tested' and 'assumed' support, unlike ad-hoc testing or simple version bumps.

Compared to similar skills

paper-version-compat side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
paper-version-compat (this skill)020dNo flagsAdvanced
svelte-expert119moNo flagsIntermediate
home-assistant-integration-knowledge82moNo flagsAdvanced
writing-skills44moReviewAdvanced

Try saying

Example prompts that trigger this skill in your AI assistant.

Search skills

Search the agent skills registry