/** * Contrats partagés entre le process main et le renderer. * Tout passe par le bridge `window.api` exposé dans le preload. */ /** Profil du joueur après login Microsoft. */ export interface PlayerProfile { uuid: string name: string /** URL du skin/tête si disponible. */ skinUrl?: string } /** Phase courante de la séquence "Jouer". */ export type LaunchPhase = | 'idle' | 'auth' | 'pack-meta' | 'java' | 'minecraft' | 'neoforge' | 'modpack' | 'launching' | 'running' | 'done' | 'error' /** Événement de progression envoyé main -> renderer pendant "Jouer". */ export interface ProgressEvent { phase: LaunchPhase /** Libellé lisible à afficher. */ message: string /** 0..1 si déterminable, sinon undefined (barre indéterminée). */ progress?: number } /** Ligne de log du jeu (stdout/stderr) streamée vers la console du renderer. */ export interface GameLogLine { stream: 'stdout' | 'stderr' line: string } /** Infos du flow "device code" Microsoft à présenter à l'utilisateur. */ export interface DeviceCodeInfo { userCode: string verificationUri: string message: string } /** État de la mise à jour automatique du launcher (electron-updater). */ export type UpdateState = | 'checking' | 'available' | 'downloading' | 'downloaded' | 'none' | 'error' /** Statut d'update envoyé main -> renderer pour piloter le bandeau de maj. */ export interface UpdateStatus { state: UpdateState /** Version distante (ex. "0.2.0") quand connue. */ version?: string /** 0..1 pendant le téléchargement. */ progress?: number /** Message d'erreur éventuel (state === 'error'). */ message?: string } /** Métadonnées du modpack lues depuis le pack.toml packwiz distant. */ export interface PackMeta { name: string version: string minecraft: string neoforge: string } /** Options de la séquence "Jouer". */ export interface PlayOptions { /** Force la revérification/redownload des fichiers (réparation). */ repair?: boolean } /** Réglages utilisateur persistés localement. */ export interface UserSettings { /** RAM max allouée à la JVM, en Mo. */ maxMemoryMb: number /** Args JVM additionnels (avancé). */ extraJvmArgs: string[] } export const DEFAULT_SETTINGS: UserSettings = { maxMemoryMb: 8192, extraJvmArgs: [] } /** Informations sur le dossier de données actuel. */ export interface DataDirInfo { /** Chemin actuellement utilisé. */ current: string /** Suggestion par défaut (~Games/OFLauncher). */ defaultSuggestion: string } /** Noms de canaux IPC (invoke renderer -> main). */ export const IPC = { authLogin: 'auth:login', authLogout: 'auth:logout', authGetProfile: 'auth:getProfile', play: 'play:start', settingsGet: 'settings:get', settingsSet: 'settings:set', appVersion: 'app:version', openInstanceDir: 'instance:open', openLogsDir: 'logs:open', playStop: 'play:stop', packGet: 'pack:get', updateInstall: 'update:install', isFirstLaunch: 'app:isFirstLaunch', dataDirGet: 'dataDir:get', dataDirBrowse: 'dataDir:browse', dataDirSet: 'dataDir:set' } as const /** Noms d'événements (send main -> renderer). */ export const IPC_EVENT = { progress: 'evt:progress', gameLog: 'evt:gameLog', gameClosed: 'evt:gameClosed', authCode: 'evt:authCode', updateStatus: 'evt:updateStatus' } as const