Skip to content

Support Paper 26.x - #71

Merged
osipxd merged 7 commits into
developfrom
feature/paper-26
Nov 2, 2026
Merged

osipxd merged 7 commits into
developfrom
feature/paper-26

Conversation

@osipxd

@osipxd osipxd commented Nov 2, 2026

Copy link
Copy Markdown
Member

Adds Paper 26.x support so plugins can compile against paper-api 26.x and run a 26.x dev server.

Changes

  • Paper 26.1+
    • paperApi resolves "$apiVersion.+" for 26.1+, because Paper publishes paper-api as <version>.build.<number>-<channel>. For example, 26.1.2 resolves to 26.1.2.build.74-stable. Spigot and older versions keep -R0.1-SNAPSHOT.
    • 26.1+ defaults to Java 25.
    • MinecraftVersion.parse ignores version suffixes, so explicit versions like 26.3-pre-2.build.0-alpha no longer fail.
    • The README notes that bukkit.apiVersion must be a version Paper actually published. Paper skipped 26.1, so use 26.1.2.
  • run-paper 3.1.0: downloads Paper through the Fill v3 API, which 26.x needs.
  • Breaking: Gradle 9.7+ is now required (run-paper 3.1.0 requires it). The wrapper is updated to 9.8.2, with fixes for Gradle 9: Spock on Groovy 4, the JUnit Platform launcher, and @DisableCachingByDefault on tasks.
  • Fix: the dev server runs on at least the Java version of the project's toolchain.
  • Fix: plugin.yml is always generated into build/, and plugin.yml from resources is used only as defaults. Previously, an existing plugin.yml was overwritten and other files in src/main/resources were deleted. Values from the previously generated plugin.yml also took precedence over build configuration changes.

Verification

  • ./gradlew check passes.
  • End-to-end run with a sample project:
    • apiVersion = "26.1.2": resolved paper-api 26.1.2.build.74-stable, downloaded Paper 26.1.2, ran it on Java 25, and the plugin was enabled.
    • apiVersion = "1.21.11": Paper 1.21.11 ran on Java 21, and the plugin was enabled.
    • A consumer on Gradle 9.7.1 built correctly.

Checklist:

  • Have you read text of project license?
  • Have you described maked changes in README or wiki?
  • Have you added changelog?

🤖 Generated with Claude Code

osipxd and others added 7 commits November 2, 2026 23:36
Always generate plugin.yml into the build directory and use plugin.yml
from resources only as defaults. Previously, the source plugin.yml was
overwritten and other resources were deleted, and values from the
previously generated plugin.yml took precedence over the new ones.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: e3db1f8f-56bf-4e79-8cda-69e041e5f23d
Commits

Reviewing files that changed from the base of the PR and between c5f2227 and 96b80be.

Files ignored due to path filters: 1
  • gradle/wrapper/gradle-wrapper.jar is excluded by !**/*.jar
Files selected for processing: 20
  • .gitignore
  • CHANGELOG.md
  • README.md
  • build.gradle.kts
  • gradle.properties
  • gradle/wrapper/gradle-wrapper.properties
  • gradlew
  • gradlew.bat
  • src/main/kotlin/dependencies/Dependencies.kt
  • src/main/kotlin/extensions/Provider.kt
  • src/main/kotlin/plugin/PluginYamlFeature.kt
  • src/main/kotlin/plugin/task/ParsePluginYaml.kt
  • src/main/kotlin/plugin/util/MinecraftVersion.kt
  • src/main/kotlin/server/DevServerFeature.kt
  • src/main/kotlin/server/task/CreateIdeaGradleRunConfiguration.kt
  • src/main/kotlin/server/task/PrepareServer.kt
  • src/test/groovy/ru/endlesscode/bukkitgradle/BukkitGradlePluginSpec.groovy
  • src/test/groovy/ru/endlesscode/bukkitgradle/PluginSpecification.groovy
  • src/test/groovy/ru/endlesscode/bukkitgradle/plugin/task/GeneratePluginYamlSpec.groovy
  • src/test/groovy/ru/endlesscode/bukkitgradle/server/task/RunServerSpec.groovy

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.

Walkthrough

This update adds Paper 26.1+ dependency and Java handling, changes generated plugin.yml resource processing, raises the Gradle minimum and wrapper version, and updates build and test dependencies. It also adds tests and documentation for these changes.

Changes

Paper version and Java handling

Layer / File(s) Summary
Paper version and Java handling
src/main/kotlin/plugin/util/MinecraftVersion.kt, src/main/kotlin/dependencies/Dependencies.kt, src/main/kotlin/server/DevServerFeature.kt, src/test/groovy/ru/endlesscode/bukkitgradle/BukkitGradlePluginSpec.groovy, src/test/groovy/ru/endlesscode/bukkitgradle/server/task/RunServerSpec.groovy, README.md, CHANGELOG.md, src/main/kotlin/server/task/CreateIdeaGradleRunConfiguration.kt, src/main/kotlin/server/task/PrepareServer.kt
Version parsing accepts a numeric major and minor with an optional patch. For Paper 26.1+, dependency resolution uses the .+ version format and the minimum Java version is 25. The dev server uses the greater of the resolved minimum and configured toolchain versions. Tests and documentation cover the updated versions and server selection.

Generated plugin.yml resources

Layer / File(s) Summary
Generated plugin.yml resources
src/main/kotlin/plugin/PluginYamlFeature.kt, src/main/kotlin/plugin/task/ParsePluginYaml.kt, src/test/groovy/ru/endlesscode/bukkitgradle/PluginSpecification.groovy, src/test/groovy/ru/endlesscode/bukkitgradle/plugin/task/GeneratePluginYamlSpec.groovy, CHANGELOG.md
The feature passes a discovered source plugin.yml to the parse task and adjusts resource exclusions based on whether generation is enabled. Generated output is tested separately from source resources, including resource processing and changed configuration.

Gradle wrapper and build setup

Layer / File(s) Summary
Gradle wrapper and build setup
.gitignore, gradle/wrapper/gradle-wrapper.properties, gradlew, gradlew.bat, build.gradle.kts, gradle.properties, src/main/kotlin/extensions/Provider.kt, README.md, CHANGELOG.md
The documented Gradle minimum changes to 9.7, and the wrapper uses Gradle 9.8.2. The wrapper scripts launch the wrapper JAR with -jar. Build dependencies and project version are updated, and .kotlin/ is ignored.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Change: Feature

Sequence Diagram(s)

sequenceDiagram
  participant PluginYamlFeature
  participant SourceResources
  participant ParsePluginYaml
  participant ResourceFactory
  participant ProcessResources
  PluginYamlFeature->>SourceResources: Find source plugin.yml outside build directories
  PluginYamlFeature->>ParsePluginYaml: Pass source plugin.yml provider
  ParsePluginYaml->>ResourceFactory: Provide parsed source values when a source file exists
  ResourceFactory->>ProcessResources: Generate plugin.yml in generated resources
  SourceResources->>ProcessResources: Exclude source plugin.yml when generation is enabled
Loading

Possibly related PRs

Merge Risk: Minimal · up to 96b80

No actionable merge-blocking issue remains. The launcher dependency receives its version transitively, so that declaration does not prevent merging after normal checks.

Pre-merge checks: Passed 4 · Failed 1

Failed Failed checks: 1 warning

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentat… Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed Passed checks: 4 passed
Check name Status Explanation
Title check Passed The title clearly and concisely identifies the main change: adding support for Paper 26.x.
Description check Passed The description directly explains the Paper 26.x support, dependency resolution, Java and Gradle updates, plugin.yml fixes, and verification results.
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentation-only edits and deletions within surviving functions are included; unchanged diff context and fully deleted functions are excluded. Analyzed 4 functions across 9 files. (11 skipped: 11 unsupported.)

Resolution

Write docstrings for the functions missing them to satisfy the coverage threshold.

Finishing Touches
Generate docstrings
  • Commit to this branch
  • Create a new PR
Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

A rabbit checks the build at dawn,
Paper versions hop along.
A fresh plugin.yml finds its place,
The wrapper runs at a newer pace.
Java twenty-five joins the scene,
And carrots mark the changelog green.

CodeRabbit Verify

  • Run CodeRabbit Verify to test the changes in this pull request.

@osipxd
osipxd merged commit b3a8519 into develop Nov 2, 2026
3 checks passed
@osipxd
osipxd deleted the feature/paper-26 branch November 2, 2026 23:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant