Upload via GUI (39 Dateien)

This commit is contained in:
Git Manager GUI
2026-08-02 17:01:18 +02:00
parent a803f297ea
commit eff6403dd5
26 changed files with 3536 additions and 134 deletions
+25 -2
View File
@@ -373,7 +373,19 @@ async function prepareAndLaunch(opts, onProgress) {
// Java (VOR dem Loader Forge-Prozessoren brauchen Java)
emit('java', { detail: 'Java wählen …' });
const java = pickJava(vj, opts.javaPath);
let java = pickJava(vj, opts.javaPath);
// Nichts Passendes da? Dann darf der Launcher die richtige Fassung selbst
// holen opts.ensureJava wird vom Hauptprozess gestellt.
if ((!java || java.mismatch) && opts.ensureJava) {
const benoetigt = (vj.javaVersion && vj.javaVersion.majorVersion) || 8;
emit('java', { detail: `Java ${benoetigt} wird geladen …` });
try {
const geholt = await opts.ensureJava(benoetigt, (p) => emit('java', p));
if (geholt && geholt.path) java = { path: geholt.path, major: geholt.major };
} catch (err) {
emit('log', { line: '[Java] Automatischer Download fehlgeschlagen: ' + err.message + '\n' });
}
}
if (!java) return { ok: false, message: 'Keine Java-Installation gefunden. Bitte in den Einstellungen Java festlegen.' };
// Mod-Loader
@@ -489,7 +501,11 @@ async function prepareAndLaunch(opts, onProgress) {
const child = spawn(cmd, spawnArgs, { cwd: opts.gameDir, detached: false });
child.stdout.on('data', (d) => emit('log', { line: d.toString() }));
child.stderr.on('data', (d) => emit('log', { line: d.toString() }));
child.on('exit', (code) => {
// Ende genau einmal melden 'exit' und 'error' können beide kommen
let beendetGemeldet = false;
const meldeEnde = (code) => {
if (beendetGemeldet) return;
beendetGemeldet = true;
emit('exit', { code });
// Post-Exit-Befehl
if (opts.postExitCommand && opts.postExitCommand.trim()) {
@@ -500,6 +516,13 @@ async function prepareAndLaunch(opts, onProgress) {
if (po.stderr) emit('log', { line: po.stderr });
} catch { /* egal */ }
}
};
child.on('exit', (code) => meldeEnde(code));
// ohne diesen Listener würde ein Fehlstart (z. B. falscher Java-Pfad) als
// unbehandeltes 'error'-Ereignis den Hauptprozess beenden
child.on('error', (err) => {
emit('log', { line: '[Fehler] Minecraft konnte nicht gestartet werden: ' + err.message + '\n' });
meldeEnde(-1);
});
return { ok: true, pid: child.pid, java };