diff options
author | Petr Mrázek <peterix@users.noreply.github.com> | 2021-02-27 04:10:06 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-27 04:10:06 +0100 |
commit | 0a869fc9ed23280b96f79c3e3730f76d8d169630 (patch) | |
tree | 15f79e3e53a5a009738fbd8b2abbb5f74a73b544 /api/logic | |
parent | 1edcd9b86e1174ca236e24002650940c36124a22 (diff) | |
parent | 9c69b0cddee5445e315a063761c1a4ae7dfbfacf (diff) | |
download | PrismLauncher-0a869fc9ed23280b96f79c3e3730f76d8d169630.tar.gz PrismLauncher-0a869fc9ed23280b96f79c3e3730f76d8d169630.tar.bz2 PrismLauncher-0a869fc9ed23280b96f79c3e3730f76d8d169630.zip |
Merge pull request #3623 from jamierocks/ftb/jarmods
Support jarmods and Fabric for modpacks.ch
Diffstat (limited to 'api/logic')
-rw-r--r-- | api/logic/modplatform/modpacksch/FTBPackInstallTask.cpp | 87 | ||||
-rw-r--r-- | api/logic/modplatform/modpacksch/FTBPackInstallTask.h | 1 |
2 files changed, 57 insertions, 31 deletions
diff --git a/api/logic/modplatform/modpacksch/FTBPackInstallTask.cpp b/api/logic/modplatform/modpacksch/FTBPackInstallTask.cpp index dc2b05fe..59546b00 100644 --- a/api/logic/modplatform/modpacksch/FTBPackInstallTask.cpp +++ b/api/logic/modplatform/modpacksch/FTBPackInstallTask.cpp @@ -30,7 +30,7 @@ void PackInstallTask::executeTask() if (vInfo.name == m_version_name) { found = true; version = vInfo; - continue; + break; } } @@ -76,7 +76,7 @@ void PackInstallTask::onDownloadSucceeded() } m_version = version; - install(); + downloadPack(); } void PackInstallTask::onDownloadFailed(QString reason) @@ -85,33 +85,9 @@ void PackInstallTask::onDownloadFailed(QString reason) emitFailed(reason); } -void PackInstallTask::install() +void PackInstallTask::downloadPack() { - setStatus(tr("Installing modpack")); - - auto instanceConfigPath = FS::PathCombine(m_stagingPath, "instance.cfg"); - auto instanceSettings = std::make_shared<INISettingsObject>(instanceConfigPath); - instanceSettings->suspendSave(); - instanceSettings->registerSetting("InstanceType", "Legacy"); - instanceSettings->set("InstanceType", "OneSix"); - - MinecraftInstance instance(m_globalSettings, instanceSettings, m_stagingPath); - auto components = instance.getPackProfile(); - components->buildingFromScratch(); - - for(auto target : m_version.targets) { - if(target.type == "game" && target.name == "minecraft") { - components->setComponentVersion("net.minecraft", target.version, true); - continue; - } - } - - for(auto target : m_version.targets) { - if(target.type == "modloader" && target.name == "forge") { - components->setComponentVersion("net.minecraftforge", target.version, true); - } - } - components->saveNow(); + setStatus(tr("Downloading mods...")); jobPtr.reset(new NetJob(tr("Mod download"))); for(auto file : m_version.files) { @@ -128,7 +104,7 @@ void PackInstallTask::install() connect(jobPtr.get(), &NetJob::succeeded, this, [&]() { jobPtr.reset(); - emitSucceeded(); + install(); }); connect(jobPtr.get(), &NetJob::failed, [&](QString reason) { @@ -137,19 +113,68 @@ void PackInstallTask::install() // FIXME: Temporarily ignore file download failures (matching FTB's installer), // while FTB's data is fucked. qWarning() << "Failed to download files for modpack: " + reason; - emitSucceeded(); + + install(); }); connect(jobPtr.get(), &NetJob::progress, [&](qint64 current, qint64 total) { setProgress(current, total); }); - setStatus(tr("Downloading mods...")); jobPtr->start(); +} + +void PackInstallTask::install() +{ + setStatus(tr("Installing modpack")); + + auto instanceConfigPath = FS::PathCombine(m_stagingPath, "instance.cfg"); + auto instanceSettings = std::make_shared<INISettingsObject>(instanceConfigPath); + instanceSettings->suspendSave(); + instanceSettings->registerSetting("InstanceType", "Legacy"); + instanceSettings->set("InstanceType", "OneSix"); + + MinecraftInstance instance(m_globalSettings, instanceSettings, m_stagingPath); + auto components = instance.getPackProfile(); + components->buildingFromScratch(); + + for(auto target : m_version.targets) { + if(target.type == "game" && target.name == "minecraft") { + components->setComponentVersion("net.minecraft", target.version, true); + break; + } + } + + for(auto target : m_version.targets) { + if(target.type != "modloader") continue; + + if(target.name == "forge") { + components->setComponentVersion("net.minecraftforge", target.version, true); + } + else if(target.name == "fabric") { + components->setComponentVersion("net.fabricmc.fabric-loader", target.version, true); + } + } + + // install any jar mods + QDir jarModsDir(FS::PathCombine(m_stagingPath, "minecraft", "jarmods")); + if (jarModsDir.exists()) { + QStringList jarMods; + + for (const auto& info : jarModsDir.entryInfoList(QDir::NoDotAndDotDot | QDir::Files)) { + jarMods.push_back(info.absoluteFilePath()); + } + + components->installJarMods(jarMods); + } + + components->saveNow(); instance.setName(m_instName); instance.setIconKey(m_instIcon); instanceSettings->resumeSave(); + + emitSucceeded(); } } diff --git a/api/logic/modplatform/modpacksch/FTBPackInstallTask.h b/api/logic/modplatform/modpacksch/FTBPackInstallTask.h index c5a80751..4f7786fd 100644 --- a/api/logic/modplatform/modpacksch/FTBPackInstallTask.h +++ b/api/logic/modplatform/modpacksch/FTBPackInstallTask.h @@ -26,6 +26,7 @@ private slots: void onDownloadFailed(QString reason); private: + void downloadPack(); void install(); private: |