docs(mods): sync docs to the 164-jar kitchen-sink pack
The pack grew 76 -> 164 jars (133 both / 31 client) without any doc update. Create + ~18 addons filled the tech gap, ars_nouveau + ars_creo the magic gap, and the full YUNG's/Moog's/TerraBlender set the worldgen gap, which also resolved the ponderjs orphan. - 17-mod-shortlist: rewritten around the current pack; gap doc marked done, remaining gaps narrowed to map mod, Necronomicon orphan, C2ME. - 04-mods: jar counts updated; the 24/52 cutover split is now labelled historical alongside the current 31/133. - CLAUDE.md: WS6 partly done, stale "65 default both" line dropped, and the ~50-100 mod ceiling flagged as knowingly exceeded in both places. MAX_MEMORY 10G was sized for that old assumption - noted for re-check. - 18-landing-rework: mods.json count 76 -> 164, "50+" stat tile noted stale. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
0bf42d5797
commit
7164371d34
4 files changed
+78
-53
No files matched your search
@@ -12,7 +12,9 @@ with `plan/` or the code, those win.
|
|||||||
|
|
||||||
- **Players**: 4–10 friends
|
- **Players**: 4–10 friends
|
||||||
- **Modpack vibe**: Kitchen-sink (tech + magic + exploration + QoL)
|
- **Modpack vibe**: Kitchen-sink (tech + magic + exploration + QoL)
|
||||||
- **Pack approach**: Manually curated (~50–100 mods), NOT a forked existing pack
|
- **Pack approach**: Manually curated, NOT a forked existing pack. Original target
|
||||||
|
~50–100 mods; **actual is 164 jars** (2026-07-20, kitchen-sink expansion) —
|
||||||
|
ceiling knowingly exceeded, watch RAM
|
||||||
- **Minecraft version**: 1.21.1, **NeoForge** (not classic Forge)
|
- **Minecraft version**: 1.21.1, **NeoForge** (not classic Forge)
|
||||||
- **Auth/skins**: Drasl (Yggdrasil-compatible), **password login** — no OIDC
|
- **Auth/skins**: Drasl (Yggdrasil-compatible), **password login** — no OIDC
|
||||||
- **DNS**: handled OUTSIDE this repo; point `${BASE_DOMAIN}` + subdomains at the host
|
- **DNS**: handled OUTSIDE this repo; point `${BASE_DOMAIN}` + subdomains at the host
|
||||||
@@ -131,7 +133,9 @@ while every other check passed.
|
|||||||
|
|
||||||
### Memory sizing
|
### Memory sizing
|
||||||
~50–100 mods, 8 players, 1.21.1: `INIT_MEMORY: 4G`, `MAX_MEMORY: 10G`,
|
~50–100 mods, 8 players, 1.21.1: `INIT_MEMORY: 4G`, `MAX_MEMORY: 10G`,
|
||||||
`USE_AIKAR_FLAGS: TRUE`.
|
`USE_AIKAR_FLAGS: TRUE`. **The pack is now 164 jars / 133 server-side** (Create
|
||||||
|
ecosystem + Ars Nouveau + full worldgen) — sized for the old 50–100 assumption, so
|
||||||
|
`MAX_MEMORY` may need a bump. Re-check heap usage under load before adding more.
|
||||||
|
|
||||||
## Config (.env)
|
## Config (.env)
|
||||||
|
|
||||||
@@ -157,13 +161,12 @@ mirrored at apex `/launcher/`. Per guest:
|
|||||||
## Open / Pending Work
|
## Open / Pending Work
|
||||||
|
|
||||||
### Roadmap — mod migration follow-ups (post packwiz→04-mods)
|
### Roadmap — mod migration follow-ups (post packwiz→04-mods)
|
||||||
- [ ] **Curate `mods-sides.json` cosmetic-client mods.** tomllib auto-flagged 11
|
- [ ] **Curate `mods-sides.json` cosmetic-client mods.** Pack is now **164 jars**
|
||||||
hard client-only mods; the other 65 default `both`, including client-cosmetic
|
(2026-07-20): **31 `client` / 133 `both`**. The `both` set still contains
|
||||||
ones (BetterF3, entityculling, MouseTweaks, ponderjs, fancymenu, drippy, melody,
|
client-cosmetic mods that load harmlessly on the server but waste RAM — hand-edit
|
||||||
welcomescreen, Searchables, JustEnoughResources, TravelersTitles, yeetus…) that
|
them to `client` so `sync-server-mods.sh` drops them from `./server-mods`.
|
||||||
load harmlessly on the server but waste RAM. Hand-edit them to `client` so
|
(Also review `appleskin`, flagged `client` — flip to `both` if server-side food
|
||||||
`sync-server-mods.sh` drops them from `./server-mods`. (Also review `appleskin`,
|
data wanted.)
|
||||||
flagged `client` — flip to `both` if server-side food data wanted.)
|
|
||||||
### Landing rework + mod list (PLANNED — see `plan/18-landing-rework.md`)
|
### Landing rework + mod list (PLANNED — see `plan/18-landing-rework.md`)
|
||||||
Full design settled across WS1–WS6; all tasks unchecked, ready to execute.
|
Full design settled across WS1–WS6; all tasks unchecked, ready to execute.
|
||||||
- [ ] **WS1 — Join flow off packwiz.** Homepage = UlicraftLauncher, 3 steps
|
- [ ] **WS1 — Join flow off packwiz.** Homepage = UlicraftLauncher, 3 steps
|
||||||
@@ -181,12 +184,15 @@ Full design settled across WS1–WS6; all tasks unchecked, ready to execute.
|
|||||||
- [ ] **WS5 — Footer status link** to `status.${BASE_DOMAIN}` (nav unchanged).
|
- [ ] **WS5 — Footer status link** to `status.${BASE_DOMAIN}` (nav unchanged).
|
||||||
|
|
||||||
- [ ] **WS6 — Mod shortlist + list component (`plan/17-mod-shortlist.md`).**
|
- [ ] **WS6 — Mod shortlist + list component (`plan/17-mod-shortlist.md`).**
|
||||||
Light gap doc: current 76-jar pack is vanilla+ QoL/perf; **empty** on tech &
|
Gap doc part **DONE**: pack filled out to **164 jars** (2026-07-20) — Create
|
||||||
magic, thin worldgen, no map; orphan deps `ponderjs`/`Necronomicon`. Landing
|
ecosystem (tech), Ars Nouveau + ars_creo (magic), full YUNG's + Moog's +
|
||||||
mod-list component = auto-generated `mods.json` + extracted logos from the
|
TerraBlender (worldgen); `ponderjs` orphan resolved by Create. Still open: **no
|
||||||
distribution forgemods (`tooling/build-modlist.py`), flat alphabetical, pretty
|
map mod** (Xaero's), `Necronomicon` orphan (no Iron's Spells), and 164 > the
|
||||||
names, no categories/links; feeds the "50+" stat tile.
|
stated 50–100 ceiling. Still to build: landing mod-list component =
|
||||||
- [ ] Server-side perf mods (C2ME, etc.).
|
auto-generated `mods.json` + extracted logos from the distribution forgemods
|
||||||
|
(`tooling/build-modlist.py`), flat alphabetical, pretty names, no
|
||||||
|
categories/links; feeds the "50+" stat tile.
|
||||||
|
- [ ] Server-side perf mods (C2ME, etc. — `modernfix` already in the pack).
|
||||||
- [x] **Filestash file share** (`files.`, 2026-07-14) — live in prod. One shared
|
- [x] **Filestash file share** (`files.`, 2026-07-14) — live in prod. One shared
|
||||||
htpasswd login, writable, rendered `:ro` config. See `plan/20-files.md`.
|
htpasswd login, writable, rendered `:ro` config. See `plan/20-files.md`.
|
||||||
Follow-ups: add the Uptime Kuma HTTP monitor for `files.`; the share is
|
Follow-ups: add the Uptime Kuma HTTP monitor for `files.`; the share is
|
||||||
|
|||||||
+6
-4
@@ -6,7 +6,8 @@
|
|||||||
|
|
||||||
## Why drop packwiz
|
## Why drop packwiz
|
||||||
|
|
||||||
- The packwiz index tracked only **9** mods while the real modset (76 jars) lives
|
- The packwiz index tracked only **9** mods while the real modset (76 jars at the
|
||||||
|
time of cutover; 164 as of 2026-07-20) lives
|
||||||
in the distribution repo — packwiz was half-built and stale.
|
in the distribution repo — packwiz was half-built and stale.
|
||||||
- Manual packwiz curation (`.tmpl` render → `refresh` → re-hash) is the flagged
|
- Manual packwiz curation (`.tmpl` render → `refresh` → re-hash) is the flagged
|
||||||
pain point, and a single missing file (`custom/.gitkeep`) crashlooped the
|
pain point, and a single missing file (`custom/.gitkeep`) crashlooped the
|
||||||
@@ -20,7 +21,7 @@
|
|||||||
```
|
```
|
||||||
ulicraft-distribution/dist (another repo, = $DISTRIBUTION_WEB_ROOT)
|
ulicraft-distribution/dist (another repo, = $DISTRIBUTION_WEB_ROOT)
|
||||||
servers/ulicraft-1.21.1/
|
servers/ulicraft-1.21.1/
|
||||||
forgemods/required/*.jar ← 76 jars, Nebula-managed (SOURCE OF TRUTH)
|
forgemods/required/*.jar ← 164 jars (2026-07-20), Nebula-managed (SOURCE OF TRUTH)
|
||||||
distribution.json ← generated by Nebula; CLIENT install list
|
distribution.json ← generated by Nebula; CLIENT install list
|
||||||
│ │
|
│ │
|
||||||
│ caddy distribution. vhost │ HeliosLauncher reads it →
|
│ caddy distribution. vhost │ HeliosLauncher reads it →
|
||||||
@@ -196,8 +197,9 @@ welcomescreen, yeetusexperimentus` — on top of the 11 tomllib auto-caught
|
|||||||
(sodium, sodium-extra, iris, ImmediatelyFast, appleskin, Controlling, BridgingMod,
|
(sodium, sodium-extra, iris, ImmediatelyFast, appleskin, Controlling, BridgingMod,
|
||||||
CustomSkinLoader, entity_model_features, entity_texture_features, tagtooltips).
|
CustomSkinLoader, entity_model_features, entity_texture_features, tagtooltips).
|
||||||
|
|
||||||
**Current state: 24 `client` / 52 `both`.** The 52 may still hide a client-only
|
**State at first cutover: 24 `client` / 52 `both`. Current (2026-07-20, post
|
||||||
mod that loaded without crashing; if a future restart trips another
|
tech/magic/worldgen expansion): 31 `client` / 133 `both`.** The `both` set may
|
||||||
|
still hide a client-only mod that loaded without crashing; if a future restart trips another
|
||||||
`invalid dist DEDICATED_SERVER`, flip that one jar to `client` and re-sync — same
|
`invalid dist DEDICATED_SERVER`, flip that one jar to `client` and re-sync — same
|
||||||
one-line loop. When excluding, prefer leaf mods; if a `both` mod hard-depends on
|
one-line loop. When excluding, prefer leaf mods; if a `both` mod hard-depends on
|
||||||
the one you exclude you'll get a `Missing mandatory dependency` instead — put it
|
the one you exclude you'll get a `Missing mandatory dependency` instead — put it
|
||||||
|
|||||||
+48
-33
@@ -1,14 +1,19 @@
|
|||||||
# Mod shortlist + landing mod-list component (WS6)
|
# Mod shortlist + landing mod-list component (WS6)
|
||||||
|
|
||||||
> **Status: PLANNED — not started.** Two separable deliverables: (1) a curated
|
> **Status: gap doc DONE (pack filled out 2026-07-20), landing component still
|
||||||
> kitchen-sink gap doc (this file), (2) an auto-generated `mods.json` + logos that
|
> PLANNED.** Two separable deliverables: (1) a curated kitchen-sink gap doc (this
|
||||||
> feed a flat mod-list component on the landing page (see also `18-landing-rework.md`).
|
> 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
|
## TL;DR
|
||||||
|
|
||||||
- Current pack (76 jars, `mods-sides.json`) is a polished **vanilla+ QoL/perf** base,
|
- The pack is now **kitchen-sink** — **164 jars** (`mods-sides.json`: 133 `both`,
|
||||||
**not yet kitchen-sink**. Strong perf + QoL + storage + FTB + voice; **empty** on
|
31 `client`), up from the 76-jar vanilla+ base this doc originally described.
|
||||||
tech and magic, **thin** on worldgen, **no** map mod.
|
Tech (Create + ~18 addons), magic (Ars Nouveau + ars_creo) and worldgen (full
|
||||||
|
YUNG's set + Moog's structures + TerraBlender) all landed. **Map is still the
|
||||||
|
only open gap.**
|
||||||
|
- **164 jars is over the stated 50–100 ceiling** in `CLAUDE.md`. Accepted for now;
|
||||||
|
it moves the RAM/stability bar (`INIT_MEMORY 4G`/`MAX_MEMORY 10G` — watch it).
|
||||||
- Jars live in the **external distribution repo** (`$DISTRIBUTION_WEB_ROOT/servers/
|
- Jars live in the **external distribution repo** (`$DISTRIBUTION_WEB_ROOT/servers/
|
||||||
ulicraft-1.21.1/forgemods/required/*.jar`, Nebula-managed). Adding mods happens
|
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
|
there, **not** in this repo. This doc is a shortlist only; depth = **light** (names
|
||||||
@@ -17,48 +22,58 @@
|
|||||||
from the jars — a different dataset from this shortlist. Flat alphabetical, pretty
|
from the jars — a different dataset from this shortlist. Flat alphabetical, pretty
|
||||||
names, extracted logos, no categories, no Modrinth/CF links.
|
names, extracted logos, no categories, no Modrinth/CF links.
|
||||||
|
|
||||||
## Current pack — what's already in (76 jars)
|
## Current pack — what's in (164 jars)
|
||||||
|
|
||||||
|
- **Tech — Create ecosystem (the anchor):** create, createaddition, createdeco,
|
||||||
|
create_connected, copycats, create-central-kitchen, create-enchantment-industry,
|
||||||
|
create-integrated-farming, create_jetpack(+curios), create_mechanical_chicken,
|
||||||
|
create_mechanical_extruder, create_mechanical_spawner, mechanical_cow,
|
||||||
|
mechanicals, createsifter, createultimine, createornithopterglider,
|
||||||
|
CreateDragonsPlus, sliceanddice, sophisticatedbackpackscreateintegration,
|
||||||
|
kubejs-create. Non-Create tech: laserio, enderrf, EnderStorage, melter,
|
||||||
|
mob_grinding_utils, buildinggadgets2, charginggadgets, titanium, CodeChickenLib.
|
||||||
|
- **Magic:** ars_nouveau, ars_creo (Ars×Create bridge).
|
||||||
|
- **Worldgen/exploration:** full YUNG's set (BetterCaves, CaveBiomes, Bridges,
|
||||||
|
BetterDungeons, BetterMineshafts, BetterStrongholds, BetterDesertTemples,
|
||||||
|
BetterJungleTemples, BetterOceanMonuments, BetterWitchHuts,
|
||||||
|
BetterNetherFortresses, BetterEndIsland), Moog's (Voyager, End, Nether,
|
||||||
|
MissingVillages, moogs_structures), TerraBlender, ExplorersCompass,
|
||||||
|
world_dimension_nexus, HangGlider, fishingoverhaul.
|
||||||
- **Perf:** sodium, sodium-extra, iris, immediatelyfast, entityculling, ferritecore,
|
- **Perf:** sodium, sodium-extra, iris, immediatelyfast, entityculling, ferritecore,
|
||||||
lithium, spark.
|
lithium, modernfix, spark.
|
||||||
- **QoL:** JEI, Jade(+addons), JER, JEProfessions, appleskin, MouseTweaks, Controlling,
|
- **QoL:** JEI, Jade(+addons), JER, JEProfessions, appleskin, MouseTweaks, Controlling,
|
||||||
Searchables, inventoryessentials, polymorph, rightclickharvest, simplemagnets,
|
Searchables, inventoryessentials, polymorph, rightclickharvest, simplemagnets,
|
||||||
fastleafdecay, torchmaster, trashcans, corpse(+curioscompat), lootr, comforts,
|
fastleafdecay, torchmaster, trashcans, corpse(+curioscompat), lootr, comforts,
|
||||||
BetterF3, tagtooltips, cardboardboxes.
|
BetterF3, tagtooltips, cardboardboxes, EasyAnvils, EasyMagic, easydisenchanting,
|
||||||
|
easy-villagers, easy-piglins, EasierSleeping, solcarrot, Neat, Ping-Wheel,
|
||||||
|
moreoverlays, ToastControl, ExtremeSoundMuffler, colorfulhearts, UsefulSlime.
|
||||||
- **Storage:** sophisticatedbackpacks(+core), functionalstorage(+more).
|
- **Storage:** sophisticatedbackpacks(+core), functionalstorage(+more).
|
||||||
- **Farm/decor/build:** FarmersDelight, FramedBlocks, handcrafted.
|
- **Farm/decor/build:** FarmersDelight, handcrafted, rechiseled, amendments,
|
||||||
|
immersive_paintings, etched, emotecraft.
|
||||||
- **FTB utils:** chunks, essentials, library, teams, ultimine.
|
- **FTB utils:** chunks, essentials, library, teams, ultimine.
|
||||||
- **Voice:** Simple Voice Chat (`voicechat`).
|
- **Voice:** Simple Voice Chat (`voicechat`).
|
||||||
- **Scripting/guide:** KubeJS(+rhino, +delight), ponderjs, Patchouli.
|
- **Scripting/guide:** KubeJS(+rhino, +delight, +create), lootjs, toolsjs, ponderjs,
|
||||||
- **Libs:** architectury, balm, cloth-config, configured, curios, resourcefullib,
|
Patchouli.
|
||||||
supermartijn642 core/config, jamlib, baguettelib, titanium, utilitarian, YungsApi,
|
- **Server-custom:** `ulicraftmod` (this group's own mod).
|
||||||
Necronomicon, yacl.
|
- **Libs:** architectury, balm, cloth-config, configured, curios, caelus, geckolib,
|
||||||
|
kotlinforforge, moonlight, Placebo, PuzzlesLib, resourcefullib, CreativeCore,
|
||||||
|
supermartijn642 core/config, jamlib, baguettelib, txnilib, fzzy_config,
|
||||||
|
titanium, utilitarian, YungsApi, Necronomicon, yacl, konkrete.
|
||||||
|
|
||||||
## Gaps vs kitchen-sink (tech + magic + exploration + QoL)
|
## Remaining gaps
|
||||||
|
|
||||||
- [ ] **Tech — empty.** Candidates: Create, Mekanism, Immersive Engineering, Applied
|
- [ ] **Map — none.** Candidate: Xaero's Minimap + Worldmap. (`Ping-Wheel` and
|
||||||
Energistics 2, Thermal Series, Powah. (Pick a subset; Create is the anchor.)
|
`ftb-chunks`' claim map do not replace a minimap.)
|
||||||
- [ ] **Magic — empty.** Candidates: Ars Nouveau, Botania, Iron's Spells 'n Spellbooks,
|
- [ ] **Server-side perf (optional):** C2ME. (`modernfix` is in.)
|
||||||
Eidolon.
|
- [ ] Optional second magic pillar (Botania / Iron's Spells) — Ars alone covers the
|
||||||
- [ ] **Worldgen — thin** (only `YungsApi` + `ExplorersCompass`). Candidates: Terralith,
|
vibe; only add if the pack budget allows.
|
||||||
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)
|
## Orphaned dependencies
|
||||||
|
|
||||||
- [ ] **`ponderjs`** present but **no Create** — ponder is Create's. Add Create or drop.
|
- [x] **`ponderjs`** — resolved, Create is in the pack.
|
||||||
- [ ] **`Necronomicon`** present but **no Iron's Spells** — it's Iron's Spells' lib.
|
- [ ] **`Necronomicon`** present but **no Iron's Spells** — it's Iron's Spells' lib.
|
||||||
Add Iron's Spells or drop.
|
Add Iron's Spells or drop.
|
||||||
|
|
||||||
## Curation tradeoff
|
|
||||||
|
|
||||||
Adding the tech+magic+worldgen anchors pushes 76 → 100+ jars, near the stated
|
|
||||||
50–100 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)
|
## Execution (external repo, when ready)
|
||||||
|
|
||||||
1. Add jars in the distribution repo (Nebula `forgemods/required/`), keep the NeoForge
|
1. Add jars in the distribution repo (Nebula `forgemods/required/`), keep the NeoForge
|
||||||
|
|||||||
@@ -158,7 +158,7 @@ offline) reads `$DISTRIBUTION_WEB_ROOT/servers/ulicraft-1.21.1/forgemods/require
|
|||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"schemaVersion": 1,
|
"schemaVersion": 1,
|
||||||
"count": 76,
|
"count": 164,
|
||||||
"mods": [
|
"mods": [
|
||||||
{ "id": "jei", "name": "Just Enough Items (JEI)", "version": "19.27.0.340",
|
{ "id": "jei", "name": "Just Enough Items (JEI)", "version": "19.27.0.340",
|
||||||
"authors": "mezz", "description": "…", "logo": "/mod-logos/jei.png" }
|
"authors": "mezz", "description": "…", "logo": "/mod-logos/jei.png" }
|
||||||
@@ -168,6 +168,8 @@ offline) reads `$DISTRIBUTION_WEB_ROOT/servers/ulicraft-1.21.1/forgemods/require
|
|||||||
|
|
||||||
`ModList.astro` (new) imports `mods.json` → flat grid (logo + name + version). The
|
`ModList.astro` (new) imports `mods.json` → flat grid (logo + name + version). The
|
||||||
homepage stat tile (`site.ts` `stats[0].key "50+"`) is fed from `mods.json.count`.
|
homepage stat tile (`site.ts` `stats[0].key "50+"`) is fed from `mods.json.count`.
|
||||||
|
(The hardcoded `"50+"` fallback is stale — the pack is 164 jars as of 2026-07-20;
|
||||||
|
bump it to `"150+"` when wiring the tile.)
|
||||||
|
|
||||||
Tasks:
|
Tasks:
|
||||||
- [ ] `tooling/build-modlist.py` (jar parse + logo extract + `mods.json`).
|
- [ ] `tooling/build-modlist.py` (jar parse + logo extract + `mods.json`).
|
||||||
|
|||||||
Reference in new issue
Block a user