stable launch 100% (yeeees)

This commit is contained in:
2025-12-04 01:10:47 +05:00
parent 5deba6ca92
commit fcbc2352dc
3 changed files with 73 additions and 22 deletions

View File

@ -19,28 +19,28 @@ import { spawn } from 'child_process';
import { AuthService } from './auth-service';
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 = {
// assets (objects/)
assetsHost: `${CDN}/assets/objects`,
// const DOWNLOAD_OPTIONS = {
// // assets (objects/)
// assetsHost: `${CDN}/assets/objects`,
// библиотеки (jar'ы)
libraryHost(library: { path: any }) {
return `${CDN}/libraries/${library.path}`;
},
// // библиотеки (jar'ы)
// libraryHost(library: { path: any }) {
// return `${CDN}/libraries/${library.path}`;
// },
assetsIndexUrl: (version: any) =>
`${CDN}/assets/indexes/${version.assetIndex.id}.json`,
// assetsIndexUrl: (version: any) =>
// `${CDN}/assets/indexes/${version.assetIndex.id}.json`,
// версии
json(versionInfo: { id: any }) {
return `${CDN}/versions/${versionInfo.id}/${versionInfo.id}.json`;
},
client(resolved: { id: any }) {
return `${CDN}/versions/${resolved.id}/${resolved.id}.jar`;
},
};
// // версии
// json(versionInfo: { id: any }) {
// return `${CDN}/versions/${versionInfo.id}/${versionInfo.id}.json`;
// },
// client(resolved: { id: any }) {
// return `${CDN}/versions/${resolved.id}/${resolved.id}.jar`;
// },
// };
// Константы
const AUTHLIB_INJECTOR_FILENAME = 'authlib-injector-1.2.5.jar';
@ -617,7 +617,7 @@ export function initMinecraftHandlers() {
assetsDownloadConcurrency: 2,
librariesDownloadConcurrency: 2,
dispatcher: agent,
...DOWNLOAD_OPTIONS,
// ...DOWNLOAD_OPTIONS,
});
console.log('installMcTask started for', minecraftVersion.id);
@ -716,7 +716,7 @@ export function initMinecraftHandlers() {
// Игнорируем sha1, чтобы не падать из-за несоответствий
},
}),
...DOWNLOAD_OPTIONS,
// ...DOWNLOAD_OPTIONS,
});
await depsTask.startAndWait({
@ -785,11 +785,43 @@ export function initMinecraftHandlers() {
},
});
let stderrBuffer = '';
proc.stdout?.on('data', (data) => {
console.log(`Minecraft stdout: ${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('Запуск игры...');

View File

@ -13,7 +13,9 @@ export type Channels =
| 'update-available'
| 'install-update'
| 'get-installed-versions'
| 'get-available-versions';
| 'get-available-versions'
| 'minecraft-log'
| 'minecraft-error';
const electronHandler = {
ipcRenderer: {

View File

@ -91,6 +91,22 @@ const LaunchPage = ({
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('installation-status', statusListener);
@ -101,6 +117,7 @@ const LaunchPage = ({
if (typeof cleanup === 'function') {
cleanup('download-progress', progressListener);
cleanup('installation-status', statusListener);
cleanup('minecraft-error', statusListener);
}
// Удаляем использование removeAllListeners
};