From 576d808d7197b4b7ef798891dfd138e2e8aae54f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sun, 13 Mar 2016 02:28:55 +0100 Subject: NOISSUE resolve library activeness during application to profile --- logic/minecraft/MinecraftProfile.cpp | 65 ++++++-------------------- logic/minecraft/MinecraftProfile.h | 23 +++------ logic/minecraft/MinecraftVersion.cpp | 2 +- logic/minecraft/MojangVersionFormat.cpp | 6 +-- logic/minecraft/ProfileUtils.cpp | 2 +- logic/minecraft/VersionFile.cpp | 9 ++-- logic/minecraft/VersionFile.h | 2 +- logic/minecraft/forge/ForgeInstaller.cpp | 6 ++- logic/minecraft/ftb/FTBProfileStrategy.cpp | 9 +++- logic/minecraft/onesix/OneSixInstance.cpp | 4 +- logic/minecraft/onesix/OneSixUpdate.cpp | 4 +- logic/minecraft/onesix/OneSixVersionFormat.cpp | 6 +-- 12 files changed, 51 insertions(+), 87 deletions(-) diff --git a/logic/minecraft/MinecraftProfile.cpp b/logic/minecraft/MinecraftProfile.cpp index 7586c156..1429e7b2 100644 --- a/logic/minecraft/MinecraftProfile.cpp +++ b/logic/minecraft/MinecraftProfile.cpp @@ -228,40 +228,6 @@ bool MinecraftProfile::revertToVanilla() return true; } -QList > MinecraftProfile::getActiveNormalLibs() const -{ - QList > output; - for (auto lib : libraries) - { - if (lib->isActive() && !lib->isNative()) - { - for (auto other : output) - { - if (other->rawName() == lib->rawName()) - { - qWarning() << "Multiple libraries with name" << lib->rawName() << "in library list!"; - continue; - } - } - output.append(lib); - } - } - return output; -} - -QList > MinecraftProfile::getActiveNativeLibs() const -{ - QList > output; - for (auto lib : libraries) - { - if (lib->isActive() && lib->isNative()) - { - output.append(lib); - } - } - return output; -} - QVariant MinecraftProfile::data(const QModelIndex &index, int role) const { if (!index.isValid()) @@ -456,13 +422,9 @@ void MinecraftProfile::applyMainClass(const QString& mainClass) applyString(mainClass, this->mainClass); } -void MinecraftProfile::applyMinecraftArguments(const QString& minecraftArguments, bool isMinecraft) +void MinecraftProfile::applyMinecraftArguments(const QString& minecraftArguments) { applyString(minecraftArguments, this->minecraftArguments); - if(isMinecraft) - { - applyString(minecraftArguments, this->vanillaMinecraftArguments); - } } void MinecraftProfile::applyMinecraftVersionType(const QString& type) @@ -511,7 +473,7 @@ static int findLibraryByName(QList haystack, const GradleSpecifier & return retval; } -void MinecraftProfile::applyLibrary(LibraryPtr library, bool isMinecraft) +void MinecraftProfile::applyLibrary(LibraryPtr library) { auto insert = [&](QList & into) { @@ -531,10 +493,17 @@ void MinecraftProfile::applyLibrary(LibraryPtr library, bool isMinecraft) into.replace(index, libraryCopy); } }; - insert(libraries); - if(isMinecraft) + if(!library->isActive()) + { + return; + } + if(library->isNative()) { - insert(vanillaLibraries); + insert(nativeLibraries); + } + else + { + insert(libraries); } } @@ -596,11 +565,6 @@ QString MinecraftProfile::getMinecraftArguments() const return minecraftArguments; } -QString MinecraftProfile::getVanillaMinecraftArguments() const -{ - return vanillaMinecraftArguments; -} - const QList & MinecraftProfile::getJarMods() const { return jarMods; @@ -611,11 +575,12 @@ const QList & MinecraftProfile::getLibraries() const return libraries; } -const QList & MinecraftProfile::getVanillaLibraries() const +const QList & MinecraftProfile::getNativeLibraries() const { - return vanillaLibraries; + return nativeLibraries; } + void MinecraftProfile::installJarMods(QStringList selectedFiles) { m_strategy->installJarMods(selectedFiles); diff --git a/logic/minecraft/MinecraftProfile.h b/logic/minecraft/MinecraftProfile.h index 24d13609..529274d6 100644 --- a/logic/minecraft/MinecraftProfile.h +++ b/logic/minecraft/MinecraftProfile.h @@ -92,21 +92,15 @@ public: void applyMinecraftVersion(const QString& id); void applyMainClass(const QString& mainClass); void applyAppletClass(const QString& appletClass); - void applyMinecraftArguments(const QString& minecraftArguments, bool isMinecraft); + void applyMinecraftArguments(const QString& minecraftArguments); void applyMinecraftVersionType(const QString& type); void applyMinecraftAssets(const QString& assets); void applyTraits(const QSet &traits); void applyTweakers(const QStringList &tweakers); - void applyJarMods(const QList&jarMods); - void applyLibrary(LibraryPtr library, bool isMinecraft); + void applyJarMods(const QList &jarMods); + void applyLibrary(LibraryPtr library); public: - /// get all java libraries that belong to the classpath - QList getActiveNormalLibs() const; - - /// get all native libraries that need to be available to the process - QList getActiveNativeLibs() const; - QString getMinecraftVersion() const; QString getMainClass() const; QString getAppletClass() const; @@ -118,7 +112,7 @@ public: const QStringList & getTweakers() const; const QList & getJarMods() const; const QList & getLibraries() const; - const QList & getVanillaLibraries() const; + const QList & getNativeLibraries() const; bool hasTrait(const QString & trait) const; public: @@ -158,9 +152,6 @@ protected: /* data */ */ QString minecraftArguments; - /// Same as above, but only for vanilla - QString vanillaMinecraftArguments; - /// A list of all tweaker classes QStringList tweakers; @@ -170,11 +161,11 @@ protected: /* data */ /// The applet class, for some very old minecraft releases QString appletClass; - /// the list of libs - both active and inactive, native and java + /// the list of libraries QList libraries; - /// same, but only vanilla. - QList vanillaLibraries; + /// the list of native libraries + QList nativeLibraries; /// traits, collected from all the version files (version files can only add) QSet traits; diff --git a/logic/minecraft/MinecraftVersion.cpp b/logic/minecraft/MinecraftVersion.cpp index 3224de4c..6b9420b7 100644 --- a/logic/minecraft/MinecraftVersion.cpp +++ b/logic/minecraft/MinecraftVersion.cpp @@ -166,7 +166,7 @@ void MinecraftVersion::applyTo(MinecraftProfile *version) version->applyMinecraftVersion(m_descriptor); version->applyMainClass(m_mainClass); version->applyAppletClass(m_appletClass); - version->applyMinecraftArguments(" ${auth_player_name} ${auth_session}", true); // all builtin versions are legacy + version->applyMinecraftArguments(" ${auth_player_name} ${auth_session}"); // all builtin versions are legacy version->applyMinecraftVersionType(m_type); version->applyTraits(m_traits); } diff --git a/logic/minecraft/MojangVersionFormat.cpp b/logic/minecraft/MojangVersionFormat.cpp index 2d4f26c5..a832e8c7 100644 --- a/logic/minecraft/MojangVersionFormat.cpp +++ b/logic/minecraft/MojangVersionFormat.cpp @@ -182,7 +182,7 @@ VersionFilePtr MojangVersionFormat::versionFileFromJson(const QJsonDocument &doc auto libObj = requireObject(libVal); auto lib = MojangVersionFormat::libraryFromJson(libObj, filename); - out->addLibs.append(lib); + out->libraries.append(lib); } } if(root.contains("downloads")) @@ -213,10 +213,10 @@ QJsonDocument versionFileToJson(VersionFilePtr patch) root.insert("minimumLauncherVersion", patch->minimumLauncherVersion); } - if (!patch->addLibs.isEmpty()) + if (!patch->libraries.isEmpty()) { QJsonArray array; - for (auto value: patch->addLibs) + for (auto value: patch->libraries) { array.append(MojangVersionFormat::libraryToJson(value.get())); } diff --git a/logic/minecraft/ProfileUtils.cpp b/logic/minecraft/ProfileUtils.cpp index dfff7956..a1ca4507 100644 --- a/logic/minecraft/ProfileUtils.cpp +++ b/logic/minecraft/ProfileUtils.cpp @@ -165,6 +165,6 @@ void removeLwjglFromPatch(VersionFilePtr patch) } libs = filteredLibs; }; - filter(patch->addLibs); + filter(patch->libraries); } } diff --git a/logic/minecraft/VersionFile.cpp b/logic/minecraft/VersionFile.cpp index 9cd8dd5e..8476632e 100644 --- a/logic/minecraft/VersionFile.cpp +++ b/logic/minecraft/VersionFile.cpp @@ -32,12 +32,11 @@ void VersionFile::applyTo(MinecraftProfile *version) throw MinecraftVersionMismatch(fileId, mcVersion, theirVersion); } } - bool is_minecraft = isMinecraftVersion(); version->applyMinecraftVersion(id); version->applyMainClass(mainClass); version->applyAppletClass(appletClass); - version->applyMinecraftArguments(minecraftArguments, is_minecraft); - if (is_minecraft) + version->applyMinecraftArguments(minecraftArguments); + if (isMinecraftVersion()) { version->applyMinecraftVersionType(type); } @@ -47,8 +46,8 @@ void VersionFile::applyTo(MinecraftProfile *version) version->applyJarMods(jarMods); version->applyTraits(traits); - for (auto addedLibrary : addLibs) + for (auto library : libraries) { - version->applyLibrary(addedLibrary, isMinecraftVersion()); + version->applyLibrary(library); } } diff --git a/logic/minecraft/VersionFile.h b/logic/minecraft/VersionFile.h index 69866fc5..47ebf9eb 100644 --- a/logic/minecraft/VersionFile.h +++ b/logic/minecraft/VersionFile.h @@ -172,7 +172,7 @@ public: /* data */ QStringList addTweakers; /// Mojang: list of libraries to add to the version - QList addLibs; + QList libraries; /// MultiMC: list of attached traits of this version file - used to enable features QSet traits; diff --git a/logic/minecraft/forge/ForgeInstaller.cpp b/logic/minecraft/forge/ForgeInstaller.cpp index a72160a2..c42a8e18 100644 --- a/logic/minecraft/forge/ForgeInstaller.cpp +++ b/logic/minecraft/forge/ForgeInstaller.cpp @@ -193,6 +193,8 @@ bool ForgeInstaller::add(OneSixInstance *to) QJsonObject libObj = OneSixVersionFormat::libraryToJson(lib.get()); + // FIXME: use upstream Minecraft version files instead, not the processed profile! + /* bool equals = false; // find an entry that matches this one for (auto tolib : to->getMinecraftProfile()->getVanillaLibraries()) @@ -209,6 +211,7 @@ bool ForgeInstaller::add(OneSixInstance *to) { continue; } + */ libraries.append(libObj); } obj.insert("libraries", libraries); @@ -225,7 +228,8 @@ bool ForgeInstaller::add(OneSixInstance *to) match = expression.match(args); } } - if (!args.isEmpty() && args != to->getMinecraftProfile()->getVanillaMinecraftArguments()) + // FIXME: use upstream Minecraft version files instead, not the processed profile! + if (!args.isEmpty() /* && args != to->getMinecraftProfile()->getVanillaMinecraftArguments() */) { obj.insert("minecraftArguments", args); } diff --git a/logic/minecraft/ftb/FTBProfileStrategy.cpp b/logic/minecraft/ftb/FTBProfileStrategy.cpp index 6f635fe8..d43fbf6e 100644 --- a/logic/minecraft/ftb/FTBProfileStrategy.cpp +++ b/logic/minecraft/ftb/FTBProfileStrategy.cpp @@ -19,6 +19,7 @@ void FTBProfileStrategy::loadDefaultBuiltinPatches() // FIXME: this should be here, but it needs us to be able to deal with multiple libraries paths // OneSixProfileStrategy::loadDefaultBuiltinPatches(); auto mcVersion = m_instance->intendedVersionId(); + auto nativeInstance = dynamic_cast(m_instance); ProfilePatchPtr minecraftPatch; { @@ -34,6 +35,11 @@ void FTBProfileStrategy::loadDefaultBuiltinPatches() { file->version = mcVersion; } + for(auto addLib: file->libraries) + { + addLib->setHint("local"); + addLib->setStoragePrefix(nativeInstance->librariesPath().absolutePath()); + } minecraftPatch = std::dynamic_pointer_cast(file); } else @@ -44,7 +50,6 @@ void FTBProfileStrategy::loadDefaultBuiltinPatches() } profile->appendPatch(minecraftPatch); - auto nativeInstance = dynamic_cast(m_instance); ProfilePatchPtr packPatch; { auto mcJson = m_instance->minecraftRoot() + "/pack.json"; @@ -55,7 +60,7 @@ void FTBProfileStrategy::loadDefaultBuiltinPatches() // adapt the loaded file - the FTB patch file format is different than ours. file->id.clear(); - for(auto addLib: file->addLibs) + for(auto addLib: file->libraries) { addLib->setHint("local"); addLib->setStoragePrefix(nativeInstance->librariesPath().absolutePath()); diff --git a/logic/minecraft/onesix/OneSixInstance.cpp b/logic/minecraft/onesix/OneSixInstance.cpp index 93034925..c64d527f 100644 --- a/logic/minecraft/onesix/OneSixInstance.cpp +++ b/logic/minecraft/onesix/OneSixInstance.cpp @@ -179,7 +179,7 @@ QString OneSixInstance::createLaunchScript(AuthSessionPtr session) // libraries and class path. { - auto libs = m_version->getActiveNormalLibs(); + auto libs = m_version->getLibraries(); for (auto lib : libs) { launchScript += "cp " + QFileInfo(lib->storagePath()).absoluteFilePath() + "\n"; @@ -234,7 +234,7 @@ QString OneSixInstance::createLaunchScript(AuthSessionPtr session) // native libraries (mostly LWJGL) { QDir natives_dir(FS::PathCombine(instanceRoot(), "natives/")); - for (auto native : m_version->getActiveNativeLibs()) + for (auto native : m_version->getNativeLibraries()) { QFileInfo finfo(native->storagePath()); launchScript += "ext " + finfo.absoluteFilePath() + "\n"; diff --git a/logic/minecraft/onesix/OneSixUpdate.cpp b/logic/minecraft/onesix/OneSixUpdate.cpp index c12674d4..78938a4f 100644 --- a/logic/minecraft/onesix/OneSixUpdate.cpp +++ b/logic/minecraft/onesix/OneSixUpdate.cpp @@ -207,8 +207,8 @@ void OneSixUpdate::jarlibStart() jarlibDownloadJob.reset(job); } - auto libs = version->getActiveNativeLibs(); - libs.append(version->getActiveNormalLibs()); + auto libs = version->getNativeLibraries(); + libs.append(version->getLibraries()); auto metacache = ENV.metacache(); QList ForgeLibs; diff --git a/logic/minecraft/onesix/OneSixVersionFormat.cpp b/logic/minecraft/onesix/OneSixVersionFormat.cpp index ff26ab92..d9aff535 100644 --- a/logic/minecraft/onesix/OneSixVersionFormat.cpp +++ b/logic/minecraft/onesix/OneSixVersionFormat.cpp @@ -153,7 +153,7 @@ VersionFilePtr OneSixVersionFormat::versionFileFromJson(const QJsonDocument &doc QJsonObject libObj = requireObject(libVal); // parse the library auto lib = libraryFromJson(libObj, filename); - out->addLibs.append(lib); + out->libraries.append(lib); } }; bool hasPlusLibs = root.contains("+libraries"); @@ -230,10 +230,10 @@ static QJsonDocument versionFileToJson(VersionFilePtr patch, bool saveOrder) } writeStringList(root, "+tweakers", patch->addTweakers); writeStringList(root, "+traits", patch->traits.toList()); - if (!patch->addLibs.isEmpty()) + if (!patch->libraries.isEmpty()) { QJsonArray array; - for (auto value: patch->addLibs) + for (auto value: patch->libraries) { array.append(OneSixVersionFormat::libraryToJson(value.get())); } -- cgit v1.2.3