dmg 67942ced7c
Release / release (push) Successful in 7m15s
CI / build (push) Successful in 2m15s
feat(stealth): earn and equip the Eye of True Seeing
Add independent eight-hour Night Vision progression, save-gated crafting and holder eligibility, authenticated helmet items and guarded inventory movement. Verify source attribution, native item/recipe/event adapters and actual plugin lifecycle. Drain final state asynchronously and reject stale lifecycle callbacks. Per-viewer revelation remains the next story; no deployment is included.
2026-09-12 17:35:01 -04:00

Purpur Stealth

Progression-gated identity concealment for Purpur 26.2 build 2618, built and tested with Java 25. ProtocolLib 5.4.0 is required.

Build

./gradlew clean check jar

Artifacts are written to build/libs/purpur-stealth-<version>.jar. Gitea CI verifies pushes/pull requests; approved main-branch conventional commits drive versioned releases. The distribution tests inspect the built JAR, embedded version/runtime identity, Java 25 bytecode, and workflow naming.

Eye of True Seeing

Earn a separate, personal unlock through eight cumulative online hours of Night Vision from directly drunk potions. Splash/lingering potions, commands, plugins and other sources do not count. Rejected and cosmetic-only replacements do not change attribution. Unattributed restored effects cannot inherit the drink timer; a new effective drink can start a new interval. Offline time is excluded.

After the unlock is saved, craft an Eye of True Seeing with eight Netherite Blocks around an Eye of Ender. Right-click an authenticated Eye in either hand to move it into an empty helmet slot. Existing helmets are not replaced. Traded Eyes still require the holder's own saved unlock; renamed ordinary Eyes do not qualify. Automated crafters cannot bypass progression. Vanilla handles crafting ingredient consumption.

Local name/body revelation is separate US-008 work and is not implemented by this acquisition story. Eligibility is checked even for an Eye manually placed in the helmet slot.

Eye records are independently UUID-keyed in plugins/SpigotStealth/state.yml (schema 2). Legacy Stealth records and extension fields are preserved. Crafting/use wait for successful save acknowledgement. Shutdown queues a final snapshot without blocking the tick thread, and initialization callbacks cannot revive a disabled or superseded lifecycle. Unacknowledged progress at abrupt process/power loss is not guaranteed.

check includes nativeStealthTest, which downloads SHA-256-pinned Purpur 2618, patches it without starting a listening server, and exercises real potion events, items, recipes, event dispatch and plugin lifecycle with external platform doubles. Live-client appearance and gameplay checks remain separate follow-ups.

Migration compatibility

The repository and checkout are now purpur-stealth (previously remote spigot-stealth, local spigot-invisibilty). Runtime identity remains SpigotStealth, including plugins/SpigotStealth/, the existing Java entrypoint/packages, command names, spigotstealth permission/namespace identifiers, and persisted progression/session data. Java 17 is no longer supported for new builds or artifacts.

Replace the old plugin JAR when installing the new distribution; never load both JARs together. Old tags and spigot-stealth-* release assets are preserved. Repository rename redirects have been checked against the previously deployed v1.5.0 download. Publishing a release does not authorize deployment.

The v2.0.0 migration itself left the Eye, combat reveal and concealed-chat stories pending. Subsequent Eye acquisition work is described above; Eye revelation, combat reveal and system-chat routing remain separate unfinished stories. Runtime plugin metadata is unchanged.

See the canonical project, stories, and development cycle.

S
Description
Spigot plugin that rewards invisibility potion use with identity-concealed sessions
Readme
322 KiB
v2.1.0
Latest
2026-09-12 21:35:01 +00:00
Languages
Java 100%