Contributing
Bugs, ideas, and pull requests are welcome.
Reporting a bug
Use the bug report template and include:
- Which plugin is misbehaving (and its version)
- Your server software and version (Paper, Purpur, Spigot - and the Minecraft version)
- Your Java version
- The exact command or action that triggered the bug
- The full stack trace or error output
- Any relevant config file contents (redact secrets)
Redact any API keys, database credentials, or real IP addresses before posting.
Reporting a security issue
Do not open a public issue for security problems.
Use the private Report a vulnerability flow on the Security tab, or see SECURITY.md for the full policy, scope, and expected timelines.
Suggesting a plugin or feature
Use the plugin request template. Describe the problem you’re trying to solve, not the solution you have in mind - that gives me more room to suggest something simpler than what you’d expect.
Pull requests
Before opening a PR, make sure:
- The plugin compiles cleanly with
./gradlew buildand produces Java 21 bytecode (the compile toolchain and release target are set in the rootbuild.gradle) - The plugin targets PaperMC 1.21 or newer and does not use APIs newer
than
io.papermc.paper:paper-api:1.21-R0.1-SNAPSHOT(the compile-time floor in the rootbuild.gradle) - No new dependencies unless they’re listed in the plugin’s
build.gradleand in its docs page /pluginname helpoutput is up to date- Tab completion covers every subcommand and argument
- Permissions are declared in
plugin.ymland documented - No hardcoded messages - everything user-facing is in a config file
- No hardcoded secrets, API keys, or database credentials
- You’ve tested the cases described in the related issue
See .github/pull_request_template.md
for the full checklist.
Code style
There’s no enforced linter, but the house style is:
- 4-space indentation, 120-column soft limit
finalon local variables where it clarifies intent- Javadoc on public classes and non-obvious methods
- Prefer Paper API over Bukkit API where they diverge
- Prefer
Component/ Adventure API over legacyStringmessages - No
@SuppressWarningswithout a comment explaining why
Questions
Open a GitHub Discussion or find me on Discord.