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();