summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@users.noreply.github.com>2019-06-15 20:41:42 +0200
committerGitHub <noreply@github.com>2019-06-15 20:41:42 +0200
commit83c48a0f1a7822d5442e604da430d20959132c1e (patch)
treeea014241426b5e430fff58441fff8899cbc57cb1
parent53ad5cb436ea4bffb93c7d26a1be43690a21bf0d (diff)
parentd251097545a3dc4b26b00a3d050856e4cbe9b7ef (diff)
downloadMultiMC-83c48a0f1a7822d5442e604da430d20959132c1e.tar
MultiMC-83c48a0f1a7822d5442e604da430d20959132c1e.tar.gz
MultiMC-83c48a0f1a7822d5442e604da430d20959132c1e.tar.lz
MultiMC-83c48a0f1a7822d5442e604da430d20959132c1e.tar.xz
MultiMC-83c48a0f1a7822d5442e604da430d20959132c1e.zip
Merge pull request #2690 from asiekierka/fabric-modparse
Add Fabric mod JSON parsing support
-rw-r--r--api/logic/minecraft/Mod.cpp55
-rw-r--r--api/logic/minecraft/Mod.h1
2 files changed, 56 insertions, 0 deletions
diff --git a/api/logic/minecraft/Mod.cpp b/api/logic/minecraft/Mod.cpp
index 069a27a4..6217c9d2 100644
--- a/api/logic/minecraft/Mod.cpp
+++ b/api/logic/minecraft/Mod.cpp
@@ -96,6 +96,19 @@ void Mod::repath(const QFileInfo &file)
zip.close();
return;
}
+ else if (zip.setCurrentFile("fabric.mod.json"))
+ {
+ if (!file.open(QIODevice::ReadOnly))
+ {
+ zip.close();
+ return;
+ }
+
+ ReadFabricModInfo(file.readAll());
+ file.close();
+ zip.close();
+ return;
+ }
else if (zip.setCurrentFile("forgeversion.properties"))
{
if (!file.open(QIODevice::ReadOnly))
@@ -224,6 +237,48 @@ void Mod::ReadMCModInfo(QByteArray contents)
}
}
+// https://fabricmc.net/wiki/documentation:fabric_mod_json
+void Mod::ReadFabricModInfo(QByteArray contents)
+{
+ QJsonParseError jsonError;
+ QJsonDocument jsonDoc = QJsonDocument::fromJson(contents, &jsonError);
+ auto object = jsonDoc.object();
+ auto schemaVersion = object.contains("schemaVersion") ? object.value("schemaVersion").toInt(0) : 0;
+
+ m_mod_id = object.value("id").toString();
+ m_version = object.value("version").toString();
+
+ m_name = object.contains("name") ? object.value("name").toString() : m_mod_id;
+ m_description = object.value("description").toString();
+
+ if (schemaVersion >= 1)
+ {
+ QJsonArray authors = object.value("authors").toArray();
+ m_authors = "";
+
+ for (int i = 0; i < authors.size(); i++)
+ {
+ QString author_name = authors.at(i).isObject()
+ ? authors.at(i).toObject().value("name").toString()
+ : authors.at(i).toString();
+
+ if (i > 0)
+ m_authors += ", " + author_name;
+ else {
+ m_authors += author_name;
+ }
+ }
+
+ if (object.contains("contact"))
+ {
+ QJsonObject contact = object.value("contact").toObject();
+
+ if (contact.contains("homepage"))
+ m_homeurl = contact.value("homepage").toString();
+ }
+ }
+}
+
void Mod::ReadForgeInfo(QByteArray contents)
{
// Read the data
diff --git a/api/logic/minecraft/Mod.h b/api/logic/minecraft/Mod.h
index 6c329363..63bf5ab4 100644
--- a/api/logic/minecraft/Mod.h
+++ b/api/logic/minecraft/Mod.h
@@ -113,6 +113,7 @@ public:
private:
void ReadMCModInfo(QByteArray contents);
+ void ReadFabricModInfo(QByteArray contents);
void ReadForgeInfo(QByteArray contents);
void ReadLiteModInfo(QByteArray contents);