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

76 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 `client` → `tooling/sync-server-mods.sh`.
4. `tooling/build-modlist.py` (new, see `18-landing-rework.md`) regenerates
`landing/src/data/mods.json` + logos → rebuild landing.
## Related
- `04-mods.md` — distribution-fed mod system, classify/sync, sides.
- `18-landing-rework.md` — the landing mod-list component + `mods.json` generator.