diff options
author | asie <kontakt@asie.pl> | 2019-06-15 13:54:20 +0200 |
---|---|---|
committer | asie <kontakt@asie.pl> | 2019-06-15 13:54:20 +0200 |
commit | c35dbd972ef5506cf49ff071f743da91d0b36d68 (patch) | |
tree | bbd57722e01045b4854541c8f3397a53c79dbb14 /api/logic | |
parent | 53ad5cb436ea4bffb93c7d26a1be43690a21bf0d (diff) | |
download | MultiMC-c35dbd972ef5506cf49ff071f743da91d0b36d68.tar MultiMC-c35dbd972ef5506cf49ff071f743da91d0b36d68.tar.gz MultiMC-c35dbd972ef5506cf49ff071f743da91d0b36d68.tar.lz MultiMC-c35dbd972ef5506cf49ff071f743da91d0b36d68.tar.xz MultiMC-c35dbd972ef5506cf49ff071f743da91d0b36d68.zip |
Add Fabric mod JSON parsing support
Diffstat (limited to 'api/logic')
-rw-r--r-- | api/logic/minecraft/Mod.cpp | 52 | ||||
-rw-r--r-- | api/logic/minecraft/Mod.h | 1 |
2 files changed, 53 insertions, 0 deletions
diff --git a/api/logic/minecraft/Mod.cpp b/api/logic/minecraft/Mod.cpp index 069a27a4..e41c319f 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,45 @@ 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(); + + if (authors.size() == 0) + m_authors = ""; + else if (authors.size() >= 1) + { + m_authors = authors.at(0).toObject().value("name").toString(); + for (int i = 1; i < authors.size(); i++) + { + m_authors += ", " + authors.at(i).toObject().value("name").toString(); + } + } + + 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); |