This page is for contributors who want a fast, reliable local workflow.
mvn -q -DskipTests compileUseful commands during development:
mvn -q test
mvn -B verify
mvn -B -DskipTests checkstyle:check
mvn -B package- Create a branch for one focused change.
- Implement behavior and tests in the same pass.
- Run local validation (
testat minimum). - Update docs when behavior or operator workflow changes.
- Open a PR with context, impact, and migration notes when relevant.
- Keep feature boundaries clean; avoid unnecessary cross-feature coupling.
- Prefer typed config access (
ConfigView/ConfigNode) over raw casts. - Make external calls fail-safe and time-bounded.
- Ensure disable/reload paths release resources cleanly.
- Keep logic testable; avoid burying behavior in hard-to-reach static paths.
When adding a new feature module:
- Implement metadata in
features/<feature>/meta/Meta. - Extend
BukkitBaseFeatureand definegetDefaultConfig()/getDefaultMessages(). - Register listeners/tasks/commands through lifecycle managers.
- Add feature tests under the mirrored
src/test/java/...package path. - Validate enable/disable/reload behavior with no leaked resources.
- Build succeeds locally.
- Relevant tests pass.
- New behavior is covered by tests.
- Operationally important failures are logged clearly.