43 lines
3.0 KiB
Markdown
43 lines
3.0 KiB
Markdown
---
|
|
type: User Story
|
|
title: "US-012: Configure and persist game state"
|
|
description: Give operators validated configuration and durable defensive storage for all Tyrant behavior.
|
|
status: done
|
|
---
|
|
|
|
# US-012: Configure and persist game state
|
|
|
|
As a **server operator**, I want configurable and durable game behavior so that the plugin remains predictable across restarts and balance changes.
|
|
|
|
## Acceptance criteria
|
|
|
|
- [x] Configuration covers ranges, durations, cooldowns, inactivity and maintenance intervals, effect levels and caps, mob restrictions, item materials and names, messages, timer behavior, shared-role-arena boss balance, and a validated barrier wall height defaulting to 12 blocks.
|
|
- [x] Defaults match the approved user stories, including a 50-block Tyrant range and Follower range, seven-day opt-out, 48-hour inactivity, and one-minute role maintenance.
|
|
- [x] Invalid required configuration prevents partial plugin initialization and produces a clear server log message.
|
|
- [x] UUID-keyed state stores lifecycle, current and pending roles, assignments, login history, participation, reign progression, purchases, choices, claimed legacy armor slots, cooldowns, paused time, item delivery, and captured mobs; the administrator-set arena center is durable across restarts.
|
|
- [x] Cooldowns and deadlines use UTC instants and exclude administratively paused time.
|
|
- [x] State is saved using atomic replacement where supported so failed writes do not replace valid state with partial data.
|
|
- [x] Corrupt, unknown, or invalid records cannot silently grant progression, roles, powers, items, or duplicated mobs.
|
|
- [x] Unknown forward-compatible configuration and state fields are preserved where practical.
|
|
- [x] Plugin disable removes transient effects and presentation safely while preserving durable state.
|
|
|
|
- [x] Tool and weapon claims persist alongside existing armor claims with backward-compatible loading and per-reign reset; see [US-022](us-022-purchase-legacy-tools-and-weapons.md).
|
|
|
|
## US-023 extension
|
|
|
|
Verified with 221 passing tests via `./gradlew clean check jar`; see [US-023 verification and limitations](us-023-complete-legacy-collection-with-elytra.md#verification-scope-and-limitations).
|
|
|
|
- [x] Final [Elytra claims](us-023-complete-legacy-collection-with-elytra.md) use `game.claimed-armor`, load older missing/armor/tool claim state, survive restart, and reset with the reign without changing delivered items.
|
|
|
|
## US-022 validation
|
|
|
|
Verified older armor-only YAML, absent claim state, mixed armor/tool restart round trips, and nine-item reign reset with `./gradlew clean check jar` (177 passing tests); see [US-022 verification and limitations](us-022-purchase-legacy-tools-and-weapons.md#validation-scope).
|
|
|
|
## Related
|
|
|
|
- [Persistence model](../concepts/persistence-model.md)
|
|
- [Build, test, and release the plugin](us-013-build-test-and-release.md)
|
|
- [Claim the Vigilante role in the arena](us-019-claim-vigilante-in-arena.md)
|
|
- [Claim the Tyrant role in the arena](us-020-claim-tyrant-in-arena.md)
|
|
- [Claim Tyrant legacy armor](us-021-claim-tyrant-legacy-armor.md)
|