forge on linux fix

This commit is contained in:
2026-08-28 00:13:59 +03:00
parent af41017446
commit bbc8633257
5 changed files with 389 additions and 32 deletions
+19 -1
View File
@@ -6,6 +6,7 @@
#include <QString>
#include <QStringList>
class QFile;
class QNetworkAccessManager;
class QNetworkReply;
class QProcess;
@@ -20,7 +21,11 @@ class VersionInstaller;
//
// * Forge и NeoForge так не умеют: их установка — это патч клиентского jar,
// поэтому запускаем официальный installer.jar найденной Java в headless-режиме
// и смотрим, какой профиль появился в versions.
// и смотрим, какой профиль появился в versions. Процессу установщика при этом
// подсовывается эталонный zlib — см. ZlibReference.
//
// Оба пути начинаются одинаково: пока ванильная версия не скачана целиком,
// ставить лоадер некуда, поэтому ensureBaseVersion стоит перед обеими ветками.
//
// Набор геттеров повторяет VersionInstaller: панель загрузки в интерфейсе
// читает их одинаково, независимо от того, кто сейчас работает.
@@ -69,6 +74,11 @@ private:
bool writeLauncherProfilesStub();
void runInstaller(const QString &installerPath);
void handleInstallerFinished(int exitCode, bool crashed);
QStringList versionsAddedByInstaller() const;
void removeVersionsAddedByInstaller();
QString installerFailureHint() const;
void appendInstallerLog(const QString &line);
void closeInstallerLog();
void handOffToVersionInstaller(const QString &versionId);
void setStage(const QString &stage);
@@ -97,6 +107,14 @@ private:
// разницей, а не угадыванием строки — id у Forge разные по эпохам.
QStringList m_versionsBefore;
QStringList m_installerLog;
// Установщик успел отработать — значит, за появившиеся в versions папки
// отвечаем мы и при неудаче их надо убрать.
bool m_installerStarted = false;
// В системе zlib-ng, а подменить его было нечем: почти наверняка причина
// расхождения sha1, о которой стоит сказать прямым текстом.
bool m_zlibNgUnpatched = false;
QFile *m_installerLogFile = nullptr;
QString m_installerLogPath;
// Ждём, пока VersionInstaller докачает то, что установщик не положил.
QString m_awaitingVersionId;