Skip to main content

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​

RequirementDetail
Server softwarePaper 1.21.x (api-version: 1.21)
Java21
Land managementGriefDefender — without it, no properties are tracked
ShopsQuickShop-Hikari — without it, no shops are tracked
Archive backendWorldEdit or FastAsyncWorldEdit — for the forthcoming property-block archive
OptionalMineMail 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​

  1. Put the jar in place. Drop DistrictWarden-<version>.jar into plugins/ and start the server once. It creates plugins/DistrictWarden/config.yml and plugins/DistrictWarden/storage.yml with defaults.

  2. Choose your worlds. Until you set worlds.enabled, DistrictWarden logs a warning that it will not manage anything. Edit config.yml:

    worlds:
    enabled: [shopping]
    disabled: []

    See Configuration → Choosing worlds.

  3. Apply the change. Run /dw reload to re-read config.yml, then /dw reconcile to read the claims and shops in the newly managed worlds into the database.

  4. 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.

Nothing is managed until a world is enabled

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​

  1. As an op, claim some land with GriefDefender in your enabled world.
  2. Run /dw reconcile, then /dw status — the claim should appear as a property with status ACTIVE.
  3. Build a QuickShop-Hikari shop inside the claim, run /dw reconcile, then /dw shops — the shop should be listed with its item and state.
  4. 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.

ModuleRole
districtwarden-apiPublic interfaces, models, provider SPIs, API entry point
districtwarden-coreLifecycle engines, repositories, migrations, config
districtwarden-paperPlugin bootstrap, commands, dependency detection, shaded jar
districtwarden-provider-griefdefenderProperty provider backed by GriefDefender claims
districtwarden-provider-quickshop-hikariShop provider backed by QuickShop-Hikari
districtwarden-provider-worldeditArchive provider (WorldEdit API; FAWE-compatible)
districtwarden-provider-discord, districtwarden-provider-mailNotification 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.