Upload via GUI (39 Dateien)
This commit is contained in:
+25
-2
@@ -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 };
|
||||
|
||||
Reference in New Issue
Block a user