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