EDEN is the lobby narrative engine for The Threshold. It drives the pre-portal experience: NPC dialogue and skins, custom quest items, puzzle/progress state per player, ambient zone sound, and the activation panel that gates entry to survival.
- Spawns and manages narrative NPCs (skinned, positioned, with multi-stage dialogue and conditional exchanges)
- Tracks per-player puzzle progress: clues found, items given, panel solved, portal unlocked
- Drives an activation panel puzzle (insert clue items in the correct order to open a door)
- Manages breakable blocks and loot chests that hand out quest items
- Plays zone-based ambient sound as players move through the lobby (inner, outer, border, bunker, corridor)
- Shows a compass/quest-tracker UI pointing players to their next objective
- Handles cinematics, corridor item displays, and lobby-specific chat/inventory/visibility restrictions
- Sends solved players through to a survival-world destination
| Command | Description | Permission |
|---|---|---|
/eden reload |
Reload config and respawn NPCs | eden.admin |
/eden setnpc <id> |
Set NPC position to your location | eden.admin |
/eden setcompass <id> |
Set compass target position to your location | eden.admin |
/eden setbunker |
Set bunker entrance trapdoor to your block position | eden.admin |
/eden setchest <id> |
Set loot chest location to your targeted block | eden.admin |
/eden spawnnpcs |
Force-respawn all NPCs | eden.admin |
/eden puzzle <player> |
Inspect a player's puzzle progress | eden.admin |
/eden reset <player> |
Reset a player's puzzle progress and EDEN items | eden.admin |
/eden solve <player> |
Skip a player to solved state with guide and key | eden.admin |
/eden zone |
Show your current ambient zone | eden.admin |
/eden spawndisplay |
Spawn rotating/bobbing display of held item | eden.admin |
All subcommands are gated behind the single eden.admin permission node, and (aside from reset/solve, which target offline/online players by name) most must be run by a player standing in the configured lobby world.
- Paper 1.21 (
api-version: '1.21') - Java 25 runtime (built against a Java 26 toolchain via paperweight-userdev, targeting
1.21API compiled with26.1.2.build.+)
- Gradle (via the included
gradlewwrapper) - Java 26 (CI builds with Temurin 26, matching the project's Gradle toolchain)
./gradlew spotlessApply build
Drop the built jar into your server's plugins/ folder and restart.
config.yml defines the entire lobby narrative: settings (lobby world, dialogue prefix color), ambient zones (bounding boxes with ambient sound/volume/pitch), the activation-panel puzzle (slot order, accepted clue items, door location/sound), breakable-blocks and loot-chests that give quest items, reset-blocks regions, bunker-entrance, the st-eden-pack resource pack URL/hash, portal-trigger bounds, survival-destination (where solved players are teleported), npc-highlights (conditional attention-getters), compass-targets (ordered quest waypoints), and npcs (per-NPC position, skin, and dialogue stages/exchanges).
GitHub Actions (.github/workflows/ci.yml) runs on every push/PR to main:
- Build:
./gradlew spotlessApply build --no-daemonon Java 21 (Temurin) - commitlint: enforces Conventional Commits on PR/push
See .github/pull_request_template.md and the issue templates in .github/ISSUE_TEMPLATE. Commits must follow Angular-style conventional commit format, enforced by the commitlint job in CI (there are no local pre-commit hooks in this repo).
MIT - see LICENSE.
