Contributions are welcome. Whether it's a bug fix, a new economy provider, or a QoL improvement, here's how to get involved.
- Fork the repo and clone it
- Make sure you have Java 21 installed
- Run
./gradlew buildto verify everything compiles - Run
./gradlew testto make sure tests pass
The project uses Kotlin 2.1, targets Paper 1.21+ via paperweight, and is Folia-safe.
Build the plugin:
./gradlew shadowFreeJar # unobfuscated, for development
./gradlew buildFree # obfuscated with ProGuard, for releaseRun a test server:
./gradlew runServerFreeThis spins up a Paper server with VaultUnlocked, EssentialsX, and PacketEvents pre-installed. Drop any extra plugin JARs (Citizens.jar, GemsEconomy.jar, etc.) in the project root and they'll be picked up automatically.
src/main/— All shared logic: vendors, catalogs, economy, config, displaysrc/free/— Free edition bootstrap and pricing stubsrc/test/— Unit tests (JUnit 5 + Mockito)docs/— User-facing documentation
- Kotlin, not Java
- No wildcard imports
- Keep functions short and focused
- No comments unless absolutely necessary to explain non-obvious behavior — the code should speak for itself
- Follow existing patterns in the codebase
- Create a branch from
main - Keep changes focused — one fix or feature per PR
- Make sure
./gradlew checkpasses before submitting - Write a clear description of what changed and why
If you're unsure whether a change would be accepted, open an issue first to discuss it.
Open an issue with:
- Server version (Paper/Folia, Minecraft version)
- Plugin version
- Steps to reproduce
- Expected vs actual behavior
- Any relevant console output
By contributing, you agree that your contributions will be licensed under the same PolyForm Noncommercial License 1.0.0 as the rest of the project.