Files
ulicraft-server-v1/plan/17-mod-shortlist.md
Oier Bravo Urtasun 6c7e259fcb feat(landing): join-flow rework, player rosters, account page, mod list
Execute plan/18 (WS1-6) + plan/17.

- WS1: homepage join = 3 steps off packwiz (register -> UlicraftLauncher
  -> join); per-OS downloads from a synced launcher-manifest.json (schema +
  example committed); Fjord moved to its own /fjord page. Drop packwizUrl.
- WS2/3: mc-status gains an isolated /players endpoint (admin login ->
  Drasl GET /players, own client+TTL+token cache, never blocks the status
  path); online + registered rosters render shared name+avatar tiles;
  AVATAR_MODE env (default headiso).
- WS4: /account skin CRUD via browser-direct Drasl (login -> upload ->
  reset), in-memory token, players[0]; register relinks "Manage it here".
- WS5: footer link to status.${BASE_DOMAIN} in every footer.
- WS6: tooling/build-modlist.py generates mods.json + extracted logos from
  the distribution forgemods; ModList.astro renders a flat list; stat tile
  fed from the count.

Manifest/mods loaders read at build with a process.cwd() fallback (the
import.meta.url-only path does not resolve in Astro's bundled build).

New env: AVATAR_MODE, DRASL_ADMIN_USERNAME, DRASL_ADMIN_PASSWORD (mc-status
only). Generated mods.json / launcher-manifest.json / logos are gitignored;
.example.json files document the shapes. Build: 12 pages; mc-status builds.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 18:17:14 +02:00

3.9 KiB
Raw Permalink Blame History

Mod shortlist + landing mod-list component (WS6)

Status: PLANNED — not started. Two separable deliverables: (1) a curated kitchen-sink gap doc (this file), (2) an auto-generated mods.json + logos that feed a flat mod-list component on the landing page (see also 18-landing-rework.md).

TL;DR

  • Current pack (76 jars, mods-sides.json) is a polished vanilla+ QoL/perf base, not yet kitchen-sink. Strong perf + QoL + storage + FTB + voice; empty on tech and magic, thin on worldgen, no map mod.
  • Jars live in the external distribution repo ($DISTRIBUTION_WEB_ROOT/servers/ ulicraft-1.21.1/forgemods/required/*.jar, Nebula-managed). Adding mods happens there, not in this repo. This doc is a shortlist only; depth = light (names by area, verify NeoForge 1.21.1 at add-time — no per-mod version/link research).
  • The landing component shows the installed pack (full client set), auto-generated from the jars — a different dataset from this shortlist. Flat alphabetical, pretty names, extracted logos, no categories, no Modrinth/CF links.

Current pack — what's already in (76 jars)

  • Perf: sodium, sodium-extra, iris, immediatelyfast, entityculling, ferritecore, lithium, spark.
  • QoL: JEI, Jade(+addons), JER, JEProfessions, appleskin, MouseTweaks, Controlling, Searchables, inventoryessentials, polymorph, rightclickharvest, simplemagnets, fastleafdecay, torchmaster, trashcans, corpse(+curioscompat), lootr, comforts, BetterF3, tagtooltips, cardboardboxes.
  • Storage: sophisticatedbackpacks(+core), functionalstorage(+more).
  • Farm/decor/build: FarmersDelight, FramedBlocks, handcrafted.
  • FTB utils: chunks, essentials, library, teams, ultimine.
  • Voice: Simple Voice Chat (voicechat).
  • Scripting/guide: KubeJS(+rhino, +delight), ponderjs, Patchouli.
  • Libs: architectury, balm, cloth-config, configured, curios, resourcefullib, supermartijn642 core/config, jamlib, baguettelib, titanium, utilitarian, YungsApi, Necronomicon, yacl.

Gaps vs kitchen-sink (tech + magic + exploration + QoL)

  • Tech — empty. Candidates: Create, Mekanism, Immersive Engineering, Applied Energistics 2, Thermal Series, Powah. (Pick a subset; Create is the anchor.)
  • Magic — empty. Candidates: Ars Nouveau, Botania, Iron's Spells 'n Spellbooks, Eidolon.
  • Worldgen — thin (only YungsApi + ExplorersCompass). Candidates: Terralith, Tectonic, YUNG's structure set (Better Dungeons/Mineshafts/Strongholds…), Repurposed Structures, William Wythers' Overhauled Overworld.
  • Map — none. Candidate: Xaero's Minimap + Worldmap.
  • Server-side perf (optional): ModernFix, C2ME.

Orphaned dependencies (cleanup)

  • ponderjs present but no Create — ponder is Create's. Add Create or drop.
  • Necronomicon present but no Iron's Spells — it's Iron's Spells' lib. Add Iron's Spells or drop.

Curation tradeoff

Adding the tech+magic+worldgen anchors pushes 76 → 100+ jars, near the stated 50100 ceiling, and raises the RAM/stability bar (INIT_MEMORY 4G/MAX_MEMORY 10G). Curate deliberately; verify each candidate's NeoForge 1.21.1 build + the 21.1.233 loader pin at add-time.

Execution (external repo, when ready)

  1. Add jars in the distribution repo (Nebula forgemods/required/), keep the NeoForge 1.21.1 builds matching the 21.1.233 pin.
  2. release-distro.sh regenerates distribution.json + uploads.
  3. Back in this repo: tooling/classify-mods.py (seed sides) → hand-edit new client-cosmetic entries to clienttooling/sync-server-mods.sh.
  4. tooling/build-modlist.py (new, see 18-landing-rework.md) regenerates landing/src/data/mods.json + logos → rebuild landing.
  • 04-mods.md — distribution-fed mod system, classify/sync, sides.
  • 18-landing-rework.md — the landing mod-list component + mods.json generator.