aboutsummaryrefslogtreecommitdiff
path: root/api/logic
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@users.noreply.github.com>2021-02-27 04:10:06 +0100
committerGitHub <noreply@github.com>2021-02-27 04:10:06 +0100
commit0a869fc9ed23280b96f79c3e3730f76d8d169630 (patch)
tree15f79e3e53a5a009738fbd8b2abbb5f74a73b544 /api/logic
parent1edcd9b86e1174ca236e24002650940c36124a22 (diff)
parent9c69b0cddee5445e315a063761c1a4ae7dfbfacf (diff)
downloadPrismLauncher-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.cpp87
-rw-r--r--api/logic/modplatform/modpacksch/FTBPackInstallTask.h1
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: