NOISSUE resolve library activeness during application to profile

This commit is contained in:
Petr Mrázek 2016-03-13 02:28:55 +01:00
parent f63d1bc99c
commit 576d808d71
12 changed files with 51 additions and 87 deletions

View File

@ -228,40 +228,6 @@ bool MinecraftProfile::revertToVanilla()
return true;
}
QList<std::shared_ptr<Library> > MinecraftProfile::getActiveNormalLibs() const
{
QList<std::shared_ptr<Library> > 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<std::shared_ptr<Library> > MinecraftProfile::getActiveNativeLibs() const
{
QList<std::shared_ptr<Library> > 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<LibraryPtr> haystack, const GradleSpecifier &
return retval;
}
void MinecraftProfile::applyLibrary(LibraryPtr library, bool isMinecraft)
void MinecraftProfile::applyLibrary(LibraryPtr library)
{
auto insert = [&](QList<LibraryPtr> & into)
{
@ -531,10 +493,17 @@ void MinecraftProfile::applyLibrary(LibraryPtr library, bool isMinecraft)
into.replace(index, libraryCopy);
}
};
insert(libraries);
if(isMinecraft)
if(!library->isActive())
{
insert(vanillaLibraries);
return;
}
if(library->isNative())
{
insert(nativeLibraries);
}
else
{
insert(libraries);
}
}
@ -596,11 +565,6 @@ QString MinecraftProfile::getMinecraftArguments() const
return minecraftArguments;
}
QString MinecraftProfile::getVanillaMinecraftArguments() const
{
return vanillaMinecraftArguments;
}
const QList<JarmodPtr> & MinecraftProfile::getJarMods() const
{
return jarMods;
@ -611,11 +575,12 @@ const QList<LibraryPtr> & MinecraftProfile::getLibraries() const
return libraries;
}
const QList<LibraryPtr> & MinecraftProfile::getVanillaLibraries() const
const QList<LibraryPtr> & MinecraftProfile::getNativeLibraries() const
{
return vanillaLibraries;
return nativeLibraries;
}
void MinecraftProfile::installJarMods(QStringList selectedFiles)
{
m_strategy->installJarMods(selectedFiles);

View File

@ -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<QString> &traits);
void applyTweakers(const QStringList &tweakers);
void applyJarMods(const QList<JarmodPtr> &jarMods);
void applyLibrary(LibraryPtr library, bool isMinecraft);
void applyLibrary(LibraryPtr library);
public:
/// get all java libraries that belong to the classpath
QList<LibraryPtr> getActiveNormalLibs() const;
/// get all native libraries that need to be available to the process
QList<LibraryPtr> getActiveNativeLibs() const;
QString getMinecraftVersion() const;
QString getMainClass() const;
QString getAppletClass() const;
@ -118,7 +112,7 @@ public:
const QStringList & getTweakers() const;
const QList<JarmodPtr> & getJarMods() const;
const QList<LibraryPtr> & getLibraries() const;
const QList<LibraryPtr> & getVanillaLibraries() const;
const QList<LibraryPtr> & 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<LibraryPtr> libraries;
/// same, but only vanilla.
QList<LibraryPtr> vanillaLibraries;
/// the list of native libraries
QList<LibraryPtr> nativeLibraries;
/// traits, collected from all the version files (version files can only add)
QSet<QString> traits;

View File

@ -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);
}

View File

@ -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()));
}

View File

@ -165,6 +165,6 @@ void removeLwjglFromPatch(VersionFilePtr patch)
}
libs = filteredLibs;
};
filter(patch->addLibs);
filter(patch->libraries);
}
}

View File

@ -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);
}
}

View File

@ -172,7 +172,7 @@ public: /* data */
QStringList addTweakers;
/// Mojang: list of libraries to add to the version
QList<LibraryPtr> addLibs;
QList<LibraryPtr> libraries;
/// MultiMC: list of attached traits of this version file - used to enable features
QSet<QString> traits;

View File

@ -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);
}

View File

@ -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<OneSixFTBInstance *>(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<ProfilePatch>(file);
}
else
@ -44,7 +50,6 @@ void FTBProfileStrategy::loadDefaultBuiltinPatches()
}
profile->appendPatch(minecraftPatch);
auto nativeInstance = dynamic_cast<OneSixFTBInstance *>(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());

View File

@ -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";

View File

@ -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<ForgeXzDownloadPtr> ForgeLibs;

View File

@ -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()));
}