Installation
DistrictWarden is a single Paper plugin. The land- and shop-management plugins it works with are soft dependencies: install them if you want the matching feature, leave them out and only that feature is disabled.
Requirements
| Requirement | Detail |
|---|---|
| Server software | Paper 1.21.x (api-version: 1.21) |
| Java | 21 |
| Land management | GriefDefender — without it, no properties are tracked |
| Shops | QuickShop-Hikari — without it, no shops are tracked |
| Archive backend | WorldEdit or FastAsyncWorldEdit — for the forthcoming property-block archive |
| Optional | MineMail for in-game mailbox notices; Vault and PlaceholderAPI are recognised if present |
Every integration is declared as a softdepend, so DistrictWarden loads after these plugins when they are present and never stops your server from starting when one is missing.
Install steps
-
Put the jar in place. Drop
DistrictWarden-<version>.jarintoplugins/and start the server once. It createsplugins/DistrictWarden/config.ymlandplugins/DistrictWarden/storage.ymlwith defaults. -
Choose your worlds. Until you set
worlds.enabled, DistrictWarden logs a warning that it will not manage anything. Editconfig.yml:worlds:enabled: [shopping]disabled: [] -
Apply the change. Run
/dw reloadto re-readconfig.yml, then/dw reconcileto read the claims and shops in the newly managed worlds into the database. -
Check the console. With GriefDefender and QuickShop-Hikari installed you should see DistrictWarden report the properties and shops it discovered. If either is missing it logs a clear line explaining which feature is disabled.
With worlds.enabled empty, DistrictWarden tracks nothing, monitors nothing, and refuses to act on anything even with staff approval. This is deliberate — it will not touch a world you did not nominate.
After first start the plugin folder holds two files:
plugins/
└── DistrictWarden/
├── config.yml
└── storage.yml
Properties, shops, warnings, archives and the audit log all live in the database (SQLite by default; see Configuration → Storage).
Quick test
- As an op, claim some land with GriefDefender in your enabled world.
- Run
/dw reconcile, then/dw status— the claim should appear as a property with statusACTIVE. - Build a QuickShop-Hikari shop inside the claim, run
/dw reconcile, then/dw shops— the shop should be listed with its item and state. - Dig below the surface inside the claim and try to spawn a mob with a spawn egg — the spawn should be cancelled, while the same egg works above ground.
If a claim never appears, see Troubleshooting → A claim never appears.
Updating
Drop the new jar in and restart. New keys are merged into your existing config.yml, and database migrations run automatically at startup. storage.yml changes still need a restart — swapping the database under a running server is not supported.
Building from source
DistrictWarden is a multi-module Maven project (Java 21).
mvn clean install
The shaded plugin jar is written to districtwarden-paper/target/DistrictWarden-<version>.jar. GriefDefender, QuickShop-Hikari and Paper all resolve from public repositories, so there are no manual dependency steps.
| Module | Role |
|---|---|
districtwarden-api | Public interfaces, models, provider SPIs, API entry point |
districtwarden-core | Lifecycle engines, repositories, migrations, config |
districtwarden-paper | Plugin bootstrap, commands, dependency detection, shaded jar |
districtwarden-provider-griefdefender | Property provider backed by GriefDefender claims |
districtwarden-provider-quickshop-hikari | Shop provider backed by QuickShop-Hikari |
districtwarden-provider-worldedit | Archive provider (WorldEdit API; FAWE-compatible) |
districtwarden-provider-discord, districtwarden-provider-mail | Notification providers |
districtwarden-core depends only on the provider interfaces in districtwarden-api, never on a concrete provider. Providers are registered at bootstrap based on which soft dependencies are present. The distributable artifact is districtwarden-paper, which shades every module into one jar.