mirror of
https://github.com/MultiMC/MultiMC5.git
synced 2025-03-28 16:21:01 +00:00
Merge pull request #4662 from Scotsguy/develop
NOISSUE Mod metadata parsing for Quilt mods
This commit is contained in:
commit
585c93fd7f
@ -262,6 +262,51 @@ std::shared_ptr<ModDetails> ReadFabricModInfo(QByteArray contents)
|
||||
return details;
|
||||
}
|
||||
|
||||
// https://github.com/QuiltMC/rfcs/blob/master/specification/0002-quilt.mod.json.md
|
||||
std::shared_ptr<ModDetails> ReadQuiltModInfo(QByteArray contents)
|
||||
{
|
||||
QJsonParseError jsonError;
|
||||
QJsonDocument jsonDoc = QJsonDocument::fromJson(contents, &jsonError);
|
||||
auto object = jsonDoc.object();
|
||||
|
||||
std::shared_ptr<ModDetails> details = std::make_shared<ModDetails>();
|
||||
|
||||
if (object.contains("schema_version") && object.value("schema_version").toInt() == 1)
|
||||
{
|
||||
QJsonObject loader = object.value("quilt_loader").toObject();
|
||||
details->mod_id = loader.value("id").toString();
|
||||
details->version = loader.value("version").toString();
|
||||
|
||||
if (loader.contains("metadata"))
|
||||
{
|
||||
QJsonObject metadata = loader.value("metadata").toObject();
|
||||
details->name = metadata.contains("name") ? metadata.value("name").toString() : details->mod_id;
|
||||
|
||||
if (metadata.contains("description"))
|
||||
{
|
||||
details->description = metadata.value("description").toString();
|
||||
}
|
||||
|
||||
if (metadata.contains("contributors"))
|
||||
{
|
||||
// NOTE: This lists every contributor, not just "authors"
|
||||
details->authors = metadata.value("contributors").toObject().keys();
|
||||
}
|
||||
|
||||
if (object.contains("contact"))
|
||||
{
|
||||
QJsonObject contact = object.value("contact").toObject();
|
||||
|
||||
if (contact.contains("homepage"))
|
||||
{
|
||||
details->homeurl = contact.value("homepage").toString();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return details;
|
||||
}
|
||||
|
||||
std::shared_ptr<ModDetails> ReadForgeInfo(QByteArray contents)
|
||||
{
|
||||
std::shared_ptr<ModDetails> details = std::make_shared<ModDetails>();
|
||||
@ -404,6 +449,20 @@ void LocalModParseTask::processAsZip()
|
||||
zip.close();
|
||||
return;
|
||||
}
|
||||
else if (zip.setCurrentFile("quilt.mod.json"))
|
||||
{
|
||||
if (!file.open(QIODevice::ReadOnly))
|
||||
{
|
||||
zip.close();
|
||||
return;
|
||||
}
|
||||
|
||||
m_result->details = ReadQuiltModInfo(file.readAll());
|
||||
file.close();
|
||||
zip.close();
|
||||
return;
|
||||
|
||||
}
|
||||
else if (zip.setCurrentFile("forgeversion.properties"))
|
||||
{
|
||||
if (!file.open(QIODevice::ReadOnly))
|
||||
|
Loading…
x
Reference in New Issue
Block a user