aboutsummaryrefslogtreecommitdiff
path: root/launcher
diff options
context:
space:
mode:
authorSefa Eyeoglu <contact@scrumplex.net>2022-02-20 20:55:26 +0100
committerSefa Eyeoglu <contact@scrumplex.net>2022-04-07 18:46:09 +0200
commit35cfb41a9c8cf1328f3d2d14022cf51cbfc67f1f (patch)
treeb315174ed647f46ce438ab07862caaca429e3cb4 /launcher
parent74cdf5350de1649955814d6bcd596d8abfe9c5e2 (diff)
downloadPrismLauncher-35cfb41a9c8cf1328f3d2d14022cf51cbfc67f1f.tar.gz
PrismLauncher-35cfb41a9c8cf1328f3d2d14022cf51cbfc67f1f.tar.bz2
PrismLauncher-35cfb41a9c8cf1328f3d2d14022cf51cbfc67f1f.zip
fix: check for Quilt as Fabric-compatible loader
Diffstat (limited to 'launcher')
-rw-r--r--launcher/InstanceImportTask.cpp1
-rw-r--r--launcher/minecraft/PackProfile.cpp17
-rw-r--r--launcher/minecraft/PackProfile.h3
-rw-r--r--launcher/minecraft/mod/LocalModParseTask.cpp2
-rw-r--r--launcher/modplatform/ModAPI.h2
-rw-r--r--launcher/modplatform/flame/FlameModIndex.cpp1
-rw-r--r--launcher/modplatform/modrinth/ModrinthAPI.h6
-rw-r--r--launcher/ui/pages/instance/ModFolderPage.cpp8
-rw-r--r--launcher/ui/pages/modplatform/ModModel.cpp15
-rw-r--r--launcher/ui/pages/modplatform/ModModel.h1
-rw-r--r--launcher/ui/pages/modplatform/ModPage.cpp16
11 files changed, 54 insertions, 18 deletions
diff --git a/launcher/InstanceImportTask.cpp b/launcher/InstanceImportTask.cpp
index a825e8d4..eeca29c6 100644
--- a/launcher/InstanceImportTask.cpp
+++ b/launcher/InstanceImportTask.cpp
@@ -241,6 +241,7 @@ void InstanceImportTask::processFlame()
QString forgeVersion;
QString fabricVersion;
+ // TODO: is Quilt relevant here?
for(auto &loader: pack.minecraft.modLoaders)
{
auto id = loader.id;
diff --git a/launcher/minecraft/PackProfile.cpp b/launcher/minecraft/PackProfile.cpp
index d516e555..9889727e 100644
--- a/launcher/minecraft/PackProfile.cpp
+++ b/launcher/minecraft/PackProfile.cpp
@@ -970,3 +970,20 @@ void PackProfile::disableInteraction(bool disable)
}
}
}
+
+ModAPI::ModLoaderType PackProfile::getModLoader()
+{
+ if (!getComponentVersion("net.minecraftforge").isEmpty())
+ {
+ return ModAPI::Forge;
+ }
+ else if (!getComponentVersion("net.fabricmc.fabric-loader").isEmpty())
+ {
+ return ModAPI::Fabric;
+ }
+ else if (!getComponentVersion("org.quiltmc.quilt-loader").isEmpty())
+ {
+ return ModAPI::Quilt;
+ }
+ return ModAPI::Any;
+}
diff --git a/launcher/minecraft/PackProfile.h b/launcher/minecraft/PackProfile.h
index 989d1c6a..ab4cd5c8 100644
--- a/launcher/minecraft/PackProfile.h
+++ b/launcher/minecraft/PackProfile.h
@@ -28,6 +28,7 @@
#include "BaseVersion.h"
#include "MojangDownloadInfo.h"
#include "net/Mode.h"
+#include "modplatform/ModAPI.h"
class MinecraftInstance;
struct PackProfileData;
@@ -117,6 +118,8 @@ public:
// todo(merged): is this the best approach
void appendComponent(ComponentPtr component);
+ ModAPI::ModLoaderType getModLoader();
+
private:
void scheduleSave();
bool saveIsScheduled() const;
diff --git a/launcher/minecraft/mod/LocalModParseTask.cpp b/launcher/minecraft/mod/LocalModParseTask.cpp
index 757a2187..f01da8ae 100644
--- a/launcher/minecraft/mod/LocalModParseTask.cpp
+++ b/launcher/minecraft/mod/LocalModParseTask.cpp
@@ -391,7 +391,7 @@ void LocalModParseTask::processAsZip()
zip.close();
return;
}
- else if (zip.setCurrentFile("fabric.mod.json"))
+ else if (zip.setCurrentFile("fabric.mod.json")) // TODO: Support quilt.mod.json
{
if (!file.open(QIODevice::ReadOnly))
{
diff --git a/launcher/modplatform/ModAPI.h b/launcher/modplatform/ModAPI.h
index ae6ac80f..1e38cf62 100644
--- a/launcher/modplatform/ModAPI.h
+++ b/launcher/modplatform/ModAPI.h
@@ -15,7 +15,7 @@ class ModAPI {
virtual ~ModAPI() = default;
// https://docs.curseforge.com/?http#tocS_ModLoaderType
- enum ModLoaderType { Any = 0, Forge = 1, Cauldron = 2, LiteLoader = 3, Fabric = 4 };
+ enum ModLoaderType { Any = 0, Forge = 1, Cauldron = 2, LiteLoader = 3, Fabric = 4, Quilt = 5 };
struct SearchArgs {
int offset;
diff --git a/launcher/modplatform/flame/FlameModIndex.cpp b/launcher/modplatform/flame/FlameModIndex.cpp
index 2c3adee4..e86b64dd 100644
--- a/launcher/modplatform/flame/FlameModIndex.cpp
+++ b/launcher/modplatform/flame/FlameModIndex.cpp
@@ -69,6 +69,7 @@ void FlameMod::loadIndexedPackVersions(ModPlatform::IndexedPack& pack,
for (auto m : modules) {
auto fname = Json::requireString(m.toObject(), "foldername");
// FIXME: This does not work properly when a mod supports more than one mod loader, since
+ // FIXME: This also doesn't deal with Quilt mods at the moment
// they bundle the meta files for all of them in the same arquive, even when that version
// doesn't support the given mod loader.
if (hasFabric) {
diff --git a/launcher/modplatform/modrinth/ModrinthAPI.h b/launcher/modplatform/modrinth/ModrinthAPI.h
index 30952e99..711649d9 100644
--- a/launcher/modplatform/modrinth/ModrinthAPI.h
+++ b/launcher/modplatform/modrinth/ModrinthAPI.h
@@ -55,11 +55,13 @@ class ModrinthAPI : public NetworkModAPI {
{
switch (modLoader) {
case Any:
- return "fabric, forge";
+ return "fabric, forge, quilt";
case Forge:
return "forge";
case Fabric:
return "fabric";
+ case Quilt:
+ return "quilt";
default:
return "";
}
@@ -67,7 +69,7 @@ class ModrinthAPI : public NetworkModAPI {
inline auto validateModLoader(ModLoaderType modLoader) const -> bool
{
- return modLoader == Any || modLoader == Forge || modLoader == Fabric;
+ return modLoader == Any || modLoader == Forge || modLoader == Fabric || modLoader == Quilt;
}
};
diff --git a/launcher/ui/pages/instance/ModFolderPage.cpp b/launcher/ui/pages/instance/ModFolderPage.cpp
index fcb6022d..6acf94c7 100644
--- a/launcher/ui/pages/instance/ModFolderPage.cpp
+++ b/launcher/ui/pages/instance/ModFolderPage.cpp
@@ -56,6 +56,8 @@
#include "minecraft/VersionFilterData.h"
#include "minecraft/PackProfile.h"
+#include "modplatform/ModAPI.h"
+
#include "Version.h"
#include "ui/dialogs/ProgressDialog.h"
#include "tasks/SequentialTask.h"
@@ -388,9 +390,9 @@ void ModFolderPage::on_actionInstall_mods_triggered()
if(m_inst->typeName() != "Minecraft"){
return; //this is a null instance or a legacy instance
}
- bool hasFabric = !((MinecraftInstance *)m_inst)->getPackProfile()->getComponentVersion("net.fabricmc.fabric-loader").isEmpty();
- bool hasForge = !((MinecraftInstance *)m_inst)->getPackProfile()->getComponentVersion("net.minecraftforge").isEmpty();
- if (!hasFabric && !hasForge) {
+ QStringList modLoaders = {"net.minecraftforge", "net.fabricmc.fabric-loader", "org.quiltmc.quilt-loader"};
+ auto profile = ((MinecraftInstance *)m_inst)->getPackProfile();
+ if (profile->getModLoader() == ModAPI::Any) {
QMessageBox::critical(this,tr("Error"),tr("Please install a mod loader first!"));
return;
}
diff --git a/launcher/ui/pages/modplatform/ModModel.cpp b/launcher/ui/pages/modplatform/ModModel.cpp
index 01b5d247..f75d2847 100644
--- a/launcher/ui/pages/modplatform/ModModel.cpp
+++ b/launcher/ui/pages/modplatform/ModModel.cpp
@@ -61,14 +61,18 @@ auto ListModel::data(const QModelIndex& index, int role) const -> QVariant
void ListModel::requestModVersions(ModPlatform::IndexedPack const& current)
{
+ auto profile = (dynamic_cast<MinecraftInstance*>((dynamic_cast<ModPage*>(parent()))->m_instance))->getPackProfile();
+
m_parent->apiProvider()->getVersions(this,
- { current.addonId.toString(), getMineVersions(), hasFabric() ? ModAPI::ModLoaderType::Fabric : ModAPI::ModLoaderType::Forge });
+ { current.addonId.toString(), getMineVersions(), profile->getModLoader() });
}
void ListModel::performPaginatedSearch()
{
+ auto profile = (dynamic_cast<MinecraftInstance*>((dynamic_cast<ModPage*>(parent()))->m_instance))->getPackProfile();
+
m_parent->apiProvider()->searchMods(this,
- { nextSearchOffset, currentSearchTerm, getSorts()[currentSort], hasFabric() ? ModAPI::Fabric : ModAPI::Forge, getMineVersions().at(0) });
+ { nextSearchOffset, currentSearchTerm, getSorts()[currentSort], profile->getModLoader(), getMineVersions().at(0) });
}
void ListModel::searchWithTerm(const QString& term, const int sort)
@@ -218,13 +222,6 @@ void ListModel::versionRequestSucceeded(QJsonDocument doc, QString addonId)
} // namespace ModPlatform
/******** Helpers ********/
-auto ModPlatform::ListModel::hasFabric() const -> bool
-{
- return !(dynamic_cast<MinecraftInstance*>((dynamic_cast<ModPage*>(parent()))->m_instance))
- ->getPackProfile()
- ->getComponentVersion("net.fabricmc.fabric-loader")
- .isEmpty();
-}
auto ModPlatform::ListModel::getMineVersions() const -> QList<QString>
{
diff --git a/launcher/ui/pages/modplatform/ModModel.h b/launcher/ui/pages/modplatform/ModModel.h
index 64cfa71e..dbadbeee 100644
--- a/launcher/ui/pages/modplatform/ModModel.h
+++ b/launcher/ui/pages/modplatform/ModModel.h
@@ -62,7 +62,6 @@ class ListModel : public QAbstractListModel {
void requestLogo(QString file, QString url);
- inline auto hasFabric() const -> bool;
inline auto getMineVersions() const -> QList<QString>;
protected:
diff --git a/launcher/ui/pages/modplatform/ModPage.cpp b/launcher/ui/pages/modplatform/ModPage.cpp
index 3a116d3c..95e385cc 100644
--- a/launcher/ui/pages/modplatform/ModPage.cpp
+++ b/launcher/ui/pages/modplatform/ModPage.cpp
@@ -136,7 +136,21 @@ void ModPage::updateModVersions()
auto packProfile = (dynamic_cast<MinecraftInstance*>(m_instance))->getPackProfile();
QString mcVersion = packProfile->getComponentVersion("net.minecraft");
- QString loaderString = (packProfile->getComponentVersion("net.minecraftforge").isEmpty()) ? "fabric" : "forge";
+
+ QString loaderString;
+ switch (packProfile->getModLoader()) {
+ case ModAPI::Forge:
+ loaderString = "forge";
+ break;
+ case ModAPI::Fabric:
+ loaderString = "fabric";
+ break;
+ case ModAPI::Quilt:
+ loaderString = "quilt";
+ break;
+ default:
+ break;
+ }
for (int i = 0; i < current.versions.size(); i++) {
auto version = current.versions[i];