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,159 +336,201 @@ ipcMain.handle('launch-minecraft', async (event) => {
step: 'java', step: 'java',
message: 'Поиск Java...', message: 'Поиск Java...',
}); });
const javaPath = await findJava();
// 1. Получаем список версий и устанавливаем ванильный Minecraft let javaPath;
event.sender.send('installation-status', { try {
step: 'minecraft-list', javaPath = await findJava();
message: 'Получение списка версий Minecraft...', } catch (error) {
}); console.warn('Ошибка при поиске Java:', error);
const versionList = await getVersionList(); event.sender.send('installation-status', {
const minecraftVersion = versionList.versions.find( step: 'java-error',
(v) => v.id === baseVersion, message: 'Не удалось найти Java. Используем системную Java.',
); });
if (!minecraftVersion) { javaPath = 'java'; // Пробуем использовать системную Java
throw new Error(`Minecraft версия ${baseVersion} не найдена`);
} }
// Устанавливаем базовую версию Minecraft // Далее пробуем установить Minecraft, но продолжаем даже при ошибках
event.sender.send('installation-status', { let resolvedVersion;
step: 'minecraft-install', try {
message: `Установка Minecraft ${baseVersion}...`, // 1. Получаем список версий и устанавливаем ванильный Minecraft
}); event.sender.send('installation-status', {
step: 'minecraft-list',
message: 'Получение списка версий Minecraft...',
});
// Переименовываем переменную, чтобы избежать конфликта с функцией const versionList = await getVersionList();
const installMcTask = installTask(minecraftVersion, minecraftDir, { const minecraftVersion = versionList.versions.find(
skipRevalidate: true, // Пропускать повторную проверку (v) => v.id === baseVersion,
}); );
await installMcTask.startAndWait({
onStart(task) {
event.sender.send('installation-status', {
step: `minecraft-install.${task.path}`,
message: `Начало: ${task.name || task.path}`,
});
},
onUpdate(task) {
// Убираем неиспользуемый параметр chunkSize
// Обновляем общий прогресс
const percentage =
Math.round((installMcTask.progress / installMcTask.total) * 100) || 0;
event.sender.send('download-progress', percentage); if (minecraftVersion) {
// Устанавливаем базовую версию Minecraft
event.sender.send('installation-status', { event.sender.send('installation-status', {
step: `minecraft-install.${task.path}`, step: 'minecraft-install',
message: `Прогресс ${task.name || task.path}: ${percentage}% (${installMcTask.progress}/${installMcTask.total})`, message: `Установка Minecraft ${baseVersion}...`,
}); });
},
onFailed(task, error: 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}`,
});
},
});
// 2. Устанавливаем Fabric try {
event.sender.send('installation-status', { const installMcTask = installTask(minecraftVersion, minecraftDir, {
step: 'fabric-list', skipRevalidate: true,
message: 'Получение списка версий Fabric...', });
});
const fabricVersions = await getFabricLoaders();
const fabricVersion = fabricVersions[0]; // Последняя версия
if (!fabricVersion) { await installMcTask.startAndWait({
throw new Error(`Не найдены версии Fabric`); onStart(task) {
event.sender.send('installation-status', {
step: `minecraft-install.${task.path}`,
message: `Начало: ${task.name || task.path}`,
});
},
onUpdate(task) {
const percentage =
Math.round(
(installMcTask.progress / installMcTask.total) * 100,
) || 0;
event.sender.send('download-progress', percentage);
event.sender.send('installation-status', {
step: `minecraft-install.${task.path}`,
message: `Прогресс ${task.name || task.path}: ${percentage}% (${installMcTask.progress}/${installMcTask.total})`,
});
},
onFailed(task, error) {
console.warn(
`Ошибка при установке ${task.path}, продолжаем:`,
error,
);
event.sender.send('installation-status', {
step: `minecraft-install.${task.path}`,
message: `Ошибка: ${error.message}`,
});
},
onSucceed(task) {
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) {
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. Подготовка версии и установка зависимостей
try {
// Используем идентификатор Fabric-версии
const fabricVersionId = `${baseVersion}-fabric0.16.14`;
event.sender.send('installation-status', {
step: 'version-parse',
message: 'Подготовка версии...',
});
resolvedVersion = await Version.parse(minecraftDir, fabricVersionId);
event.sender.send('installation-status', {
step: 'dependencies',
message: 'Установка библиотек и ресурсов...',
});
const depsTask = installDependenciesTask(resolvedVersion, {
assetsDownloadConcurrency: 4,
skipRevalidate: true,
prevalidSizeOnly: true,
checksumValidatorResolver: (checksum) => ({
validate: async () => {
/* void */
},
}),
});
try {
await depsTask.startAndWait({
onStart(task) {
event.sender.send('installation-status', {
step: `dependencies.${task.path}`,
message: `Начало: ${task.name || task.path}`,
});
},
onUpdate(task) {
const percentage =
Math.round((depsTask.progress / depsTask.total) * 100) || 0;
event.sender.send('download-progress', percentage);
event.sender.send('installation-status', {
step: `dependencies.${task.path}`,
message: `Установка ${task.name || task.path}: ${percentage}%`,
});
},
onFailed(task, error) {
console.warn(
`Ошибка при установке ${task.path}, продолжаем:`,
error,
);
event.sender.send('installation-status', {
step: `dependencies.${task.path}`,
message: `Ошибка: ${error.message}`,
});
},
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);
} }
event.sender.send('installation-status', { // 5. Запускаем Minecraft - НЕЗАВИСИМО ОТ ПРЕДЫДУЩИХ ОШИБОК
step: 'fabric-install',
message: `Установка Fabric ${fabricVersion.version}...`,
});
await installFabric({
minecraftVersion: baseVersion,
version: fabricVersion.version,
minecraft: minecraftDir,
});
// 3. Используем идентификатор Fabric-версии
const fabricVersionId = `${baseVersion}-fabric${fabricVersion.version}`;
// 4. Разрешаем и устанавливаем зависимости
event.sender.send('installation-status', {
step: 'version-parse',
message: 'Подготовка версии...',
});
const resolvedVersion = await Version.parse(minecraftDir, fabricVersionId);
event.sender.send('installation-status', {
step: 'dependencies',
message: 'Установка библиотек и ресурсов...',
});
const depsTask = installDependenciesTask(resolvedVersion, {
assetsDownloadConcurrency: 4,
skipRevalidate: true,
prevalidSizeOnly: true,
checksumValidatorResolver: (checksum) => ({
validate: async () => {
/* void */
},
}),
});
await depsTask.startAndWait({
onStart(task) {
event.sender.send('installation-status', {
step: `dependencies.${task.path}`,
message: `Начало: ${task.name || task.path}`,
});
},
onUpdate(task, chunkSize) {
const percentage =
Math.round((depsTask.progress / depsTask.total) * 100) || 0;
event.sender.send('download-progress', percentage);
event.sender.send('installation-status', {
step: `dependencies.${task.path}`,
message: `Установка ${task.name || task.path}: ${percentage}%`,
});
},
onFailed(task, error) {
event.sender.send('installation-status', {
step: `dependencies.${task.path}`,
message: `Ошибка: ${error.message}`,
});
},
onSucceed(task, result) {
event.sender.send('installation-status', {
step: `dependencies.${task.path}`,
message: `Завершено: ${task.name || task.path}`,
});
},
});
// 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 };
} }
}); });