Skip to content

Feature Plan: Resource Pack Pipeline โ€‹

Summary โ€‹

  • Owner: Freddi
  • Status: Delivery
  • Target Release: Rolling
  • Backlog Entry: Projects/Uebliche/agendas.md โ–ธ ๐Ÿ“ฆ Backlog โ–ธ Resource pack automation

Goals โ€‹

  • Build and ship a unified resource pack for all network servers from server-managed assets.
  • Allow designers to manage textures, models, and metadata from the desktop editor.
  • Keep pack generation deterministic, versioned, and compatible with runtime asset loading.

Scope โ€‹

  • Compile assets through ResourcePackBuilder and coordinate distribution via ResourcePackManager.
  • Bootstrap default assets with features/resourcepack/support/AssetsBootstrapper.
  • Serve resource pack metadata to game clients through Minestom hooks.
  • Integrate with the desktop app editors for textures and model uploads.
  • Exclude in-game editing tools beyond what the desktop app already offers.

Implementation Outline โ€‹

  1. Asset ingestion: REST endpoints in EditorWebService write to storage and notify ResourcePackManager.
  2. Build pipeline: ResourcePackBuilder assembles pack zip, applying overrides and version stamping.
  3. Distribution: Minestom handshake advertises the latest pack URL and hash to connecting players.
  4. Tooling: Desktop app editors (Textures.vue, ItemModels.vue) upload assets with validation.
  5. Ops: Document packaging steps and release commands here and in the vault mirror.
  6. Server automation: ResourcePackBuilder runs PackSquash, uploads artifacts to Spaces, and upserts Resourcepack metadata after each commit.

Dependencies โ€‹

  • File storage (S3-compatible) mounted via Docker secrets for pack artifacts.
  • Minestom resource pack API for client delivery.
  • Desktop app asset editors and REST endpoints exposed by the server.

Risks & Mitigations โ€‹

  • Large packs: Implement differential rebuilds and monitor build times via features/monitoring.
  • Broken assets: Add lint checks and staging previews in the desktop editor before publishing.
  • Hash drift: Version pack outputs and store metadata in Mongo to avoid stale cache issues.

Validation Plan โ€‹

  • Automated tests for builder utilities (e.g., JSON merging, hash calculation).
  • Manual smoke test by connecting a client to dev-compose and verifying pack download.
  • Track build success metrics and failures in monitoring dashboards.

Notes & Decisions โ€‹

  • Document major asset pipeline changes (file structure, pack format) under agenda โš–๏ธ Decisions.
  • Keep this plan mirrored in /Projects/Uebliche/docs/gameserver/features/resourcepack/plan.md.
  • Environment contract: RESOURCEPACK_S3_BUCKET, optional RESOURCEPACK_S3_PREFIX, RESOURCEPACK_PUBLIC_BASE_URL, and RESOURCEPACK_S3_REGION must be provided alongside s3_access_id/s3_secret_key secrets for automated publishing.

References โ€‹

  • services/gameserver/src/main/java/net/uebliche/features/resourcepack/ResourcePackBuilder.java
  • services/gameserver/src/main/java/net/uebliche/features/resourcepack/ResourcePackManager.java
  • services/gameserver/src/main/java/net/uebliche/features/resourcepack/support/AssetsBootstrapper.java
  • Desktop textures and model editors under app/dashboard/src/views/home