Plugin Development
Papyrus is API-compatible with Paper plugins. Use the same dependency and plugin format.
Gradle (Kotlin DSL)
kotlin
repositories {
maven("https://repo.papermc.io/repository/maven-public/")
}
dependencies {
compileOnly("io.papermc.paper:paper-api:26.1.2-R0.1-SNAPSHOT")
}
java {
toolchain.languageVersion.set(JavaLanguageVersion.of(21))
}Replace the version with the current apiVersion from gradle.properties. Papyrus does not publish its own Maven repository.
Maven
xml
<repository>
<id>papermc</id>
<url>https://repo.papermc.io/repository/maven-public/</url>
</repository>
<dependency>
<groupId>io.papermc.paper</groupId>
<artifactId>paper-api</artifactId>
<version>26.1.2-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>paper-plugin.yml
Use the standard Paper plugin format. Set api-version to match apiVersion in Papyrus gradle.properties:
yaml
name: MyPlugin
version: 1.0.0
main: com.example.myplugin.MyPlugin
api-version: '26.1.2'Paper plugins use paper-plugin.yml; legacy Bukkit plugins use plugin.yml instead.
Detecting Papyrus at runtime
java
import io.papermc.paper.ServerBuildInfo;
ServerBuildInfo info = ServerBuildInfo.buildInfo();
if (info.brandId().equals(ServerBuildInfo.BRAND_PAPYRUS_ID)) {
// Running on Papyrus (sushimc:papyrus)
}
if (info.isBrandCompatible(ServerBuildInfo.BRAND_PAPER_ID)) {
// true on both Paper and Papyrus — use for generic Paper-targeted plugins
}Local development against the fork
kotlin
dependencies {
compileOnly(project(":paper-api"))
}Run ./gradlew publishToMavenLocal to install paper-api locally, then add mavenLocal() above the PaperMC repository in your plugin project. See CONTRIBUTING.md for running the optional test-plugin module.
Testing against Papyrus
- Download or build a Papyrus server jar
- Drop your plugin jar in
plugins/ - Verify
/versionshows Papyrus and your plugin loads without brand errors
