stable launch 100% (yeeees)
This commit is contained in:
@ -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('Запуск игры...');
|
||||
|
||||
@ -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: {
|
||||
|
||||
@ -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
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user