Thanks for your interest in improving ContinentRegions! 🌍
- Fork the repository and create a feature branch off
main. - You need JDK 21 (Temurin recommended). The Gradle wrapper handles the rest.
- Build and run the tests:
The shaded plugin jar lands in
./gradlew build
build/libs/. - Spin up a local Paper server with WorldEdit, WorldGuard and BlueMap
pre-downloaded:
./gradlew runServer
See the Architecture section of the README. In short:
pure, unit-testable logic lives under validation/ and service/; Bukkit-facing
code is isolated in worldguard/, bluemap/, command/ and editor/.
- Match the surrounding style (4-space indent,
finalwhere it adds clarity, no magic strings — use config/constants). - Never call the Bukkit API from an async thread. HTTP handlers dispatch to the main thread via the scheduler; keep it that way.
- Keep new third-party dependencies minimal and shade/relocate them in
build.gradle.kts(see the Gson/SQLite setup for the pattern). - Add unit tests for pure logic (geometry, parsing, storage). Bukkit-free classes should stay Bukkit-free so they remain testable without a server.
- Keep PRs focused; describe the change and how you verified it.
- Make sure
./gradlew buildpasses (CI runs the same). - Update
README.md/CHANGELOG.mdwhen behaviour or config changes.
Use the issue templates. Include your server version, plugin version and relevant logs.