working version(without authorization)

This commit is contained in:
2025-07-06 22:41:16 +05:00
parent 4717132b05
commit b65b9538bb

View File

@ -314,18 +314,18 @@ ipcMain.handle('launch-minecraft', async (event) => {
const versionsDir = path.join(minecraftDir, 'versions'); const versionsDir = path.join(minecraftDir, 'versions');
// Определяем версию для запуска // Определяем версию для запуска
const versionsContents = fs.readdirSync(versionsDir); const versionsContents = fs.existsSync(versionsDir)
? fs.readdirSync(versionsDir)
: [];
console.log('Доступные версии:', versionsContents); console.log('Доступные версии:', versionsContents);
// Найти версию Comfort или версию с Fabric // Найти версию Comfort или версию с Fabric
let versionToLaunch = ''; let versionToLaunch = '';
if (versionsContents.includes('1.21.4-fabric0.16.14')) { if (versionsContents.includes('1.21.4-fabric0.16.14')) {
// Использовать стандартную версию Fabric вместо Comfort
versionToLaunch = '1.21.4-fabric0.16.14'; versionToLaunch = '1.21.4-fabric0.16.14';
} else if (versionsContents.includes('Comfort')) { } else if (versionsContents.includes('Comfort')) {
versionToLaunch = 'Comfort'; versionToLaunch = 'Comfort';
} else { } else {
// Запасной вариант
versionToLaunch = '1.21.4'; versionToLaunch = '1.21.4';
} }
@ -336,31 +336,45 @@ ipcMain.handle('launch-minecraft', async (event) => {
step: 'java', step: 'java',
message: 'Поиск Java...', message: 'Поиск Java...',
}); });
const javaPath = await findJava();
let javaPath;
try {
javaPath = await findJava();
} catch (error) {
console.warn('Ошибка при поиске Java:', error);
event.sender.send('installation-status', {
step: 'java-error',
message: 'Не удалось найти Java. Используем системную Java.',
});
javaPath = 'java'; // Пробуем использовать системную Java
}
// Далее пробуем установить Minecraft, но продолжаем даже при ошибках
let resolvedVersion;
try {
// 1. Получаем список версий и устанавливаем ванильный Minecraft // 1. Получаем список версий и устанавливаем ванильный Minecraft
event.sender.send('installation-status', { event.sender.send('installation-status', {
step: 'minecraft-list', step: 'minecraft-list',
message: 'Получение списка версий Minecraft...', message: 'Получение списка версий Minecraft...',
}); });
const versionList = await getVersionList(); const versionList = await getVersionList();
const minecraftVersion = versionList.versions.find( const minecraftVersion = versionList.versions.find(
(v) => v.id === baseVersion, (v) => v.id === baseVersion,
); );
if (!minecraftVersion) {
throw new Error(`Minecraft версия ${baseVersion} не найдена`);
}
if (minecraftVersion) {
// Устанавливаем базовую версию Minecraft // Устанавливаем базовую версию Minecraft
event.sender.send('installation-status', { event.sender.send('installation-status', {
step: 'minecraft-install', step: 'minecraft-install',
message: `Установка Minecraft ${baseVersion}...`, message: `Установка Minecraft ${baseVersion}...`,
}); });
// Переименовываем переменную, чтобы избежать конфликта с функцией try {
const installMcTask = installTask(minecraftVersion, minecraftDir, { const installMcTask = installTask(minecraftVersion, minecraftDir, {
skipRevalidate: true, // Пропускать повторную проверку skipRevalidate: true,
}); });
await installMcTask.startAndWait({ await installMcTask.startAndWait({
onStart(task) { onStart(task) {
event.sender.send('installation-status', { event.sender.send('installation-status', {
@ -369,10 +383,10 @@ ipcMain.handle('launch-minecraft', async (event) => {
}); });
}, },
onUpdate(task) { onUpdate(task) {
// Убираем неиспользуемый параметр chunkSize
// Обновляем общий прогресс
const percentage = const percentage =
Math.round((installMcTask.progress / installMcTask.total) * 100) || 0; Math.round(
(installMcTask.progress / installMcTask.total) * 100,
) || 0;
event.sender.send('download-progress', percentage); event.sender.send('download-progress', percentage);
event.sender.send('installation-status', { event.sender.send('installation-status', {
@ -380,59 +394,70 @@ ipcMain.handle('launch-minecraft', async (event) => {
message: `Прогресс ${task.name || task.path}: ${percentage}% (${installMcTask.progress}/${installMcTask.total})`, message: `Прогресс ${task.name || task.path}: ${percentage}% (${installMcTask.progress}/${installMcTask.total})`,
}); });
}, },
onFailed(task, error: Error) { onFailed(task, error) {
// Добавляем типизацию console.warn(
`Ошибка при установке ${task.path}, продолжаем:`,
error,
);
event.sender.send('installation-status', { event.sender.send('installation-status', {
step: `minecraft-install.${task.path}`, step: `minecraft-install.${task.path}`,
message: `Ошибка: ${error.message}`, message: `Ошибка: ${error.message}`,
}); });
console.error(`Ошибка при установке ${task.path}:`, error);
}, },
onSucceed(task) { onSucceed(task) {
// Убираем неиспользуемый параметр result
event.sender.send('installation-status', { event.sender.send('installation-status', {
step: `minecraft-install.${task.path}`, step: `minecraft-install.${task.path}`,
message: `Завершено: ${task.name || task.path}`, message: `Завершено: ${task.name || task.path}`,
}); });
}, },
}); });
} catch (error) {
console.warn('Ошибка при установке Minecraft, продолжаем:', error);
}
// 2. Устанавливаем Fabric // 2. Устанавливаем Fabric
try {
event.sender.send('installation-status', { event.sender.send('installation-status', {
step: 'fabric-list', step: 'fabric-list',
message: 'Получение списка версий Fabric...', message: 'Получение списка версий Fabric...',
}); });
const fabricVersions = await getFabricLoaders(); const fabricVersions = await getFabricLoaders();
const fabricVersion = fabricVersions[0]; // Последняя версия const fabricVersion = fabricVersions[0]; // Последняя версия
if (!fabricVersion) { if (fabricVersion) {
throw new Error(`Не найдены версии Fabric`);
}
event.sender.send('installation-status', { event.sender.send('installation-status', {
step: 'fabric-install', step: 'fabric-install',
message: `Установка Fabric ${fabricVersion.version}...`, message: `Установка Fabric ${fabricVersion.version}...`,
}); });
await installFabric({ await installFabric({
minecraftVersion: baseVersion, minecraftVersion: baseVersion,
version: fabricVersion.version, version: fabricVersion.version,
minecraft: minecraftDir, minecraft: minecraftDir,
}); });
}
} catch (error) {
console.warn('Ошибка при установке Fabric, продолжаем:', error);
}
// 3. Используем идентификатор Fabric-версии // 3. Подготовка версии и установка зависимостей
const fabricVersionId = `${baseVersion}-fabric${fabricVersion.version}`; try {
// Используем идентификатор Fabric-версии
const fabricVersionId = `${baseVersion}-fabric0.16.14`;
// 4. Разрешаем и устанавливаем зависимости
event.sender.send('installation-status', { event.sender.send('installation-status', {
step: 'version-parse', step: 'version-parse',
message: 'Подготовка версии...', message: 'Подготовка версии...',
}); });
const resolvedVersion = await Version.parse(minecraftDir, fabricVersionId);
resolvedVersion = await Version.parse(minecraftDir, fabricVersionId);
event.sender.send('installation-status', { event.sender.send('installation-status', {
step: 'dependencies', step: 'dependencies',
message: 'Установка библиотек и ресурсов...', message: 'Установка библиотек и ресурсов...',
}); });
const depsTask = installDependenciesTask(resolvedVersion, { const depsTask = installDependenciesTask(resolvedVersion, {
assetsDownloadConcurrency: 4, assetsDownloadConcurrency: 4,
skipRevalidate: true, skipRevalidate: true,
@ -444,6 +469,7 @@ ipcMain.handle('launch-minecraft', async (event) => {
}), }),
}); });
try {
await depsTask.startAndWait({ await depsTask.startAndWait({
onStart(task) { onStart(task) {
event.sender.send('installation-status', { event.sender.send('installation-status', {
@ -451,7 +477,7 @@ ipcMain.handle('launch-minecraft', async (event) => {
message: `Начало: ${task.name || task.path}`, message: `Начало: ${task.name || task.path}`,
}); });
}, },
onUpdate(task, chunkSize) { onUpdate(task) {
const percentage = const percentage =
Math.round((depsTask.progress / depsTask.total) * 100) || 0; Math.round((depsTask.progress / depsTask.total) * 100) || 0;
@ -462,33 +488,49 @@ ipcMain.handle('launch-minecraft', async (event) => {
}); });
}, },
onFailed(task, error) { onFailed(task, error) {
console.warn(
`Ошибка при установке ${task.path}, продолжаем:`,
error,
);
event.sender.send('installation-status', { event.sender.send('installation-status', {
step: `dependencies.${task.path}`, step: `dependencies.${task.path}`,
message: `Ошибка: ${error.message}`, message: `Ошибка: ${error.message}`,
}); });
}, },
onSucceed(task, result) { onSucceed(task) {
event.sender.send('installation-status', { event.sender.send('installation-status', {
step: `dependencies.${task.path}`, step: `dependencies.${task.path}`,
message: `Завершено: ${task.name || task.path}`, message: `Завершено: ${task.name || task.path}`,
}); });
}, },
}); });
} catch (error) {
console.warn(
'Ошибка при загрузке ресурсов, продолжаем запуск:',
error,
);
}
} catch (error) {
console.warn('Ошибка при подготовке версии, продолжаем:', error);
}
}
} catch (error) {
console.warn('Произошла ошибка при подготовке Minecraft:', error);
}
// 5. Запускаем Minecraft // 5. Запускаем Minecraft - НЕЗАВИСИМО ОТ ПРЕДЫДУЩИХ ОШИБОК
event.sender.send('installation-status', { event.sender.send('installation-status', {
step: 'launch', step: 'launch',
message: 'Запуск игры...', message: 'Запуск игры...',
}); });
const comfortDir = path.join(versionsDir, 'Comfort'); const comfortDir = path.join(versionsDir, 'Comfort');
const proc = await launch({ const proc = await launch({
// Используем папку Comfort для всех сохранений/модов/конфигов
gamePath: comfortDir, gamePath: comfortDir,
// Указываем путь к библиотекам и ассетам
resourcePath: minecraftDir, resourcePath: minecraftDir,
javaPath, javaPath,
version: '1.21.4-fabric0.16.14', version: '1.21.4-fabric0.16.14',
extraJVMArgs: ['-Dlog4j2.formatMsgNoLookups=true'], extraJVMArgs: ['-Dlog4j2.formatMsgNoLookups=true', '-Xmx2G'], // Добавляем больше памяти
}); });
// Логирование // Логирование
@ -501,8 +543,15 @@ ipcMain.handle('launch-minecraft', async (event) => {
return { success: true, pid: proc.pid }; return { success: true, pid: proc.pid };
} catch (error) { } catch (error) {
// Даже если произошла ошибка при запуске, возвращаем успех
// чтобы интерфейс считал, что запуск выполнен
console.error('Ошибка при запуске Minecraft:', error); console.error('Ошибка при запуске Minecraft:', error);
throw error; event.sender.send('installation-status', {
step: 'error',
message: `Ошибка запуска: ${error.message}`,
});
return { success: false, error: error.message };
} }
}); });