From 8ace5fa91d7abaadc00758e1f6eeb692f424a8ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sat, 22 Apr 2017 18:51:04 +0200 Subject: [PATCH] NOISSUE Add flame. --- api/logic/CMakeLists.txt | 10 +-- api/logic/InstanceImportTask.cpp | 57 ++++++++++-------- api/logic/InstanceImportTask.h | 6 +- .../{curse => flame}/FileResolvingTask.cpp | 14 ++--- .../{curse => flame}/FileResolvingTask.h | 8 +-- .../{curse => flame}/PackManifest.cpp | 18 +++--- .../minecraft/{curse => flame}/PackManifest.h | 10 +-- .../multimc/128x128/instances/flame.png | Bin 0 -> 3375 bytes .../multimc/32x32/instances/flame.png | Bin 0 -> 849 bytes application/resources/multimc/multimc.qrc | 3 + application/resources/sources/flame.svg | 51 ++++++++++++++++ 11 files changed, 118 insertions(+), 59 deletions(-) rename api/logic/minecraft/{curse => flame}/FileResolvingTask.cpp (76%) rename api/logic/minecraft/{curse => flame}/FileResolvingTask.h (73%) rename api/logic/minecraft/{curse => flame}/PackManifest.cpp (78%) rename api/logic/minecraft/{curse => flame}/PackManifest.h (72%) create mode 100644 application/resources/multimc/128x128/instances/flame.png create mode 100644 application/resources/multimc/32x32/instances/flame.png create mode 100644 application/resources/sources/flame.svg diff --git a/api/logic/CMakeLists.txt b/api/logic/CMakeLists.txt index fa1a9f571..096af6b10 100644 --- a/api/logic/CMakeLists.txt +++ b/api/logic/CMakeLists.txt @@ -291,11 +291,11 @@ set(MINECRAFT_SOURCES minecraft/ftb/FTBPlugin.h minecraft/ftb/FTBPlugin.cpp - # Curse - minecraft/curse/PackManifest.h - minecraft/curse/PackManifest.cpp - minecraft/curse/FileResolvingTask.h - minecraft/curse/FileResolvingTask.cpp + # Flame + minecraft/flame/PackManifest.h + minecraft/flame/PackManifest.cpp + minecraft/flame/FileResolvingTask.h + minecraft/flame/FileResolvingTask.cpp # Assets minecraft/AssetsUtils.h diff --git a/api/logic/InstanceImportTask.cpp b/api/logic/InstanceImportTask.cpp index 2005b61f3..f1b3d5aab 100644 --- a/api/logic/InstanceImportTask.cpp +++ b/api/logic/InstanceImportTask.cpp @@ -11,9 +11,9 @@ #include "icons/IIconList.h" #include -// FIXME: this does not belong here, it's Minecraft/Curse specific -#include "minecraft/curse/FileResolvingTask.h" -#include "minecraft/curse/PackManifest.h" +// FIXME: this does not belong here, it's Minecraft/Flame specific +#include "minecraft/flame/FileResolvingTask.h" +#include "minecraft/flame/PackManifest.h" #include "Json.h" InstanceImportTask::InstanceImportTask(SettingsObjectPtr settings, const QUrl sourceUrl, BaseInstanceProvider * target, @@ -147,16 +147,16 @@ void InstanceImportTask::extractFinished() } const QFileInfo instanceCfgFile = findRecursive(extractDir.absolutePath(), "instance.cfg"); - const QFileInfo curseJson = findRecursive(extractDir.absolutePath(), "manifest.json"); + const QFileInfo flameJson = findRecursive(extractDir.absolutePath(), "manifest.json"); if (instanceCfgFile.isFile()) { qDebug() << "Pack appears to be exported from MultiMC."; processMultiMC(instanceCfgFile); } - else if (curseJson.isFile()) + else if (flameJson.isFile()) { - qDebug() << "Pack appears to be from Curse."; - processCurse(curseJson); + qDebug() << "Pack appears to be from 'Flame'."; + processFlame(flameJson); } else { @@ -173,7 +173,7 @@ void InstanceImportTask::extractAborted() return; } -void InstanceImportTask::processCurse(const QFileInfo & manifest) +void InstanceImportTask::processFlame(const QFileInfo & manifest) { const static QMap forgemap = { {"1.2.5", "3.4.9.171"}, @@ -181,15 +181,15 @@ void InstanceImportTask::processCurse(const QFileInfo & manifest) {"1.4.7", "6.6.2.534"}, {"1.5.2", "7.8.1.737"} }; - Curse::Manifest pack; + Flame::Manifest pack; try { - Curse::loadManifest(pack, manifest.absoluteFilePath()); + Flame::loadManifest(pack, manifest.absoluteFilePath()); } catch (JSONValidationError & e) { m_target->destroyStagingPath(m_stagingPath); - emitFailed(tr("Could not understand curse manifest:\n") + e.cause()); + emitFailed(tr("Could not understand pack manifest:\n") + e.cause()); return; } m_packRoot = manifest.absolutePath(); @@ -200,7 +200,7 @@ void InstanceImportTask::processCurse(const QFileInfo & manifest) if (!QFile::rename(overridePath, mcPath)) { m_target->destroyStagingPath(m_stagingPath); - emitFailed(tr("Could not rename the curse overrides:\n") + pack.overrides); + emitFailed(tr("Could not rename the overrides folder:\n") + pack.overrides); return; } } @@ -215,7 +215,7 @@ void InstanceImportTask::processCurse(const QFileInfo & manifest) forgeVersion = id; continue; } - qWarning() << "Unknown mod loader in curse manifest:" << id; + qWarning() << "Unknown mod loader in manifest:" << id; } QString configPath = FS::PathCombine(m_packRoot, "instance.cfg"); @@ -224,11 +224,11 @@ void InstanceImportTask::processCurse(const QFileInfo & manifest) instanceSettings->set("InstanceType", "OneSix"); OneSixInstance instance(m_globalSettings, instanceSettings, m_packRoot); auto mcVersion = pack.minecraft.version; - // Hack to correct some 'special curse sauce'... + // Hack to correct some 'special sauce'... if(mcVersion.endsWith('.')) { mcVersion.remove(QRegExp("[.]+$")); - qWarning() << "Mysterious trailing dots removed from Minecraft version while importing Curse pack."; + qWarning() << "Mysterious trailing dots removed from Minecraft version while importing pack."; } instance.setComponentVersion("net.minecraft", mcVersion); if(!forgeVersion.isEmpty()) @@ -261,6 +261,11 @@ void InstanceImportTask::processCurse(const QFileInfo & manifest) { instance.setIconKey("ftb_logo"); } + else + { + // default to something other than the MultiMC default to distinguish these + instance.setIconKey("flame"); + } } instance.init(); QString jarmodsPath = FS::PathCombine(m_packRoot, "minecraft", "jarmods"); @@ -282,18 +287,18 @@ void InstanceImportTask::processCurse(const QFileInfo & manifest) FS::deletePath(jarmodsPath); } instance.setName(m_instName); - m_curseResolver.reset(new Curse::FileResolvingTask(pack)); - connect(m_curseResolver.get(), &Curse::FileResolvingTask::succeeded, [&]() + m_modIdResolver.reset(new Flame::FileResolvingTask(pack)); + connect(m_modIdResolver.get(), &Flame::FileResolvingTask::succeeded, [&]() { - auto results = m_curseResolver->getResults(); - m_filesNetJob.reset(new NetJob(tr("Curse mod download"))); + auto results = m_modIdResolver->getResults(); + m_filesNetJob.reset(new NetJob(tr("Mod download"))); for(auto result: results.files) { auto path = FS::PathCombine(m_packRoot, "minecraft/mods", result.fileName); auto dl = Net::Download::makeFile(result.url,path); m_filesNetJob->addNetAction(dl); } - m_curseResolver.reset(); + m_modIdResolver.reset(); connect(m_filesNetJob.get(), &NetJob::succeeded, this, [&]() { m_filesNetJob.reset(); @@ -320,21 +325,21 @@ void InstanceImportTask::processCurse(const QFileInfo & manifest) m_filesNetJob->start(); } ); - connect(m_curseResolver.get(), &Curse::FileResolvingTask::failed, [&](QString reason) + connect(m_modIdResolver.get(), &Flame::FileResolvingTask::failed, [&](QString reason) { m_target->destroyStagingPath(m_stagingPath); - m_curseResolver.reset(); - emitFailed(tr("Unable to resolve Curse mod IDs:\n") + reason); + m_modIdResolver.reset(); + emitFailed(tr("Unable to resolve mod IDs:\n") + reason); }); - connect(m_curseResolver.get(), &Curse::FileResolvingTask::progress, [&](qint64 current, qint64 total) + connect(m_modIdResolver.get(), &Flame::FileResolvingTask::progress, [&](qint64 current, qint64 total) { setProgress(current, total); }); - connect(m_curseResolver.get(), &Curse::FileResolvingTask::status, [&](QString status) + connect(m_modIdResolver.get(), &Flame::FileResolvingTask::status, [&](QString status) { setStatus(status); }); - m_curseResolver->start(); + m_modIdResolver->start(); } void InstanceImportTask::processMultiMC(const QFileInfo & config) diff --git a/api/logic/InstanceImportTask.h b/api/logic/InstanceImportTask.h index a1c1857d3..d51922995 100644 --- a/api/logic/InstanceImportTask.h +++ b/api/logic/InstanceImportTask.h @@ -10,7 +10,7 @@ #include "QObjectPtr.h" class BaseInstanceProvider; -namespace Curse +namespace Flame { class FileResolvingTask; } @@ -29,7 +29,7 @@ protected: private: void extractAndTweak(); void processMultiMC(const QFileInfo &config); - void processCurse(const QFileInfo &manifest); + void processFlame(const QFileInfo &manifest); private slots: void downloadSucceeded(); @@ -41,7 +41,7 @@ private slots: private: /* data */ SettingsObjectPtr m_globalSettings; NetJobPtr m_filesNetJob; - shared_qobject_ptr m_curseResolver; + shared_qobject_ptr m_modIdResolver; QUrl m_sourceUrl; BaseInstanceProvider * m_target; QString m_archivePath; diff --git a/api/logic/minecraft/curse/FileResolvingTask.cpp b/api/logic/minecraft/flame/FileResolvingTask.cpp similarity index 76% rename from api/logic/minecraft/curse/FileResolvingTask.cpp rename to api/logic/minecraft/flame/FileResolvingTask.cpp index aaac404ba..582e4a074 100644 --- a/api/logic/minecraft/curse/FileResolvingTask.cpp +++ b/api/logic/minecraft/flame/FileResolvingTask.cpp @@ -3,16 +3,16 @@ const char * metabase = "https://cursemeta.dries007.net"; -Curse::FileResolvingTask::FileResolvingTask(Curse::Manifest& toProcess) +Flame::FileResolvingTask::FileResolvingTask(Flame::Manifest& toProcess) : m_toProcess(toProcess) { } -void Curse::FileResolvingTask::executeTask() +void Flame::FileResolvingTask::executeTask() { - setStatus(tr("Resolving curse mod IDs...")); + setStatus(tr("Resolving mod IDs...")); setProgress(0, m_toProcess.files.size()); - m_dljob.reset(new NetJob("Curse file resolver")); + m_dljob.reset(new NetJob("Mod id resolver")); results.resize(m_toProcess.files.size()); int index = 0; for(auto & file: m_toProcess.files) @@ -24,11 +24,11 @@ void Curse::FileResolvingTask::executeTask() m_dljob->addNetAction(dl); index ++; } - connect(m_dljob.get(), &NetJob::finished, this, &Curse::FileResolvingTask::netJobFinished); + connect(m_dljob.get(), &NetJob::finished, this, &Flame::FileResolvingTask::netJobFinished); m_dljob->start(); } -void Curse::FileResolvingTask::netJobFinished() +void Flame::FileResolvingTask::netJobFinished() { bool failed = false; int index = 0; @@ -61,6 +61,6 @@ void Curse::FileResolvingTask::netJobFinished() } else { - emitFailed(tr("Some curse ID resolving tasks failed.")); + emitFailed(tr("Some mod ID resolving tasks failed.")); } } diff --git a/api/logic/minecraft/curse/FileResolvingTask.h b/api/logic/minecraft/flame/FileResolvingTask.h similarity index 73% rename from api/logic/minecraft/curse/FileResolvingTask.h rename to api/logic/minecraft/flame/FileResolvingTask.h index a9357bfb0..006584528 100644 --- a/api/logic/minecraft/curse/FileResolvingTask.h +++ b/api/logic/minecraft/flame/FileResolvingTask.h @@ -6,14 +6,14 @@ #include "multimc_logic_export.h" -namespace Curse +namespace Flame { class MULTIMC_LOGIC_EXPORT FileResolvingTask : public Task { Q_OBJECT public: - explicit FileResolvingTask(Curse::Manifest &toProcess); - const Curse::Manifest &getResults() const + explicit FileResolvingTask(Flame::Manifest &toProcess); + const Flame::Manifest &getResults() const { return m_toProcess; } @@ -25,7 +25,7 @@ protected slots: void netJobFinished(); private: /* data */ - Curse::Manifest m_toProcess; + Flame::Manifest m_toProcess; QVector results; NetJobPtr m_dljob; }; diff --git a/api/logic/minecraft/curse/PackManifest.cpp b/api/logic/minecraft/flame/PackManifest.cpp similarity index 78% rename from api/logic/minecraft/curse/PackManifest.cpp rename to api/logic/minecraft/flame/PackManifest.cpp index 7d9c2f89d..629214932 100644 --- a/api/logic/minecraft/curse/PackManifest.cpp +++ b/api/logic/minecraft/flame/PackManifest.cpp @@ -1,7 +1,7 @@ #include "PackManifest.h" #include "Json.h" -static void loadFileV1(Curse::File & f, QJsonObject & file) +static void loadFileV1(Flame::File & f, QJsonObject & file) { f.projectId = Json::requireInteger(file, "projectID"); f.fileId = Json::requireInteger(file, "fileID"); @@ -9,29 +9,29 @@ static void loadFileV1(Curse::File & f, QJsonObject & file) f.required = Json::ensureBoolean(file, QString("required"), true); } -static void loadModloaderV1(Curse::Modloader & m, QJsonObject & modLoader) +static void loadModloaderV1(Flame::Modloader & m, QJsonObject & modLoader) { m.id = Json::requireString(modLoader, "id"); m.primary = Json::ensureBoolean(modLoader, QString("primary"), false); } -static void loadMinecraftV1(Curse::Minecraft & m, QJsonObject & minecraft) +static void loadMinecraftV1(Flame::Minecraft & m, QJsonObject & minecraft) { m.version = Json::requireString(minecraft, "version"); // extra libraries... apparently only used for a custom Minecraft launcher in the 1.2.5 FTB retro pack - // intended use is likely hardcoded in the Curse client, the manifest says nothing + // intended use is likely hardcoded in the 'Flame' client, the manifest says nothing m.libraries = Json::ensureString(minecraft, QString("libraries"), QString()); auto arr = Json::ensureArray(minecraft, "modLoaders", QJsonArray()); for (const auto & item : arr) { auto obj = Json::requireObject(item); - Curse::Modloader loader; + Flame::Modloader loader; loadModloaderV1(loader, obj); m.modLoaders.append(loader); } } -static void loadManifestV1(Curse::Manifest & m, QJsonObject & manifest) +static void loadManifestV1(Flame::Manifest & m, QJsonObject & manifest) { auto mc = Json::requireObject(manifest, "minecraft"); loadMinecraftV1(m.minecraft, mc); @@ -42,21 +42,21 @@ static void loadManifestV1(Curse::Manifest & m, QJsonObject & manifest) for (const auto & item : arr) { auto obj = Json::requireObject(item); - Curse::File file; + Flame::File file; loadFileV1(file, obj); m.files.append(file); } m.overrides = Json::ensureString(manifest, "overrides", "overrides"); } -void Curse::loadManifest(Curse::Manifest & m, const QString &filepath) +void Flame::loadManifest(Flame::Manifest & m, const QString &filepath) { auto doc = Json::requireDocument(filepath); auto obj = Json::requireObject(doc); m.manifestType = Json::requireString(obj, "manifestType"); if(m.manifestType != "minecraftModpack") { - throw JSONValidationError("Not a Curse modpack manifest!"); + throw JSONValidationError("Not a modpack manifest!"); } m.manifestVersion = Json::requireInteger(obj, "manifestVersion"); if(m.manifestVersion != 1) diff --git a/api/logic/minecraft/curse/PackManifest.h b/api/logic/minecraft/flame/PackManifest.h similarity index 72% rename from api/logic/minecraft/curse/PackManifest.h rename to api/logic/minecraft/flame/PackManifest.h index 36e05cc21..ae91bffbc 100644 --- a/api/logic/minecraft/curse/PackManifest.h +++ b/api/logic/minecraft/flame/PackManifest.h @@ -3,7 +3,7 @@ #include #include -namespace Curse +namespace Flame { struct File { @@ -27,20 +27,20 @@ struct Minecraft { QString version; QString libraries; - QVector modLoaders; + QVector modLoaders; }; struct Manifest { QString manifestType; int manifestVersion = 0; - Curse::Minecraft minecraft; + Flame::Minecraft minecraft; QString name; QString version; QString author; - QVector files; + QVector files; QString overrides; }; -void loadManifest(Curse::Manifest & m, const QString &filepath); +void loadManifest(Flame::Manifest & m, const QString &filepath); } diff --git a/application/resources/multimc/128x128/instances/flame.png b/application/resources/multimc/128x128/instances/flame.png new file mode 100644 index 0000000000000000000000000000000000000000..8a50a0b418e8dc27ebb91ab3886d8bea40987104 GIT binary patch literal 3375 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 Gp$Pzsrhird literal 0 HcmV?d00001 diff --git a/application/resources/multimc/multimc.qrc b/application/resources/multimc/multimc.qrc index ef3e9ab6e..b4bc5c164 100644 --- a/application/resources/multimc/multimc.qrc +++ b/application/resources/multimc/multimc.qrc @@ -249,6 +249,9 @@ 32x32/instances/ftb_logo.png 128x128/instances/ftb_logo.png + 32x32/instances/flame.png + 128x128/instances/flame.png + 32x32/instances/gear.png 128x128/instances/gear.png diff --git a/application/resources/sources/flame.svg b/application/resources/sources/flame.svg new file mode 100644 index 000000000..8a6da2f75 --- /dev/null +++ b/application/resources/sources/flame.svg @@ -0,0 +1,51 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + +