summaryrefslogtreecommitdiffstats
path: root/api/logic/minecraft
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2017-09-08 09:02:27 +0200
committerPetr Mrázek <peterix@gmail.com>2017-09-08 09:02:27 +0200
commit3fb4ce713fb7fdef2753009967fa58103fa69974 (patch)
treee1d9b9db3168a631100fb37fde4359d9d857e52a /api/logic/minecraft
parent32a2cb5a0dabbe19eef04f378824af8a10487d97 (diff)
downloadMultiMC-3fb4ce713fb7fdef2753009967fa58103fa69974.tar
MultiMC-3fb4ce713fb7fdef2753009967fa58103fa69974.tar.gz
MultiMC-3fb4ce713fb7fdef2753009967fa58103fa69974.tar.lz
MultiMC-3fb4ce713fb7fdef2753009967fa58103fa69974.tar.xz
MultiMC-3fb4ce713fb7fdef2753009967fa58103fa69974.zip
NOISSUE add support for Flame packs with resource packs
And a bunch of undefined things we don't handle intentionally just yet...
Diffstat (limited to 'api/logic/minecraft')
-rw-r--r--api/logic/minecraft/flame/FileResolvingTask.cpp45
-rw-r--r--api/logic/minecraft/flame/PackManifest.cpp1
-rw-r--r--api/logic/minecraft/flame/PackManifest.h12
3 files changed, 57 insertions, 1 deletions
diff --git a/api/logic/minecraft/flame/FileResolvingTask.cpp b/api/logic/minecraft/flame/FileResolvingTask.cpp
index d55beb63..2194983a 100644
--- a/api/logic/minecraft/flame/FileResolvingTask.cpp
+++ b/api/logic/minecraft/flame/FileResolvingTask.cpp
@@ -49,6 +49,51 @@ void Flame::FileResolvingTask::netJobFinished()
}
out.fileName = Json::requireString(obj, "FileNameOnDisk");
out.url = Json::requireString(obj, "DownloadURL");
+ // This is a piece of a Flame project JSON pulled out into the file metadata (here) for convenience
+ // It is also optional
+ QJsonObject projObj = Json::ensureObject(obj, "_Project", {});
+ if(!projObj.isEmpty())
+ {
+ QString strType = Json::ensureString(projObj, "PackageType", "mod").toLower();
+ if(strType == "singlefile")
+ {
+ out.type = File::Type::SingleFile;
+ }
+ // FIXME: what are these?
+ /*
+ else if(strType == "ctoc")
+ {
+ out.type = File::Type::Ctoc;
+ }
+ else if(strType == "cmod2")
+ {
+ out.type = File::Type::Cmod2;
+ }
+ */
+ else if(strType == "mod")
+ {
+ out.type = File::Type::Mod;
+ }
+ // FIXME: how to handle nested packs and folders?
+ /*
+ else if(strType == "folder")
+ {
+ out.type = File::Type::Folder;
+ }
+ else if(strType == "modpack")
+ {
+ out.type = File::Type::Modpack;
+ }
+ */
+ else
+ {
+ qCritical() << "Resolving of" << out.projectId << out.fileId << "failed because of unknown file type:" << strType;
+ out.type = File::Type::Unknown;
+ failed = true;
+ continue;
+ }
+ out.targetFolder = Json::ensureString(projObj, "Path", "mods");
+ }
out.resolved = true;
}
catch(JSONValidationError & e)
diff --git a/api/logic/minecraft/flame/PackManifest.cpp b/api/logic/minecraft/flame/PackManifest.cpp
index 62921493..6a9324fe 100644
--- a/api/logic/minecraft/flame/PackManifest.cpp
+++ b/api/logic/minecraft/flame/PackManifest.cpp
@@ -5,7 +5,6 @@ static void loadFileV1(Flame::File & f, QJsonObject & file)
{
f.projectId = Json::requireInteger(file, "projectID");
f.fileId = Json::requireInteger(file, "fileID");
- // FIXME: what does this mean?
f.required = Json::ensureBoolean(file, QString("required"), true);
}
diff --git a/api/logic/minecraft/flame/PackManifest.h b/api/logic/minecraft/flame/PackManifest.h
index ae91bffb..07bf92b6 100644
--- a/api/logic/minecraft/flame/PackManifest.h
+++ b/api/logic/minecraft/flame/PackManifest.h
@@ -9,12 +9,24 @@ struct File
{
int projectId = 0;
int fileId = 0;
+ // NOTE: the opposite to 'optional'. This is at the time of writing unused.
bool required = true;
// our
bool resolved = false;
QString fileName;
QString url;
+ QString targetFolder = QLatin1Literal("mods");
+ enum class Type
+ {
+ Unknown,
+ Folder,
+ Ctoc,
+ SingleFile,
+ Cmod2,
+ Modpack,
+ Mod
+ } type = Type::Mod;
};
struct Modloader