add launcher folder and some checks to it

This commit is contained in:
2026-08-23 01:20:18 +03:00
parent 2c4b594c90
commit af4230500e
13 changed files with 328 additions and 169 deletions
+20 -17
View File
@@ -45,15 +45,14 @@ bool isNativeLibraryFile(const QString &fileName)
for (const QString &suffix : suffixes)
if (fileName.endsWith(suffix, Qt::CaseInsensitive))
return true;
return fileName.contains(QStringLiteral(".so.")); // libfoo.so.1
return fileName.contains(QStringLiteral(".so.")); // libfoo.so.1
}
} // namespace
GameLauncher::GameLauncher(QObject *parent)
: QObject(parent)
{
}
{}
bool GameLauncher::isRunning() const
{
@@ -101,7 +100,7 @@ QStringList GameLauncher::buildArguments(const LaunchOptions &options,
QStringList classpath;
for (const MinecraftLibrary &library : version.libraries) {
if (library.native)
continue; // натив-библиотеки только распаковываются
continue; // натив-библиотеки только распаковываются
classpath << nativeToken(libraryPath(options.gameDir, library));
}
classpath << nativeToken(version.clientJarPath);
@@ -114,11 +113,11 @@ QStringList GameLauncher::buildArguments(const LaunchOptions &options,
variables[QStringLiteral("auth_player_name")] = options.playerName;
variables[QStringLiteral("auth_uuid")] = options.uuid;
variables[QStringLiteral("auth_access_token")] = options.accessToken;
variables[QStringLiteral("auth_session")] =
QStringLiteral("token:%1:%2").arg(options.accessToken, options.uuid);
variables[QStringLiteral("auth_session")] = QStringLiteral("token:%1:%2")
.arg(options.accessToken, options.uuid);
variables[QStringLiteral("auth_xuid")] = QStringLiteral("0");
variables[QStringLiteral("clientid")] =
options.clientToken.isEmpty() ? QStringLiteral("0") : options.clientToken;
variables[QStringLiteral("clientid")] = options.clientToken.isEmpty() ? QStringLiteral("0")
: options.clientToken;
variables[QStringLiteral("user_type")] = options.userType;
variables[QStringLiteral("user_properties")] = QStringLiteral("{}");
variables[QStringLiteral("version_name")] = version.id;
@@ -126,11 +125,11 @@ QStringList GameLauncher::buildArguments(const LaunchOptions &options,
variables[QStringLiteral("game_directory")] = nativeToken(options.gameDir);
variables[QStringLiteral("assets_root")] = nativeToken(assetsRoot);
variables[QStringLiteral("assets_index_name")] = version.assetIndexId;
variables[QStringLiteral("game_assets")] =
nativeToken(legacyAssets ? assetsRoot + QStringLiteral("/virtual/legacy") : assetsRoot);
variables[QStringLiteral("game_assets")] = nativeToken(
legacyAssets ? assetsRoot + QStringLiteral("/virtual/legacy") : assetsRoot);
variables[QStringLiteral("natives_directory")] = nativeToken(nativesDir);
variables[QStringLiteral("library_directory")] =
nativeToken(options.gameDir + QStringLiteral("/libraries"));
variables[QStringLiteral("library_directory")] = nativeToken(options.gameDir
+ QStringLiteral("/libraries"));
variables[QStringLiteral("classpath")] = classpath.join(kClasspathSeparator);
variables[QStringLiteral("classpath_separator")] = QString(kClasspathSeparator);
variables[QStringLiteral("primary_jar")] = nativeToken(version.clientJarPath);
@@ -174,8 +173,8 @@ QStringList GameLauncher::buildArguments(const LaunchOptions &options,
}
// Разрешение окна: у старых версий фич-флага нет, аргументы всё равно понимаются.
if (options.windowWidth > 0 && options.windowHeight > 0
&& !version.hasCustomResolutionArgs && !arguments.contains(QStringLiteral("--width"))) {
if (options.windowWidth > 0 && options.windowHeight > 0 && !version.hasCustomResolutionArgs
&& !arguments.contains(QStringLiteral("--width"))) {
arguments << QStringLiteral("--width") << QString::number(options.windowWidth)
<< QStringLiteral("--height") << QString::number(options.windowHeight);
}
@@ -187,7 +186,8 @@ QStringList GameLauncher::buildArguments(const LaunchOptions &options,
arguments << QStringLiteral("--quickPlayMultiplayer") << options.serverAddress;
} else {
const int colon = options.serverAddress.lastIndexOf(u':');
const QString host = colon > 0 ? options.serverAddress.left(colon) : options.serverAddress;
const QString host = colon > 0 ? options.serverAddress.left(colon)
: options.serverAddress;
const QString port = colon > 0 ? options.serverAddress.mid(colon + 1)
: QStringLiteral("25565");
arguments << QStringLiteral("--server") << host << QStringLiteral("--port") << port;
@@ -247,7 +247,7 @@ bool GameLauncher::extractNatives(const LaunchOptions &options,
const QString target = nativesDir + u'/' + fileName;
const QByteArray data = reader.fileData(entry.filePath);
if (QFileInfo(target).size() == data.size() && QFile::exists(target))
continue; // уже распаковано этим же лаунчером
continue; // уже распаковано этим же лаунчером
QFile file(target);
if (!file.open(QIODevice::WriteOnly) || file.write(data) != data.size()) {
@@ -289,7 +289,10 @@ bool GameLauncher::launch(const LaunchOptions &options,
return false;
emit progress(tr("Поиск Java %1…").arg(version.javaMajor));
const QString java = JavaLocator::select(options.gameDir, version.javaMajor, options.javaPath, error);
const QString java = JavaLocator::select(options.gameDir,
version.javaMajor,
options.javaPath,
error);
if (java.isEmpty())
return false;