113 lines
5.9 KiB
Markdown
113 lines
5.9 KiB
Markdown
# SurviePote — Atlas (Nebula) : configuration plug-and-play
|
|
|
|
Génère `root/distribution.json` pour le launcher Helios (SurviePote, MC 26.3, Fabric Loader 0.20.0).
|
|
Le launcher lit la distribution à `https://mcpv.ihorizon.org/distribution.json`
|
|
(cf `launcher/app/assets/js/distromanager.js`).
|
|
|
|
## 1. Arborescence `root/`
|
|
|
|
```
|
|
atlas/
|
|
├── .env # ROOT=./root, BASE_URL, JAVA_EXECUTABLE (voir §2)
|
|
├── SURVIEPOTE.md # ce fichier
|
|
└── root/ # web root à servir (TNDev: NE PAS committer les .jar, voir .gitignore)
|
|
├── distribution.json # fichier généré, servi à https://mcpv.ihorizon.org/distribution.json
|
|
├── meta/
|
|
│ └── distrometa.json # rss + discord client (globaux)
|
|
├── schemas/ # schémas JSON régénérés par `init root` / `g schemas`
|
|
├── modpacks/curseforge/ # vide (import CurseForge, inutilisé)
|
|
└── servers/
|
|
└── SurviePote-26.3/
|
|
├── servermeta.json # nom, adresse, discord, main/autoconnect
|
|
├── SurviePote-26.3.png # icône serveur (copiée de launcher/build/icon.png)
|
|
├── fabricmods/
|
|
│ ├── required/ # 31 mods partagés (client+serveur), TOUS requis
|
|
│ ├── optionalon/ # vide
|
|
│ └── optionaloff/ # vide
|
|
├── files/
|
|
│ ├── resourcepacks/FallPack_26.3_v3.1.zip # module File, chemin préservé
|
|
│ └── shaderpacks/Revelation-dev.zip # module File, chemin préservé
|
|
└── libraries/ # vide (libs Fabric résolues à la volée via FabricResolver)
|
|
```
|
|
|
|
## 2. `.env`
|
|
|
|
```properties
|
|
JAVA_EXECUTABLE=/run/current-system/sw/bin/java
|
|
ROOT=./root
|
|
BASE_URL=https://mcpv.ihorizon.org/
|
|
HELIOS_DATA_FOLDER=
|
|
# DEV ALTERNATIVE (décommenter en dev local):
|
|
# BASE_URL=http://localhost:8080/
|
|
```
|
|
|
|
- `BASE_URL` **doit** finir par `/` : c'est le préfixe des URLs dans `distribution.json`.
|
|
En dev, passer à `http://localhost:8080/` puis régénérer (`g distro`).
|
|
- Écart volontaire : la consigne disait `/usr/bin/java`, inexistant sur NixOS ;
|
|
on pointe vers le binaire réel (`readlink -f $(which java)`).
|
|
- `HELIOS_DATA_FOLDER` vide = pas de `--installLocal` (pas de dossier Helios local).
|
|
|
|
## 3. Re-générer
|
|
|
|
```bash
|
|
cd atlas
|
|
npm install # une fois (Node 22 requis, testé en 24.14.0 OK)
|
|
npm run start -- init root # (re)crée root/meta, root/schemas, root/servers
|
|
npm run faststart -- g server SurviePote 26.3 --fabric 0.20.0 # un seul serveur
|
|
# ... peupler fabricmods/ + files/ (voir §4), éditer servermeta.json ...
|
|
npm run faststart -- g distro # (re)génère root/distribution.json
|
|
```
|
|
|
|
`npm run start` rebuild avant d'exécuter ; `faststart` réutilise `dist/` (plus rapide).
|
|
Ne **jamais** utiliser `--installLocal` ici (pas de Helios local).
|
|
|
|
## 4. Où sont mods / files, tri, choix d'implémentation
|
|
|
|
- Source mods : `~/.local/share/PrismLauncher/instances/26.3/minecraft/mods/*.jar`
|
|
(copie physique par `cp`, pas de symlink).
|
|
- `fabricmods/required/` (31) : tous les mods **sauf 15 client-only purs** (même logique
|
|
que `server/`) : sodium, iris, continuity, dynamic-fps, xaerominimap, xaeroworldmap,
|
|
skinlayers3d, waveycapes, capes, chat_heads, morechathistory, fast-ip-ping, modmenu,
|
|
appleskin, vanillarice.
|
|
- Tri : Nebula trie les mods par nom de fichier (`BaseModStructure.getSpecModel`),
|
|
donc « tri mods auto » = natif, rien à faire.
|
|
- **Choix resourcepack/shader** : `src/structure/spec_model/module/File.struct.ts`
|
|
(`MiscFileStructure extends ModuleStructure`, scan récursif, pas de namespaces
|
|
`required/optionalon/optionaloff`) — contrairement à `FabricModStructure`
|
|
(cf `ToggleableModule.struct.ts`). Les modules `File` sont donc **toujours requis**.
|
|
Le choix user « optionnels ON » n'est **pas exprimable** en natif : les mettre en
|
|
`fabricmods/optionalon` casserait le typage (`Type.FabricMod`, pas de `artifact.path`).
|
|
→ FallPack + Revelation sont en `files/resourcepacks/` et `files/shaderpacks/`
|
|
(chemins relatifs préservés dans `artifact.path`, URLs sous `.../files/...`).
|
|
Pour du vrai optionnel, il faudrait patcher Nebula (rendre `MiscFileStructure`
|
|
toggleable) ou gérer ça côté launcher.
|
|
|
|
## 5. Servir via HTTP
|
|
|
|
Le web root = `atlas/root/` (les URLs sont relatives à `BASE_URL`).
|
|
|
|
- Dev : `cd atlas/root && python3 -m http.server 8080`
|
|
(+ `.env` → `BASE_URL=http://localhost:8080/`, régénérer).
|
|
- Prod (TNDev) : servir `atlas/root/` depuis la racine `https://mcpv.ihorizon.org/`
|
|
(nginx `root` ou copie du contenu), de sorte que
|
|
`https://mcpv.ihorizon.org/distribution.json` réponde.
|
|
|
|
## 6. TODO restants
|
|
|
|
- [ ] Discord Rich Presence : `root/meta/distrometa.json` → `discord.clientId` vide
|
|
(+ `smallImageText/Key` vides) — mettre le vrai clientId ou supprimer l'objet.
|
|
- [ ] RSS : `root/meta/distrometa.json` → `rss` vide — mettre l'URL du flux ou laisser vide.
|
|
- [ ] Discord serveur : placeholder `SurviePote / seal-circle` dans `servermeta.json` —
|
|
valider `largeImageKey` (asset du portail Discord).
|
|
- [ ] Icône : `SurviePote-26.3.png` = copie de `launcher/build/icon.png` (143 K) ;
|
|
le champ `icon` de `servermeta.json` garde le texte d'aide (URL invalide),
|
|
Nebula utilise donc le PNG (voir `Server.struct.ts` : fallback fichier).
|
|
Remplacer par une vraie icône si besoin.
|
|
- [ ] `BASE_URL` finale : vérifier `https://mcpv.ihorizon.org/` + déploiement du contenu
|
|
de `root/` à la racine web, puis tester le launcher en prod.
|
|
- [ ] Client-only exclus (sodium, iris, xaero…) : si les clients doivent les recevoir
|
|
via le launcher, les ajouter en `fabricmods/optionalon/` (actuellement exclus,
|
|
logique serveur).
|
|
- [ ] Ne pas committer les binaires (`root/servers/**`, `root/distribution.json` à
|
|
décider) — ajouter au `.gitignore` si besoin.
|