diff --git a/src/main/minecraft-launcher.ts b/src/main/minecraft-launcher.ts index 091265b..db2d2a3 100644 --- a/src/main/minecraft-launcher.ts +++ b/src/main/minecraft-launcher.ts @@ -28,10 +28,10 @@ const AUTHLIB_INJECTOR_FILENAME = 'authlib-injector-1.2.5.jar'; // Создаем экземпляр сервиса аутентификации const authService = new AuthService(); -// Функция для получения последней версии релиза -export async function getLatestReleaseVersion(): Promise { +// Модифицированная функция для получения последней версии релиза с произвольного URL +export async function getLatestReleaseVersion(apiUrl: string): Promise { try { - const response = await fetch(GITHUB_API_RELEASE_URL); + const response = await fetch(apiUrl); const data = await response.json(); return data.tag_name || '0.0.0'; } catch (error) { @@ -345,15 +345,22 @@ async function ensureAuthlibInjectorExists(appPath: string): Promise { // Инициализация IPC обработчиков export function initMinecraftHandlers() { // Обработчик для скачивания и распаковки - ipcMain.handle('download-and-extract', async (event) => { + ipcMain.handle('download-and-extract', async (event, options) => { try { + const { + downloadUrl = 'https://github.com/DIKER0K/Comfort/releases/latest/download/Comfort.zip', + apiReleaseUrl = 'https://api.github.com/repos/DIKER0K/Comfort/releases/latest', + versionFileName = 'comfort_version.txt', + packName = 'Comfort', + } = options || {}; + const appPath = path.dirname(app.getPath('exe')); const minecraftDir = path.join(appPath, '.minecraft'); const versionsDir = path.join(minecraftDir, 'versions'); - const versionFilePath = path.join(minecraftDir, COMFORT_VERSION_FILE); + const versionFilePath = path.join(minecraftDir, versionFileName); // Получаем текущую и последнюю версии - const latestVersion = await getLatestReleaseVersion(); + const latestVersion = await getLatestReleaseVersion(apiReleaseUrl); let currentVersion = ''; // Проверяем текущую версию, если файл существует @@ -363,7 +370,12 @@ export function initMinecraftHandlers() { // Проверяем, нужно ли обновление if (currentVersion === latestVersion) { - return { success: true, updated: false, version: currentVersion }; + return { + success: true, + updated: false, + version: currentVersion, + packName, + }; } const tempDir = path.join(appPath, 'temp'); @@ -374,10 +386,10 @@ export function initMinecraftHandlers() { } fs.mkdirSync(tempDir, { recursive: true }); - const zipPath = path.join(tempDir, 'Comfort.zip'); + const zipPath = path.join(tempDir, `${packName}.zip`); // Скачиваем файл - await downloadFile(COMFORT_DOWNLOAD_URL, zipPath, (progress) => { + await downloadFile(downloadUrl, zipPath, (progress) => { event.sender.send('download-progress', progress); }); @@ -406,7 +418,7 @@ export function initMinecraftHandlers() { const versionsContents = fs.readdirSync(versionsDir); console.log('Доступные версии:', versionsContents); - return { success: true, updated: true, version: latestVersion }; + return { success: true, updated: true, version: latestVersion, packName }; } catch (error) { console.error('Error in download-and-extract:', error); throw error; @@ -416,7 +428,18 @@ export function initMinecraftHandlers() { // Обработчик для запуска Minecraft ipcMain.handle('launch-minecraft', async (event, gameConfig) => { try { - const baseVersion = '1.21.4'; + const { + accessToken, + uuid, + username, + memory = 2048, + baseVersion = '1.21.4', + packName = 'Comfort', // Название основной сборки + versionToLaunchOverride = '', // Возможность переопределить версию для запуска + serverIp = 'popa-popa.ru', + serverPort, // Добавляем опциональный порт без значения по умолчанию + } = gameConfig || {}; + const appPath = path.dirname(app.getPath('exe')); const minecraftDir = path.join(appPath, '.minecraft'); const versionsDir = path.join(minecraftDir, 'versions'); @@ -427,14 +450,17 @@ export function initMinecraftHandlers() { : []; console.log('Доступные версии:', versionsContents); - // Найти версию Comfort или версию с Fabric - let versionToLaunch = ''; - if (versionsContents.includes('1.21.4-fabric0.16.14')) { - versionToLaunch = '1.21.4-fabric0.16.14'; - } else if (versionsContents.includes('Comfort')) { - versionToLaunch = 'Comfort'; - } else { - versionToLaunch = '1.21.4'; + // Найти версию пакета, Fabric или базовую версию + let versionToLaunch = versionToLaunchOverride; + + if (!versionToLaunch) { + if (versionsContents.includes(`${baseVersion}-fabric0.16.14`)) { + versionToLaunch = `${baseVersion}-fabric0.16.14`; + } else if (versionsContents.includes(packName)) { + versionToLaunch = packName; + } else { + versionToLaunch = baseVersion; + } } console.log('Запускаем версию:', versionToLaunch); @@ -642,22 +668,34 @@ export function initMinecraftHandlers() { message: 'Запуск игры...', }); - const comfortDir = path.join(versionsDir, 'Comfort'); + // При запуске используем переданные параметры + const packDir = path.join(versionsDir, packName); + + // При формировании конфигурации запуска создаем объект server только с нужными параметрами + const serverConfig: any = { ip: serverIp }; + + // Добавляем порт только если он был передан + if (serverPort) { + serverConfig.port = serverPort; + } + const proc = await launch({ - gamePath: comfortDir, + gamePath: packDir, resourcePath: minecraftDir, javaPath, version: versionToLaunch, + launcherName: 'popa-popa', + server: serverConfig, // Используем созданный объект конфигурации extraJVMArgs: [ '-Dlog4j2.formatMsgNoLookups=true', `-javaagent:${authlibPath}=ely.by`, - `-Xmx${gameConfig.memory || 2048}M`, + `-Xmx${memory}M`, ], // Используем данные аутентификации Yggdrasil - accessToken: gameConfig.accessToken, + accessToken, gameProfile: { - id: gameConfig.uuid, - name: gameConfig.username, + id: uuid, + name: username, }, }); diff --git a/src/renderer/pages/LaunchPage.tsx b/src/renderer/pages/LaunchPage.tsx index 23e1cb2..e7820c2 100644 --- a/src/renderer/pages/LaunchPage.tsx +++ b/src/renderer/pages/LaunchPage.tsx @@ -90,8 +90,21 @@ const LaunchPage = () => { localStorage.getItem('launcher_config') || '{}', ); + // Опции для скачивания и запуска сборки + const packOptions = { + downloadUrl: + 'https://github.com/DIKER0K/Comfort/releases/latest/download/Comfort.zip', + apiReleaseUrl: + 'https://api.github.com/repos/DIKER0K/Comfort/releases/latest', + versionFileName: 'comfort_version.txt', + packName: 'Comfort', + serverIp: 'popa-popa.ru', + }; + + // Передаем опции для скачивания const downloadResult = await window.electron.ipcRenderer.invoke( 'download-and-extract', + packOptions, ); if (downloadResult?.success) { @@ -99,25 +112,31 @@ const LaunchPage = () => { if (downloadResult.updated) { showNotification( - `Сборка успешно обновлена до версии ${downloadResult.version}`, + `Сборка ${downloadResult.packName} успешно обновлена до версии ${downloadResult.version}`, 'success', ); needsSecondAttempt = true; } else { showNotification( - `Установлена актуальная версия сборки ${downloadResult.version}`, + `Установлена актуальная версия сборки ${downloadResult.packName} (${downloadResult.version})`, 'info', ); } + // Опции для запуска + const launchOptions = { + accessToken: savedConfig.accessToken, + uuid: savedConfig.uuid, + username: savedConfig.username, + memory: savedConfig.memory || 4096, + baseVersion: '1.21.4', + packName: packOptions.packName, + serverIp: packOptions.serverIp, + }; + const launchResult = await window.electron.ipcRenderer.invoke( 'launch-minecraft', - { - accessToken: savedConfig.accessToken, - uuid: savedConfig.uuid, - username: savedConfig.username, - memory: savedConfig.memory || 4096, - }, + launchOptions, ); if (needsSecondAttempt) { @@ -135,6 +154,8 @@ const LaunchPage = () => { uuid: savedConfig.uuid, username: savedConfig.username, memory: savedConfig.memory || 4096, + serverIp: packOptions.serverIp, + packName: packOptions.packName, }, );