aboutsummaryrefslogtreecommitdiff
path: root/api/logic/modplatform/atlauncher
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@users.noreply.github.com>2021-06-22 19:55:53 +0200
committerGitHub <noreply@github.com>2021-06-22 19:55:53 +0200
commit5479fbec92481e03d49a4c16dde68f56538b9bc8 (patch)
tree6e1e67980b624da890242dc15a6b4fd37a331f2b /api/logic/modplatform/atlauncher
parentbc2c6cf03027841f775d4b5891db6c25f2f37161 (diff)
parent4ba0c9c2986d9fb133db923d2da60de9272ccc0a (diff)
downloadPrismLauncher-5479fbec92481e03d49a4c16dde68f56538b9bc8.tar.gz
PrismLauncher-5479fbec92481e03d49a4c16dde68f56538b9bc8.tar.bz2
PrismLauncher-5479fbec92481e03d49a4c16dde68f56538b9bc8.zip
Merge pull request #3819 from jamierocks/atl-optional-mods
NOISSUE Support ATLauncher optional mods
Diffstat (limited to 'api/logic/modplatform/atlauncher')
-rw-r--r--api/logic/modplatform/atlauncher/ATLPackInstallTask.cpp21
-rw-r--r--api/logic/modplatform/atlauncher/ATLPackInstallTask.h5
-rw-r--r--api/logic/modplatform/atlauncher/ATLPackManifest.cpp16
-rw-r--r--api/logic/modplatform/atlauncher/ATLPackManifest.h11
4 files changed, 50 insertions, 3 deletions
diff --git a/api/logic/modplatform/atlauncher/ATLPackInstallTask.cpp b/api/logic/modplatform/atlauncher/ATLPackInstallTask.cpp
index 89c4dfd3..89829c05 100644
--- a/api/logic/modplatform/atlauncher/ATLPackInstallTask.cpp
+++ b/api/logic/modplatform/atlauncher/ATLPackInstallTask.cpp
@@ -457,16 +457,31 @@ void PackInstallTask::extractConfigs()
void PackInstallTask::downloadMods()
{
qDebug() << "PackInstallTask::installMods: " << QThread::currentThreadId();
+
+ QVector<ATLauncher::VersionMod> optionalMods;
+ for (const auto& mod : m_version.mods) {
+ if (mod.optional) {
+ optionalMods.push_back(mod);
+ }
+ }
+
+ // Select optional mods, if pack contains any
+ QVector<QString> selectedMods;
+ if (!optionalMods.isEmpty()) {
+ setStatus(tr("Selecting optional mods..."));
+ selectedMods = m_support->chooseOptionalMods(optionalMods);
+ }
+
setStatus(tr("Downloading mods..."));
jarmods.clear();
jobPtr.reset(new NetJob(tr("Mod download")));
for(const auto& mod : m_version.mods) {
// skip non-client mods
- if (!mod.client) continue;
+ if(!mod.client) continue;
- // skip optional mods for now
- if(mod.optional) continue;
+ // skip optional mods that were not selected
+ if(mod.optional && !selectedMods.contains(mod.name)) continue;
QString url;
switch(mod.download) {
diff --git a/api/logic/modplatform/atlauncher/ATLPackInstallTask.h b/api/logic/modplatform/atlauncher/ATLPackInstallTask.h
index 3647e471..8233c376 100644
--- a/api/logic/modplatform/atlauncher/ATLPackInstallTask.h
+++ b/api/logic/modplatform/atlauncher/ATLPackInstallTask.h
@@ -19,6 +19,11 @@ class MULTIMC_LOGIC_EXPORT UserInteractionSupport {
public:
/**
+ * Requests a user interaction to select which optional mods should be installed.
+ */
+ virtual QVector<QString> chooseOptionalMods(QVector<ATLauncher::VersionMod> mods) = 0;
+
+ /**
* Requests a user interaction to select a component version from a given version list
* and constrained to a given Minecraft version.
*/
diff --git a/api/logic/modplatform/atlauncher/ATLPackManifest.cpp b/api/logic/modplatform/atlauncher/ATLPackManifest.cpp
index 57cc52b6..f28fd35c 100644
--- a/api/logic/modplatform/atlauncher/ATLPackManifest.cpp
+++ b/api/logic/modplatform/atlauncher/ATLPackManifest.cpp
@@ -143,8 +143,24 @@ static void loadVersionMod(ATLauncher::VersionMod & p, QJsonObject & obj) {
p.decompFile = Json::requireString(obj, "decompFile");
}
+ p.description = Json::ensureString(obj, QString("description"), "");
p.optional = Json::ensureBoolean(obj, QString("optional"), false);
+ p.recommended = Json::ensureBoolean(obj, QString("recommended"), false);
+ p.selected = Json::ensureBoolean(obj, QString("selected"), false);
+ p.hidden = Json::ensureBoolean(obj, QString("hidden"), false);
+ p.library = Json::ensureBoolean(obj, QString("library"), false);
+ p.group = Json::ensureString(obj, QString("group"), "");
+ if(obj.contains("depends")) {
+ auto dependsArr = Json::requireArray(obj, "depends");
+ for (const auto depends : dependsArr) {
+ p.depends.append(Json::requireString(depends));
+ }
+ }
+
p.client = Json::ensureBoolean(obj, QString("client"), false);
+
+ // computed
+ p.effectively_hidden = p.hidden || p.library;
}
void ATLauncher::loadVersion(PackVersion & v, QJsonObject & obj)
diff --git a/api/logic/modplatform/atlauncher/ATLPackManifest.h b/api/logic/modplatform/atlauncher/ATLPackManifest.h
index 937106a5..376587b0 100644
--- a/api/logic/modplatform/atlauncher/ATLPackManifest.h
+++ b/api/logic/modplatform/atlauncher/ATLPackManifest.h
@@ -86,8 +86,19 @@ struct VersionMod
QString decompType_raw;
QString decompFile;
+ QString description;
bool optional;
+ bool recommended;
+ bool selected;
+ bool hidden;
+ bool library;
+ QString group;
+ QVector<QString> depends;
+
bool client;
+
+ // computed
+ bool effectively_hidden;
};
struct PackVersion