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