diff --git a/launcher/minecraft/Component.cpp b/launcher/minecraft/Component.cpp
index 329e6b78e..df27ac071 100644
--- a/launcher/minecraft/Component.cpp
+++ b/launcher/minecraft/Component.cpp
@@ -38,7 +38,6 @@
#include
#include
-#include
#include "Application.h"
#include "FileSystem.h"
@@ -50,6 +49,14 @@
#include
+const QMap Component::KNOWN_MODLOADERS = {
+ { "net.neoforged", { ModPlatform::NeoForge, { "net.minecraftforge", "net.fabricmc.fabric-loader", "net.fabricmc.fabric-loader" } } },
+ { "net.minecraftforge", { ModPlatform::Forge, { "net.neoforged", "net.fabricmc.fabric-loader", "net.fabricmc.fabric-loader" } } },
+ { "net.fabricmc.fabric-loader", { ModPlatform::Fabric, { "net.minecraftforge", "net.neoforged", "org.quiltmc.quilt-loader" } } },
+ { "org.quiltmc.quilt-loader", { ModPlatform::Quilt, { "net.minecraftforge", "net.neoforged", "net.fabricmc.fabric-loader" } } },
+ { "com.mumfrey.liteloader", { ModPlatform::LiteLoader, {} } }
+};
+
Component::Component(PackProfile* parent, const QString& uid)
{
assert(parent);
@@ -231,11 +238,11 @@ bool Component::isKnownModloader()
return iter != KNOWN_MODLOADERS.cend();
}
-QStringList Component::knownConfictingComponents()
+QStringList Component::knownConflictingComponents()
{
auto iter = KNOWN_MODLOADERS.find(m_uid);
if (iter != KNOWN_MODLOADERS.cend()) {
- return (*iter).knownConfictingComponents;
+ return (*iter).knownConflictingComponents;
} else {
return {};
}
@@ -276,12 +283,16 @@ void Component::addComponentProblem(ProblemSeverity severity, const QString& des
m_componentProblemSeverity = severity;
}
m_componentProblems.append({ severity, description });
+
+ emit dataChanged();
}
void Component::resetComponentProblems()
{
m_componentProblems.clear();
m_componentProblemSeverity = ProblemSeverity::None;
+
+ emit dataChanged();
}
void Component::setVersion(const QString& version)
diff --git a/launcher/minecraft/Component.h b/launcher/minecraft/Component.h
index 3669638f2..7ff30889f 100644
--- a/launcher/minecraft/Component.h
+++ b/launcher/minecraft/Component.h
@@ -23,7 +23,7 @@ struct UpdateActionChangeVersion {
/// version to change to
QString targetVersion;
};
-struct UpdateActionLatestRecommendedCompatable {
+struct UpdateActionLatestRecommendedCompatible {
/// Parent uid
QString parentUid;
QString parentName;
@@ -40,20 +40,13 @@ using UpdateActionNone = std::monostate;
using UpdateAction = std::variant;
struct ModloaderMapEntry {
ModPlatform::ModLoaderType type;
- QStringList knownConfictingComponents;
-};
-static const QMap KNOWN_MODLOADERS{
- { "net.neoforged", { ModPlatform::NeoForge, { "net.minecraftforge", "net.fabricmc.fabric-loader", "net.fabricmc.fabric-loader" } } },
- { "net.minecraftforge", { ModPlatform::Forge, { "net.neoforged", "net.fabricmc.fabric-loader", "net.fabricmc.fabric-loader" } } },
- { "net.fabricmc.fabric-loader", { ModPlatform::Fabric, { "net.minecraftforge", "net.neoforged", "org.quiltmc.quilt-loader" } } },
- { "org.quiltmc.quilt-loader", { ModPlatform::Quilt, { "net.minecraftforge", "net.neoforged", "net.fabricmc.fabric-loader" } } },
- { "com.mumfrey.liteloader", { ModPlatform::LiteLoader, {} } }
+ QStringList knownConflictingComponents;
};
class Component : public QObject, public ProblemProvider {
@@ -66,6 +59,8 @@ class Component : public QObject, public ProblemProvider {
virtual ~Component() {}
+ static const QMap KNOWN_MODLOADERS;
+
void applyTo(LaunchProfile* profile);
bool isEnabled();
@@ -79,7 +74,7 @@ class Component : public QObject, public ProblemProvider {
bool isCustom();
bool isVersionChangeable();
bool isKnownModloader();
- QStringList knownConfictingComponents();
+ QStringList knownConflictingComponents();
// DEPRECATED: explicit numeric order values, used for loading old non-component config. TODO: refactor and move to migration code
void setOrder(int order);
diff --git a/launcher/minecraft/ComponentUpdateTask.cpp b/launcher/minecraft/ComponentUpdateTask.cpp
index f4efba36f..6656a84f8 100644
--- a/launcher/minecraft/ComponentUpdateTask.cpp
+++ b/launcher/minecraft/ComponentUpdateTask.cpp
@@ -570,25 +570,22 @@ void ComponentUpdateTask::performUpdateActions()
component->setVersion(cv.targetVersion);
component->waitLoadMeta();
},
- [&component, &instance](const UpdateActionLatestRecommendedCompatable lrc) {
+ [&component, &instance](const UpdateActionLatestRecommendedCompatible lrc) {
qCDebug(instanceProfileResolveC)
<< instance->name() << "|"
- << "UpdateActionLatestRecommendedCompatable" << component->getID() << ":" << component->getVersion()
+ << "UpdateActionLatestRecommendedCompatible" << component->getID() << ":" << component->getVersion()
<< "updating to latest recommend or compatible with" << lrc.parentUid << lrc.version;
auto versionList = APPLICATION->metadataIndex()->get(component->getID());
- versionList->waitToLoad();
if (versionList) {
+ versionList->waitToLoad();
auto recommended = versionList->getRecommendedForParent(lrc.parentUid, lrc.version);
+ if (!recommended) {
+ recommended = versionList->getLatestForParent(lrc.parentUid, lrc.version);
+ }
if (recommended) {
component->setVersion(recommended->version());
component->waitLoadMeta();
return;
- }
-
- auto latest = versionList->getLatestForParent(lrc.parentUid, lrc.version);
- if (latest) {
- component->setVersion(latest->version());
- component->waitLoadMeta();
} else {
component->addComponentProblem(ProblemSeverity::Error,
QObject::tr("No compatible version of %1 found for %2 %3")
@@ -635,14 +632,14 @@ void ComponentUpdateTask::performUpdateActions()
if (!newVersion.isEmpty()) {
comp->setUpdateAction(UpdateAction{ UpdateActionChangeVersion{ newVersion } });
} else {
- comp->setUpdateAction(UpdateAction{ UpdateActionLatestRecommendedCompatable{
+ comp->setUpdateAction(UpdateAction{ UpdateActionLatestRecommendedCompatible{
component->getID(),
component->getName(),
component->getVersion(),
} });
}
} else {
- comp->setUpdateAction(UpdateAction{ UpdateActionLatestRecommendedCompatable{
+ comp->setUpdateAction(UpdateAction{ UpdateActionLatestRecommendedCompatible{
component->getID(),
component->getName(),
component->getVersion(),
@@ -690,7 +687,7 @@ void ComponentUpdateTask::finalizeComponents()
}
}
}
- for (auto conflict : component->knownConfictingComponents()) {
+ for (auto conflict : component->knownConflictingComponents()) {
auto found = componentIndex.find(conflict);
if (found != componentIndex.cend()) {
auto foundComp = *found;
diff --git a/launcher/minecraft/PackProfile.cpp b/launcher/minecraft/PackProfile.cpp
index 8623c500f..d992a18f3 100644
--- a/launcher/minecraft/PackProfile.cpp
+++ b/launcher/minecraft/PackProfile.cpp
@@ -1034,7 +1034,7 @@ std::optional PackProfile::getModLoaders()
ModPlatform::ModLoaderTypes result;
bool has_any_loader = false;
- QMapIterator i(KNOWN_MODLOADERS);
+ QMapIterator i(Component::KNOWN_MODLOADERS);
while (i.hasNext()) {
i.next();