working version(without authorization)
This commit is contained in:
111
src/main/main.ts
111
src/main/main.ts
@ -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 };
|
||||
}
|
||||
});
|
||||
|
||||
|
Reference in New Issue
Block a user