--- type: Log title: Spigot Base Design Log description: Chronological record of material decisions affecting the Spigot Base design. --- # Spigot Base Design Log ## 2026-08-09 — Initial progression design - Base progression is sequential: Base I establishes a base, Base II provides navigation, Base III provides personal teleportation, and Base IV permits visitor teleportation. - Every secondary progression path requires Base I. - A base is cylindrical and begins with a 10-block radius and a vertical extent 25 blocks above and below its set Y coordinate. - Only Survival-mode activity contributes progress; repeatedly placing and breaking blocks is permitted. - Flight is limited to the base, includes a five-block horizontal warning buffer, and can be toggled by the player. - Player-facing administration will initially use commands rather than an inventory UI. - The build and release pipeline will follow the neighboring Trigger Spawn project pattern. ## 2026-08-09 — Implementation started - Approved implementation begins with the tested Gradle/Spigot foundation, validated configuration, and durable player state. - Feature work will proceed incrementally using tests before implementation where practical. ## 2026-08-09 — Core implementation checkpoint - Implemented UUID-keyed YAML state, validated configuration, Base I–IV progression, base sizing, particle navigation, controlled base flight, personal and visitor teleportation, progress feedback, and initial administrative commands. - Added Gradle, Spigot metadata, Gitea CI/release workflows, and project documentation based on Trigger Spawn. - Verified the implementation with `./gradlew clean check jar`: 34 tests passed and the plugin JAR was produced successfully. - User stories remain in progress pending live-server integration verification and completion of runtime administrative configuration editing. ## 2026-08-09 — Navigation preference fix - Added explicit, idempotent `/basenavigation on` and `/basenavigation off` modes with autocomplete while retaining no-argument toggling. - Preserved a disabled navigation preference during later grass-or-dirt progression instead of forcing navigation back on. ## 2026-08-09 — Initial release scope completed - Added live, validated, persisted numeric configuration updates through `/baseadmin config`. - Added administrative progress-counter updates, prerequisite-aware level changes, cooldown clearing, and cascading path resets. - Made progression materials, visitor currency, boss-bar duration, particle count, and title timing configurable. - Preserved unknown forward-compatible YAML fields for retained player records while continuing to reject invalid progression state. - Completed and verified all approved user stories with the automated Gradle check lifecycle. ## 2026-08-10 — Player command aliases - Added `/sethome` for `/setbase`, `/home` for `/base`, and `/visit` for `/gotobase`. - Visitor autocomplete remains available for eligible offline bases through the `/visit` alias. - Verified the aliases and plugin build with `./gradlew clean check jar`. ## 2026-08-10 — Toggle command autocomplete - Added explicit, idempotent `on` and `off` modes and autocomplete to base flight and visitor access while retaining no-argument toggling. - Added `/homenavigation`, `/homeflight`, and `/homevisitors` aliases with the same autocomplete as their canonical commands. - Generalized toggle preference resolution for navigation, flight, and visitor access. - Verified the implementation with `./gradlew clean check jar`. ## 2026-08-10 — Unified base settings command - Replaced the separate progress, navigation, flight, and visitor commands with `/basesettings` and its `/homesettings` alias. - Added nested autocomplete for status, Base IV upgrades, visitor access, navigation, flight, and progress boss-bar settings. - Moved the Base IV purchase from `/base upgrade` to `/basesettings upgrade`, leaving `/base` and `/home` dedicated to personal teleportation. - Preserved the full progression report as the default `/basesettings` response and as `/basesettings status`. - Verified the breaking command restructure with `./gradlew clean check jar`. ## 2026-08-10 — Administrative command autocomplete and reset safety - Added `/homeadmin` as an alias for `/baseadmin` and replaced the administrative `progress` subcommand with `status`. - Added permission-aware, context-sensitive autocomplete for subcommands, online and known offline players, paths, levels, counters, cooldown types, reset confirmation, and numeric configuration keys. - Removed the unsafe unconfirmed base reset path; complete resets now require `reset all confirm`. - Tightened argument validation and replaced implementation-specific enum errors with player-facing usage guidance. - Verified the administrative revision with `./gradlew clean check jar`. ## 2026-08-10 — Base border visualization - Added persisted, owner-only base border particles controlled by `/basesettings border enable|disable` with contextual autocomplete. - Rendered a bounded nearby arc at the player's current height using the current base radius while respecting world and vertical bounds. - Added border preference reporting to player and administrative status output and safe defaults for existing state files. - Verified the feature with `./gradlew clean check jar`. ## 2026-08-10 — Spawnable block overlay - Added persistent progression for Survival-mode block placements anywhere, with existing in-base placement counts used as a safe migration minimum. - Added `/basesettings spawnable enable|disable` after a configurable 250-placement unlock and reported its progress and preference in player and admin status output. - Added admin controls for total placement progress, the unlock threshold, and each unlocked player's overlay preference. - Added owner-only red particles for nearby dark spawning surfaces inside base bounds, using bounded incremental scanning and rendering budgets. - Verified the feature with `./gradlew clean check jar`. ## 2026-08-10 — Navigation visibility buffer - Limited enabled base navigation particles to the base's world and positions more than 25 horizontal blocks beyond the current base border. - Used the live size-tier radius so expansion and relocation immediately update the visibility threshold. - Added exact-boundary and controller integration coverage. - Verified the change with `./gradlew clean check jar`. ## 2026-08-24 — Pocket Base mob-spawning control - Disabled natural hostile and passive mob spawning by default in new and existing Pocket Bases without a saved preference. - Added independent persisted owner settings through `/basesettings pocket mobs `, contextual autocomplete, and status reporting. - Migrated each legacy combined mob-spawning preference to both categories to preserve existing behavior. - Reapplied both saved spawn flags when Pocket Base worlds load and restored both prior world settings when persistence fails. - Verified the feature with `./gradlew clean check jar`. ## 2026-08-24 — Relocatable Pocket Base return portals - Allowed Pocket Base owners to activate a complete return portal frame with flint and steel anywhere inside their unlocked pocket boundary. - Persisted one active return portal location while retaining the generated portal as the default for existing Pocket Bases. - Made only the selected intact frame functional without removing old frame blocks, preserving the void-return safety fallback. - Verified the feature with `./gradlew clean check jar`. ## 2026-08-24 — Purchasable Pocket Base biomes - Added `/basesettings pocket type ` with type-aware autocomplete and validation. - Defaulted new and unconfigured Pocket Bases to `void/the_void` and persisted each owner's selected biome. - Applied biome metadata across unlocked columns and new expansion rings without changing blocks, entities, inventories, portals, progression, or mob-spawning preferences. - Added an atomic, configurable biome-change payment that defaults to 16 netherite blocks and restores the prior biome and payment on failure. - Verified the feature with `./gradlew clean check jar`. ## 2026-08-24 — Native base settings dialog - Changed `/basesettings` and `/homesettings` with no arguments to open a native Minecraft dialog dashboard, with explicit `ui` subcommands providing the same behavior. - Added progression summaries, current and locked setting states, toggles, Pocket Base controls, biome selection, and confirmations for Base IV, Pocket Base, and biome purchases. - Retained the detailed chat report under `/basesettings status` and kept dialog actions routed through the existing validated command behavior. - Added dialog routing, autocomplete, alias, non-player, generated-control, locked-state, and purchase-confirmation coverage. - Verified the feature with `./gradlew clean check jar`. ## 2026-08-24 — Purpur dialog runtime compatibility - Replaced the Spigot-only Bungee dialog types that were absent from production with Purpur's supported Paper dialog API. - Compiled and tested against the exact Purpur 26.2 build 2618 API with Java 25, and updated both CI workflows to use Java 25. - Preserved unit-test coverage through server-independent dialog specifications and adapted Bukkit test fixtures to Purpur's registry-aware API behavior. - Verified 128 tests and the Java 25 plugin artifact with `./gradlew clean check jar`. ## 2026-08-25 — Static dialog command actions - Replaced macro command templates with static run-command actions for fixed dialog buttons. - Added regression coverage for the generated run-command action and its unchanged command payload. - Verified `/basesettings` opens without command exceptions on a local Purpur 26.2 build 2618 server. - Verified the plugin artifact with `./gradlew clean check jar`. ## 2026-08-24 — Pocket Base mob portal travel - Added five-tick collision scanning that transports non-player living mobs through active Pocket Base entrance and return portals. - Reused safe player destinations and server-spawn fallback behavior while excluding items, projectiles, vehicles, and other non-living entities. - Applied the existing two-second portal cooldown to mobs to prevent immediate repeated transport. - Verified the feature and Java 25 plugin artifact with `./gradlew clean check jar`. ## 2026-08-28 — Safe Pocket Base fall returns - Cleared accumulated fall distance whenever portal or void-return travel teleports an entity, preventing carried-over fall damage at the destination. - Added regression coverage for players falling out of a Pocket Base and returning to the server spawn. - Verified the fix and plugin artifact with `./gradlew clean check jar`. ## 2026-08-28 — Raid-earned Pocket Base flight - Made a successful raid victory by the owner inside their own Pocket Base permanently unlock owner-only Survival flight. - Limited Pocket Base flight to its expanding horizontal boundary plus a 16-block warning buffer while allowing the world's full build height. - Persisted unlocks with safe locked defaults for existing records and exposed progress through chat status and the native settings dialog. - Verified 140 tests and the Java 25 plugin artifact with `./gradlew clean check jar`. ## 2026-08-28 — Shared Pocket Base flight portals - Added one persistent owner-activated gold-block flight portal per Pocket Base after the raid unlock. - Granted owners and guests temporary controlled flight after portal collision, independently of the owner's persisted automatic-flight preference. - Applied the expanding Pocket Base boundary plus a 16-block warning buffer to both automatic and portal-granted flight. - Restored Back buttons from nested native dialog screens to the main Base Settings dashboard. - Verified 149 tests and the Java 25 plugin artifact with `./gradlew clean check jar`.