# BG LANDS Launcher — Windows

Launcher Windows isolé pour le client Java BG LANDS. Il ne redistribue pas Minecraft : après authentification et vérification de licence, les fichiers du jeu sont récupérés depuis les métadonnées et CDN autorisés de Mojang, puis le mod BG LANDS est installé depuis une release Ed25519 signée.

## Ce qui est déjà géré

- connexion Microsoft avec MSAL et flux Device Code officiel ;
- échange Xbox/XSTS, entitlement Java et profil Minecraft obligatoires ;
- cache MSAL chiffré avec la protection système Windows (`safeStorage`/DPAPI) ;
- installation privée dans `%LOCALAPPDATA%\BGLands\Launcher` ;
- résolution automatique de Minecraft, Fabric et du runtime Java requis par les métadonnées ;
- contrôle des hôtes, tailles, SHA-1 Mojang et SHA-256/Ed25519 BG LANDS ;
- mise à jour atomique du mod avec rollback de transaction ;
- blocage des downgrades/replays de release et des chemins dangereux sous Windows ;
- lancement direct sur `game.bglands.fr:25565`, RAM/résolution configurables ;
- réparation, logs locaux expurgés, interface sandboxée et instance unique ;
- interface React + Motion avec écran de démarrage, transitions et navigation clavier ;
- navigation complète Accueil, Jouer, Actualités, Serveurs, Clans, Classements, Boutique,
  Modules, Règlement v6.0 et Paramètres ;
- données communautaires publiques en direct : population du réseau, fortunes, temps de jeu
  et classement des clans ;
- modules HUD configurables : touches ZQSD, CPS, ping, adresse, ressources, coordonnées et
  mini-carte tactique sans détection de joueurs, minerais ou terrain ;
- aperçu boutique avec deux grades et six cosmétiques, sans paiement fictif tant que la
  passerelle commerciale n'est pas branchée ;
- état partagé du compte, du réseau et de l’installation des mods sur toutes les pages ;
- affichage adapté de la fenêtre Windows minimale `900×620` à la taille par défaut `1180×760`.

## Connexion Microsoft

L’Application (client) ID Entra publique propre à BG LANDS est intégrée à partir de la version 2.0.1.
La version 3.0.0 ajoute la nouvelle interface immersive et le portail de connexion BG LANDS sécurisé.
Cet AppID doit également être accepté par la procédure officielle Minecraft Services avant la diffusion
stable. Ne jamais reprendre l’ID d’un autre launcher.

Voir [MICROSOFT-APP-REGISTRATION.md](docs/MICROSOFT-APP-REGISTRATION.md). Le formulaire de
**Paramètres → Connexion Microsoft** reste disponible pour remplacer l’identifiant sans recompiler en cas
de rotation future.

## Développement

Prérequis : Node.js 22+, npm 10+.

```powershell
npm ci
$env:BGLANDS_MICROSOFT_CLIENT_ID="00000000-0000-0000-0000-000000000000"
npm run verify
npm start
```

Sans variable, la compilation reste valide mais l’écran indique volontairement « Configuration nécessaire » : aucune authentification bricolée ou hors-ligne n’est activée.

## Générer les exécutables Windows

Depuis Windows :

```powershell
npm ci
$env:BGLANDS_MICROSOFT_CLIENT_ID="<AppID approuvé>"
npm run pack:win
```

Sorties dans `release/` :

- `BG-LANDS-Launcher-Setup-3.0.0-x64.exe` : installeur NSIS avec choix du dossier ;
- `BG-LANDS-Launcher-Portable-3.0.0-x64.exe` : exécutable portable x64 ;
- métadonnées de build.

Pour une diffusion publique, fournir un certificat Authenticode à electron-builder via `CSC_LINK` et `CSC_KEY_PASSWORD`. Une compilation non signée fonctionne, mais Windows SmartScreen peut afficher un avertissement.

## Tests

```powershell
npm run verify
```

Cette commande exécute le typecheck strict, les tests du launcher et du manifeste de release, puis la compilation Electron.

## Arborescence locale du joueur

```text
%LOCALAPPDATA%\BGLands\Launcher\
├── auth.cache        cache Microsoft chiffré par Windows
├── cache\            artefacts immuables par digest de release
├── instance\         mods, configs, logs et données de jeu BG LANDS
├── minecraft\        versions, bibliothèques et assets officiels
├── runtime\          Java officiel résolu par composant Mojang
├── logs\             launcher.log et minecraft.log expurgés
├── settings.json
└── state.json
```

Le launcher n’utilise pas le dossier `.minecraft` général : il n’écrase donc pas les autres profils ou modpacks du joueur.

## Déclaration de marque

Produit indépendant, non approuvé ni associé à Mojang ou Microsoft. « Minecraft » est utilisé uniquement pour décrire la compatibilité du logiciel.
