From 7cb8deeb9072d0635728d72835645102ff241da3 Mon Sep 17 00:00:00 2001 From: Trial97 Date: Thu, 20 Jul 2023 19:59:58 +0300 Subject: [PATCH] feat: updated flame mod resolution Signed-off-by: Trial97 --- .../modplatform/flame/FileResolvingTask.cpp | 28 +++++++++++++++++++ .../flame/FlameInstanceCreationTask.cpp | 3 +- launcher/modplatform/flame/PackManifest.h | 3 ++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/launcher/modplatform/flame/FileResolvingTask.cpp b/launcher/modplatform/flame/FileResolvingTask.cpp index d69bf12c0..7ff38d57e 100644 --- a/launcher/modplatform/flame/FileResolvingTask.cpp +++ b/launcher/modplatform/flame/FileResolvingTask.cpp @@ -87,6 +87,30 @@ void Flame::FileResolvingTask::executeTask() m_task->start(); } +PackedResourceType getResourceType(int classId) +{ + switch (classId) { + case 17: // Worlds + return PackedResourceType::WorldSave; + case 6: // Mods + return PackedResourceType::Mod; + case 12: // Resource Packs + // return PackedResourceType::ResourcePack; // not really a resourcepack + /* fallthrough */ + case 4546: // Customization + // return PackedResourceType::ShaderPack; // not really a shaderPack + /* fallthrough */ + case 4471: // Modpacks + /* fallthrough */ + case 5: // Bukkit Plugins + /* fallthrough */ + case 4559: // Addons + /* fallthrough */ + default: + return PackedResourceType::UNKNOWN; + } +} + void Flame::FileResolvingTask::netJobFinished() { setProgress(1, 3); @@ -232,6 +256,10 @@ void Flame::FileResolvingTask::getFlameProjects() setStatus(tr("Parsing API response from CurseForge for '%1'...").arg(file->version.fileName)); FlameMod::loadIndexedPack(file->pack, entry_obj); + file->resourceType = getResourceType(Json::requireInteger(entry_obj, "classId", "modClassId")); + if (file->resourceType == PackedResourceType::WorldSave) { + file->targetFolder = "saves"; + } } } catch (Json::JsonException& e) { qDebug() << e.cause(); diff --git a/launcher/modplatform/flame/FlameInstanceCreationTask.cpp b/launcher/modplatform/flame/FlameInstanceCreationTask.cpp index e60d32cc0..b16277b48 100644 --- a/launcher/modplatform/flame/FlameInstanceCreationTask.cpp +++ b/launcher/modplatform/flame/FlameInstanceCreationTask.cpp @@ -474,7 +474,7 @@ void FlameCreationTask::idResolverSucceeded(QEventLoop& loop) QList blocked_mods; auto anyBlocked = false; for (const auto& result : results.files.values()) { - if (result.version.fileName.endsWith(".zip")) { + if (result.resourceType != PackedResourceType::Mod) { m_ZIP_resources.append(std::make_pair(result.version.fileName, result.targetFolder)); } @@ -678,6 +678,7 @@ void FlameCreationTask::validateZIPResources(QEventLoop& loop) installWorld(worldPath); break; case PackedResourceType::UNKNOWN: + /* fallthrough */ default: qDebug() << "Can't Identify" << fileName << "at" << localPath << ", leaving it where it is."; break; diff --git a/launcher/modplatform/flame/PackManifest.h b/launcher/modplatform/flame/PackManifest.h index 49a0b2d68..7d3693756 100644 --- a/launcher/modplatform/flame/PackManifest.h +++ b/launcher/modplatform/flame/PackManifest.h @@ -40,6 +40,7 @@ #include #include #include +#include "minecraft/mod/tasks/LocalResourceParse.h" #include "modplatform/ModIndex.h" namespace Flame { @@ -54,6 +55,8 @@ struct File { // our QString targetFolder = QStringLiteral("mods"); + enum class Type { Unknown, Folder, Ctoc, SingleFile, Cmod2, Modpack, Mod } type = Type::Mod; + PackedResourceType resourceType; }; struct Modloader {