Principles
Standing guardrails — what this project values and what to avoid.
Values
- Data integrity above all. This plugin moves players' items; never duplicate and
never silently lose them. Container writes and stack math are covered by tests; the
duplication invariant (
in == out + consumed) is a first-class concern. - Scale without lag. Bounded per-tick work, O(1) lookups, incremental off-thread persistence. A change that regresses the store to O(n) should fail a performance test.
- Fail safe, never crash the server. Bad config, malformed data, unloaded worlds, and unsupported particles degrade gracefully with a warning — not an exception mid-tick.
- Approachable for admins. Sensible defaults, clear config with comments, permission
nodes that work with LuckPerms groups, and a live
/despi reload. - Tested and honest. Follow the testing standard in
../plans/testing.md; every fixed bug gets a permanent regression test.
What to avoid
- No hacks or "temporary" fixes; no secrets in the repo.
- No global mutable static state that captures a plugin instance across reloads (this bit us once — strategies and the location store are instance-scoped now).
- No blocking I/O on the main thread — persistence flushes off-thread; DB work uses the pool.
- No unparameterised SQL, ever (injection safety).
- Don't claim Folia support until it's actually tested (scheduling seam is kept, but the claim isn't made).