stable launch 100% (yeeees)
This commit is contained in:
@ -19,28 +19,28 @@ import { spawn } from 'child_process';
|
|||||||
import { AuthService } from './auth-service';
|
import { AuthService } from './auth-service';
|
||||||
import { API_BASE_URL } from '../renderer/api';
|
import { API_BASE_URL } from '../renderer/api';
|
||||||
|
|
||||||
const CDN = 'https://cdn.minecraft.popa-popa.ru';
|
// const CDN = 'https://cdn.minecraft.popa-popa.ru';
|
||||||
|
|
||||||
const DOWNLOAD_OPTIONS = {
|
// const DOWNLOAD_OPTIONS = {
|
||||||
// assets (objects/)
|
// // assets (objects/)
|
||||||
assetsHost: `${CDN}/assets/objects`,
|
// assetsHost: `${CDN}/assets/objects`,
|
||||||
|
|
||||||
// библиотеки (jar'ы)
|
// // библиотеки (jar'ы)
|
||||||
libraryHost(library: { path: any }) {
|
// libraryHost(library: { path: any }) {
|
||||||
return `${CDN}/libraries/${library.path}`;
|
// return `${CDN}/libraries/${library.path}`;
|
||||||
},
|
// },
|
||||||
|
|
||||||
assetsIndexUrl: (version: any) =>
|
// assetsIndexUrl: (version: any) =>
|
||||||
`${CDN}/assets/indexes/${version.assetIndex.id}.json`,
|
// `${CDN}/assets/indexes/${version.assetIndex.id}.json`,
|
||||||
|
|
||||||
// версии
|
// // версии
|
||||||
json(versionInfo: { id: any }) {
|
// json(versionInfo: { id: any }) {
|
||||||
return `${CDN}/versions/${versionInfo.id}/${versionInfo.id}.json`;
|
// return `${CDN}/versions/${versionInfo.id}/${versionInfo.id}.json`;
|
||||||
},
|
// },
|
||||||
client(resolved: { id: any }) {
|
// client(resolved: { id: any }) {
|
||||||
return `${CDN}/versions/${resolved.id}/${resolved.id}.jar`;
|
// return `${CDN}/versions/${resolved.id}/${resolved.id}.jar`;
|
||||||
},
|
// },
|
||||||
};
|
// };
|
||||||
|
|
||||||
// Константы
|
// Константы
|
||||||
const AUTHLIB_INJECTOR_FILENAME = 'authlib-injector-1.2.5.jar';
|
const AUTHLIB_INJECTOR_FILENAME = 'authlib-injector-1.2.5.jar';
|
||||||
@ -617,7 +617,7 @@ export function initMinecraftHandlers() {
|
|||||||
assetsDownloadConcurrency: 2,
|
assetsDownloadConcurrency: 2,
|
||||||
librariesDownloadConcurrency: 2,
|
librariesDownloadConcurrency: 2,
|
||||||
dispatcher: agent,
|
dispatcher: agent,
|
||||||
...DOWNLOAD_OPTIONS,
|
// ...DOWNLOAD_OPTIONS,
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log('installMcTask started for', minecraftVersion.id);
|
console.log('installMcTask started for', minecraftVersion.id);
|
||||||
@ -716,7 +716,7 @@ export function initMinecraftHandlers() {
|
|||||||
// Игнорируем sha1, чтобы не падать из-за несоответствий
|
// Игнорируем sha1, чтобы не падать из-за несоответствий
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
...DOWNLOAD_OPTIONS,
|
// ...DOWNLOAD_OPTIONS,
|
||||||
});
|
});
|
||||||
|
|
||||||
await depsTask.startAndWait({
|
await depsTask.startAndWait({
|
||||||
@ -785,11 +785,43 @@ export function initMinecraftHandlers() {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let stderrBuffer = '';
|
||||||
|
|
||||||
proc.stdout?.on('data', (data) => {
|
proc.stdout?.on('data', (data) => {
|
||||||
console.log(`Minecraft stdout: ${data}`);
|
console.log(`Minecraft stdout: ${data}`);
|
||||||
});
|
});
|
||||||
|
|
||||||
proc.stderr?.on('data', (data) => {
|
proc.stderr?.on('data', (data) => {
|
||||||
console.error(`Minecraft stderr: ${data}`);
|
const text = data.toString();
|
||||||
|
console.error(`Minecraft stderr: ${text}`);
|
||||||
|
stderrBuffer += text;
|
||||||
|
|
||||||
|
// Пробрасываем сырой лог клиенту (если захочешь где-то выводить)
|
||||||
|
event.sender.send('minecraft-log', text);
|
||||||
|
|
||||||
|
// Если это ошибка — сразу уведомим пользователя
|
||||||
|
if (text.toLowerCase().includes('error')) {
|
||||||
|
event.sender.send('minecraft-error', {
|
||||||
|
message: text,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
proc.on('exit', (code) => {
|
||||||
|
console.log('Minecraft exited with code', code);
|
||||||
|
|
||||||
|
if (code !== 0) {
|
||||||
|
event.sender.send('installation-status', {
|
||||||
|
step: 'error',
|
||||||
|
message: `Minecraft завершился с ошибкой (код ${code})`,
|
||||||
|
});
|
||||||
|
|
||||||
|
event.sender.send('minecraft-error', {
|
||||||
|
message: `Minecraft завершился с ошибкой (код ${code})`,
|
||||||
|
stderr: stderrBuffer,
|
||||||
|
code,
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log('Запуск игры...');
|
console.log('Запуск игры...');
|
||||||
|
|||||||
@ -13,7 +13,9 @@ export type Channels =
|
|||||||
| 'update-available'
|
| 'update-available'
|
||||||
| 'install-update'
|
| 'install-update'
|
||||||
| 'get-installed-versions'
|
| 'get-installed-versions'
|
||||||
| 'get-available-versions';
|
| 'get-available-versions'
|
||||||
|
| 'minecraft-log'
|
||||||
|
| 'minecraft-error';
|
||||||
|
|
||||||
const electronHandler = {
|
const electronHandler = {
|
||||||
ipcRenderer: {
|
ipcRenderer: {
|
||||||
|
|||||||
@ -91,6 +91,22 @@ const LaunchPage = ({
|
|||||||
setInstallMessage(status.message);
|
setInstallMessage(status.message);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const minecraftErrorListener = (...args: unknown[]) => {
|
||||||
|
const payload = (args[0] || {}) as {
|
||||||
|
message?: string;
|
||||||
|
stderr?: string;
|
||||||
|
code?: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Главное — показать пользователю, что запуск не удался
|
||||||
|
showNotification(
|
||||||
|
payload.message ||
|
||||||
|
'Minecraft завершился с ошибкой. Подробности смотрите в логах.',
|
||||||
|
'error',
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
window.electron.ipcRenderer.on('minecraft-error', minecraftErrorListener);
|
||||||
window.electron.ipcRenderer.on('download-progress', progressListener);
|
window.electron.ipcRenderer.on('download-progress', progressListener);
|
||||||
window.electron.ipcRenderer.on('installation-status', statusListener);
|
window.electron.ipcRenderer.on('installation-status', statusListener);
|
||||||
|
|
||||||
@ -101,6 +117,7 @@ const LaunchPage = ({
|
|||||||
if (typeof cleanup === 'function') {
|
if (typeof cleanup === 'function') {
|
||||||
cleanup('download-progress', progressListener);
|
cleanup('download-progress', progressListener);
|
||||||
cleanup('installation-status', statusListener);
|
cleanup('installation-status', statusListener);
|
||||||
|
cleanup('minecraft-error', statusListener);
|
||||||
}
|
}
|
||||||
// Удаляем использование removeAllListeners
|
// Удаляем использование removeAllListeners
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user