feat: improved launch settings

This commit is contained in:
2025-07-07 06:56:30 +05:00
parent b14de1d15a
commit 1b50a7d4e4
8 changed files with 510 additions and 20 deletions

View File

@ -477,7 +477,7 @@ export function initMinecraftHandlers() {
accessToken,
uuid,
username,
memory = 2048,
memory = 4096,
baseVersion = '1.21.4',
fabricVersion = 'fabric0.16.14',
packName = 'Comfort', // Название основной сборки
@ -761,6 +761,47 @@ export function initMinecraftHandlers() {
return { success: false, error: error.message };
}
});
// Добавьте в функцию initMinecraftHandlers или создайте новую
ipcMain.handle('get-pack-files', async (event, packName) => {
try {
const appPath = path.dirname(app.getPath('exe'));
const minecraftDir = path.join(appPath, '.minecraft');
const packDir = path.join(minecraftDir, 'versions', packName);
if (!fs.existsSync(packDir)) {
return { success: false, error: 'Директория сборки не найдена' };
}
// Функция для рекурсивного обхода директории
const scanDir: any = (dir: any, basePath: any = '') => {
const result = [];
const items = fs.readdirSync(dir);
for (const item of items) {
const itemPath = path.join(dir, item);
const relativePath = basePath ? path.join(basePath, item) : item;
const isDirectory = fs.statSync(itemPath).isDirectory();
result.push({
name: item,
path: relativePath,
isDirectory,
// Если это директория, рекурсивно сканируем ее
children: isDirectory ? scanDir(itemPath, relativePath) : [],
});
}
return result;
};
const files = scanDir(packDir);
return { success: true, files };
} catch (error) {
console.error('Ошибка при получении файлов сборки:', error);
return { success: false, error: error.message };
}
});
}
// Добавляем обработчики IPC для аутентификации
@ -855,3 +896,84 @@ export function initServerStatusHandler() {
}
});
}
// Функция для работы с конфигурацией сборки
export function initPackConfigHandlers() {
// Файл конфигурации
const CONFIG_FILENAME = 'popa-launcher-config.json';
// Обработчик для сохранения настроек сборки
ipcMain.handle('save-pack-config', async (event, { packName, config }) => {
try {
const appPath = path.dirname(app.getPath('exe'));
const minecraftDir = path.join(appPath, '.minecraft');
const packDir = path.join(minecraftDir, 'versions', packName);
// Создаем папку для сборки, если она не существует
if (!fs.existsSync(packDir)) {
fs.mkdirSync(packDir, { recursive: true });
}
const configPath = path.join(packDir, CONFIG_FILENAME);
// Сохраняем конфигурацию в файл
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
// Добавляем файл конфигурации в список файлов, которые не удаляются
if (!config.preserveFiles.includes(CONFIG_FILENAME)) {
config.preserveFiles.push(CONFIG_FILENAME);
// Перезаписываем файл с обновленным списком
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
}
return { success: true };
} catch (error) {
console.error('Ошибка при сохранении настроек сборки:', error);
return { success: false, error: error.message };
}
});
// Обработчик для загрузки настроек сборки
ipcMain.handle('load-pack-config', async (event, { packName }) => {
try {
const appPath = path.dirname(app.getPath('exe'));
const minecraftDir = path.join(appPath, '.minecraft');
const packDir = path.join(minecraftDir, 'versions', packName);
const configPath = path.join(packDir, CONFIG_FILENAME);
// Проверяем существование файла конфигурации
if (!fs.existsSync(configPath)) {
// Если файла нет, возвращаем дефолтную конфигурацию
return {
success: true,
config: {
memory: 4096,
preserveFiles: [CONFIG_FILENAME], // По умолчанию сохраняем файл конфигурации
},
};
}
// Читаем и парсим конфигурацию
const configData = fs.readFileSync(configPath, 'utf8');
const config = JSON.parse(configData);
// Добавляем файл конфигурации в список сохраняемых файлов, если его там нет
if (!config.preserveFiles.includes(CONFIG_FILENAME)) {
config.preserveFiles.push(CONFIG_FILENAME);
}
return { success: true, config };
} catch (error) {
console.error('Ошибка при загрузке настроек сборки:', error);
return {
success: false,
error: error.message,
// Возвращаем дефолтную конфигурацию при ошибке
config: {
memory: 4096,
preserveFiles: [CONFIG_FILENAME],
},
};
}
});
}