NOISSUE add instance-local library storage

Any libraries stored in $instanceroot/libraries/ will override
the libraries from MultiMC's global folders, as long as they are marked 'local'
in the json patch.
This commit is contained in:
Petr Mrázek
2016-10-02 00:26:10 +02:00
parent 69f3ab019d
commit 6e80f03409
13 changed files with 182 additions and 45 deletions

View File

@ -145,6 +145,12 @@ QString OneSixInstance::getNativePath() const
return natives_dir.absolutePath();
}
QString OneSixInstance::getLocalLibraryPath() const
{
QDir libraries_dir(FS::PathCombine(instanceRoot(), "libraries/"));
return libraries_dir.absolutePath();
}
QString OneSixInstance::mainJarPath() const
{
auto jarMods = getJarMods();
@ -207,7 +213,7 @@ QString OneSixInstance::createLaunchScript(AuthSessionPtr session)
{
QStringList jars, nativeJars;
auto javaArchitecture = settings()->get("JavaArchitecture").toString();
m_profile->getLibraryFiles(javaArchitecture, jars, nativeJars);
m_profile->getLibraryFiles(javaArchitecture, jars, nativeJars, getLocalLibraryPath());
for(auto file: jars)
{
launchScript += "cp " + file + "\n";
@ -251,7 +257,7 @@ QStringList OneSixInstance::verboseDescription(AuthSessionPtr session)
out << "Libraries:";
QStringList jars, nativeJars;
auto javaArchitecture = settings()->get("JavaArchitecture").toString();
m_profile->getLibraryFiles(javaArchitecture, jars, nativeJars);
m_profile->getLibraryFiles(javaArchitecture, jars, nativeJars, getLocalLibraryPath());
auto printLibFile = [&](const QString & path)
{
QFileInfo info(path);
@ -654,7 +660,7 @@ QStringList OneSixInstance::getClassPath() const
{
QStringList jars, nativeJars;
auto javaArchitecture = settings()->get("JavaArchitecture").toString();
m_profile->getLibraryFiles(javaArchitecture, jars, nativeJars);
m_profile->getLibraryFiles(javaArchitecture, jars, nativeJars, getLocalLibraryPath());
jars.append(mainJarPath());
return jars;
}
@ -668,6 +674,6 @@ QStringList OneSixInstance::getNativeJars() const
{
QStringList jars, nativeJars;
auto javaArchitecture = settings()->get("JavaArchitecture").toString();
m_profile->getLibraryFiles(javaArchitecture, jars, nativeJars);
m_profile->getLibraryFiles(javaArchitecture, jars, nativeJars, getLocalLibraryPath());
return nativeJars;
}

View File

@ -104,6 +104,8 @@ public:
QStringList getNativeJars() const override;
QString getNativePath() const override;
QString getLocalLibraryPath() const override;
QStringList processMinecraftArgs(AuthSessionPtr account) const override;
protected:

View File

@ -42,7 +42,7 @@ void LibrariesTask::executeTask()
QStringList failedFiles;
for (auto lib : libs)
{
auto dls = lib->getDownloads(currentSystem, metacache.get(), failedFiles);
auto dls = lib->getDownloads(currentSystem, metacache.get(), failedFiles, inst->getLocalLibraryPath());
for(auto dl : dls)
{
downloadJob->addNetAction(dl);