feat: add way to select game dir

This commit is contained in:
lucasdpt
2026-06-17 20:43:27 +02:00
parent b8204c80bd
commit 161ea50234
7 changed files with 212 additions and 18 deletions
+22 -9
View File
@@ -1,19 +1,34 @@
import { app } from 'electron'
import { join } from 'path'
import { mkdirSync } from 'fs'
import { readLauncherConfigSync } from './launcher-config'
/**
* Arborescence des données du launcher, rangée sous le userData d'Electron :
* Windows : %APPDATA%/OFLauncher
* Linux : ~/.config/OFLauncher
* Arborescence des données du launcher.
*
* On garde le runtime (MC/NeoForge/assets/libs/java) séparé de l'instance de
* jeu (mods/config/saves) pour que la sync packwiz ne touche jamais au runtime.
* La racine est configurable via launcher.json (userData/launcher.json) :
* { "dataDir": "/chemin/choisi/par/l/utilisateur" }
* Par défaut : userData d'Electron (%APPDATA%/OFLauncher sur Windows,
* ~/.config/OFLauncher sur Linux).
*
* La config launcher.json elle-même reste toujours dans userData
* (point d'ancrage fixe, indépendant du dataDir choisi).
*/
class LauncherPaths {
/** Racine : userData d'Electron. */
private _root: string | null = null
/** Racine des données du jeu (configurable). */
get root(): string {
return app.getPath('userData')
if (!this._root) {
const { dataDir } = readLauncherConfigSync()
this._root = dataDir ?? app.getPath('userData')
}
return this._root
}
/** Invalide le cache de root (à appeler après écriture d'un nouveau dataDir). */
invalidate(): void {
this._root = null
}
/** Dossier "Minecraft" géré par @xmcl : versions/, libraries/, assets/. */
@@ -53,8 +68,6 @@ class LauncherPaths {
/** jar packwiz-installer-bootstrap embarqué dans les resources. */
get packwizBootstrapJar(): string {
// En prod, electron-builder copie resources/ via extraResources.
// En dev, on lit directement le dossier resources/ du repo.
const base = app.isPackaged
? join(process.resourcesPath, 'resources')
: join(app.getAppPath(), 'resources')