From 2bcd2559092d14bbe28976355f6e325ae75c9453 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Fri, 22 Feb 2019 03:01:46 +0100 Subject: [PATCH] HACK add option to launch without a main jar --- api/logic/minecraft/LaunchProfile.cpp | 12 ++++++++++-- api/logic/minecraft/LaunchProfile.h | 2 +- api/logic/minecraft/OneSixVersionFormat.cpp | 16 ++++++++++++++-- api/logic/minecraft/VersionFile.cpp | 2 +- api/logic/minecraft/VersionFile.h | 1 + api/logic/minecraft/update/LibrariesTask.cpp | 6 +++++- 6 files changed, 32 insertions(+), 7 deletions(-) diff --git a/api/logic/minecraft/LaunchProfile.cpp b/api/logic/minecraft/LaunchProfile.cpp index c39bdf04..f392d45c 100644 --- a/api/logic/minecraft/LaunchProfile.cpp +++ b/api/logic/minecraft/LaunchProfile.cpp @@ -162,12 +162,20 @@ const LibraryPtr LaunchProfile::getMainJar() const return m_mainJar; } -void LaunchProfile::applyMainJar(LibraryPtr jar) +void LaunchProfile::applyMainJar(LibraryPtr jar, bool removeMainJar) { - if(jar) + if(removeMainJar) + { + m_mainJar.reset(); + } + else if(jar) { m_mainJar = jar; } + else + { + // mainJar was not specified, NOOP + } } void LaunchProfile::applyProblemSeverity(ProblemSeverity severity) diff --git a/api/logic/minecraft/LaunchProfile.h b/api/logic/minecraft/LaunchProfile.h index 77174079..34f63c6a 100644 --- a/api/logic/minecraft/LaunchProfile.h +++ b/api/logic/minecraft/LaunchProfile.h @@ -20,7 +20,7 @@ public: /* application of profile variables from patches */ void applyJarMods(const QList &jarMods); void applyMods(const QList &jarMods); void applyLibrary(LibraryPtr library); - void applyMainJar(LibraryPtr jar); + void applyMainJar(LibraryPtr jar, bool removeMainJar); void applyProblemSeverity(ProblemSeverity severity); /// clear the profile void clear(); diff --git a/api/logic/minecraft/OneSixVersionFormat.cpp b/api/logic/minecraft/OneSixVersionFormat.cpp index 63bcf002..01e98aee 100644 --- a/api/logic/minecraft/OneSixVersionFormat.cpp +++ b/api/logic/minecraft/OneSixVersionFormat.cpp @@ -187,8 +187,16 @@ VersionFilePtr OneSixVersionFormat::versionFileFromJson(const QJsonDocument &doc // if we have mainJar, just use it if(root.contains("mainJar")) { - QJsonObject libObj = requireObject(root, "mainJar"); - out->mainJar = libraryFromJson(libObj, filename); + auto val = root.value("mainJar"); + if(val.isNull()) + { + out->removeMainJar = true; + } + else + { + QJsonObject libObj = requireObject(root, "mainJar"); + out->mainJar = libraryFromJson(libObj, filename); + } } // else reconstruct it from downloads and id ... if that's available else if(!out->minecraftVersion.isEmpty()) @@ -276,6 +284,10 @@ QJsonDocument OneSixVersionFormat::versionFileToJson(const VersionFilePtr &patch { root.insert("mainJar", libraryToJson(patch->mainJar.get())); } + else if(patch->removeMainJar) + { + root.insert("mainJar", QJsonValue()); + } writeString(root, "appletClass", patch->appletClass); writeStringList(root, "+tweakers", patch->addTweakers); writeStringList(root, "+traits", patch->traits.toList()); diff --git a/api/logic/minecraft/VersionFile.cpp b/api/logic/minecraft/VersionFile.cpp index cfb9e504..297b82e1 100644 --- a/api/logic/minecraft/VersionFile.cpp +++ b/api/logic/minecraft/VersionFile.cpp @@ -28,7 +28,7 @@ void VersionFile::applyTo(LaunchProfile *profile) profile->applyMinecraftAssets(mojangAssetIndex); } - profile->applyMainJar(mainJar); + profile->applyMainJar(mainJar, removeMainJar); profile->applyMainClass(mainClass); profile->applyAppletClass(appletClass); profile->applyMinecraftArguments(minecraftArguments); diff --git a/api/logic/minecraft/VersionFile.h b/api/logic/minecraft/VersionFile.h index 3dc9db96..65f2fa32 100644 --- a/api/logic/minecraft/VersionFile.h +++ b/api/logic/minecraft/VersionFile.h @@ -77,6 +77,7 @@ public: /* data */ /// The main jar (Minecraft version library, normally) LibraryPtr mainJar; + bool removeMainJar = false; /// MultiMC: list of attached traits of this version file - used to enable features QSet traits; diff --git a/api/logic/minecraft/update/LibrariesTask.cpp b/api/logic/minecraft/update/LibrariesTask.cpp index 912f492b..613431e7 100644 --- a/api/logic/minecraft/update/LibrariesTask.cpp +++ b/api/logic/minecraft/update/LibrariesTask.cpp @@ -45,7 +45,11 @@ void LibrariesTask::executeTask() QList libArtifactPool; libArtifactPool.append(profile->getLibraries()); libArtifactPool.append(profile->getNativeLibraries()); - libArtifactPool.append(profile->getMainJar()); + auto mainJar = profile->getMainJar(); + if(mainJar) + { + libArtifactPool.append(mainJar); + } processArtifactPool(libArtifactPool, failedLocalLibraries, inst->getLocalLibraryPath()); QStringList failedLocalJarMods;