From 04f580b0bc4f77b4fb4baab081bc2c356675e962 Mon Sep 17 00:00:00 2001 From: max Date: Tue, 22 Jun 2021 11:22:30 +0300 Subject: [PATCH] Fix launch offline --- api/logic/minecraft/MinecraftInstance.cpp | 10 +++-- api/logic/minecraft/launch/InjectAuthlib.cpp | 47 +++++++++++++------- api/logic/minecraft/launch/InjectAuthlib.h | 5 +++ 3 files changed, 42 insertions(+), 20 deletions(-) diff --git a/api/logic/minecraft/MinecraftInstance.cpp b/api/logic/minecraft/MinecraftInstance.cpp index 30f2817c..d8e3dc3e 100644 --- a/api/logic/minecraft/MinecraftInstance.cpp +++ b/api/logic/minecraft/MinecraftInstance.cpp @@ -886,12 +886,16 @@ shared_qobject_ptr MinecraftInstance::createLaunchTask(AuthSessionPt if(session->status != AuthSession::PlayableOffline) { process->appendStep(new ClaimAccount(pptr, session)); + } + + // do update only if we're in online mode + if (session->wants_online) + { process->appendStep(new Update(pptr, Net::Mode::Online)); } else { - process->appendStep(new Update(pptr, Net::Mode::Online)); - // TODO: Separate "cracked" logins (offline from auth servers) from genuine offline logins (no internet) + process->appendStep(new Update(pptr, Net::Mode::Offline)); } // if there are any jar mods @@ -924,6 +928,7 @@ shared_qobject_ptr MinecraftInstance::createLaunchTask(AuthSessionPt { auto step = new InjectAuthlib(pptr, &m_injector); step->setAuthServer(session->m_accountPtr->provider()->injectorEndpoint().arg(localAuthServerPort)); + step->setOfflineMode(!session->wants_online); process->appendStep(step); } @@ -1050,5 +1055,4 @@ QList< Mod > MinecraftInstance::getJarMods() const return mods; } - #include "MinecraftInstance.moc" diff --git a/api/logic/minecraft/launch/InjectAuthlib.cpp b/api/logic/minecraft/launch/InjectAuthlib.cpp index c37ed4e5..5695e2dc 100644 --- a/api/logic/minecraft/launch/InjectAuthlib.cpp +++ b/api/logic/minecraft/launch/InjectAuthlib.cpp @@ -37,14 +37,21 @@ void InjectAuthlib::executeTask() auto latestVersionInfo = QString("https://authlib-injector.yushi.moe/artifact/latest.json"); auto netJob = new NetJob("Injector versions info download"); MetaEntryPtr entry = ENV.metacache()->resolveEntry("injectors", "version.json"); - entry->setStale(true); - auto task = Net::Download::makeCached(QUrl(latestVersionInfo), entry); - netJob->addNetAction(task); + if (!m_offlineMode) + { + entry->setStale(true); + auto task = Net::Download::makeCached(QUrl(latestVersionInfo), entry); + netJob->addNetAction(task); - jobPtr.reset(netJob); - QObject::connect(netJob, &NetJob::succeeded, this, &InjectAuthlib::onVersionDownloadSucceeded); - QObject::connect(netJob, &NetJob::failed, this, &InjectAuthlib::onDownloadFailed); - jobPtr->start(); + jobPtr.reset(netJob); + QObject::connect(netJob, &NetJob::succeeded, this, &InjectAuthlib::onVersionDownloadSucceeded); + QObject::connect(netJob, &NetJob::failed, this, &InjectAuthlib::onDownloadFailed); + jobPtr->start(); + } + else + { + onVersionDownloadSucceeded(); + } } void InjectAuthlib::onVersionDownloadSucceeded() @@ -102,17 +109,23 @@ void InjectAuthlib::onVersionDownloadSucceeded() m_versionName = fi.fileName(); qDebug() << "Authlib injector version:" << m_versionName; + if (!m_offlineMode) + { + auto netJob = new NetJob("Injector download"); + MetaEntryPtr entry = ENV.metacache()->resolveEntry("injectors", m_versionName); + entry->setStale(true); + auto task = Net::Download::makeCached(QUrl(downloadUrl), entry); + netJob->addNetAction(task); - auto netJob = new NetJob("Injector download"); - MetaEntryPtr entry = ENV.metacache()->resolveEntry("injectors", m_versionName); - entry->setStale(true); - auto task = Net::Download::makeCached(QUrl(downloadUrl), entry); - netJob->addNetAction(task); - - jobPtr.reset(netJob); - QObject::connect(netJob, &NetJob::succeeded, this, &InjectAuthlib::onDownloadSucceeded); - QObject::connect(netJob, &NetJob::failed, this, &InjectAuthlib::onDownloadFailed); - jobPtr->start(); + jobPtr.reset(netJob); + QObject::connect(netJob, &NetJob::succeeded, this, &InjectAuthlib::onDownloadSucceeded); + QObject::connect(netJob, &NetJob::failed, this, &InjectAuthlib::onDownloadFailed); + jobPtr->start(); + } + else + { + onDownloadSucceeded(); + } } void InjectAuthlib::onDownloadSucceeded() diff --git a/api/logic/minecraft/launch/InjectAuthlib.h b/api/logic/minecraft/launch/InjectAuthlib.h index 472e2e1d..53b2b983 100644 --- a/api/logic/minecraft/launch/InjectAuthlib.h +++ b/api/logic/minecraft/launch/InjectAuthlib.h @@ -52,6 +52,10 @@ public: m_authServer = server; }; + void setOfflineMode(bool offline) { + m_offlineMode = offline; + } + public slots: bool abort() override; @@ -64,6 +68,7 @@ private: shared_qobject_ptr jobPtr; bool m_aborted = false; + bool m_offlineMode; QString m_versionName; QString m_authServer; AuthlibInjectorPtr *m_injector;