fix: prefer stricter modpack formats during import
Flame modpacks use "manifest.json" as their only characteristic for identification. Some modpacks might have other files called "manifest.json", which is why we should prefer modpack formats that have a stricter structure.
This commit is contained in:
parent
e8b7e70ec9
commit
0263677e1f
@ -135,18 +135,20 @@ void InstanceImportTask::processZipPack()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList blacklist = {"instance.cfg", "manifest.json"};
|
QuaZipDir packZipDir(m_packZip.get());
|
||||||
QString mmcFound = MMCZip::findFolderOfFileInZip(m_packZip.get(), "instance.cfg");
|
|
||||||
bool technicFound = QuaZipDir(m_packZip.get()).exists("/bin/modpack.jar") || QuaZipDir(m_packZip.get()).exists("/bin/version.json");
|
// https://docs.modrinth.com/docs/modpacks/format_definition/#storage
|
||||||
QString flameFound = MMCZip::findFolderOfFileInZip(m_packZip.get(), "manifest.json");
|
bool modrinthFound = packZipDir.exists("/modrinth.index.json");
|
||||||
QString modrinthFound = MMCZip::findFolderOfFileInZip(m_packZip.get(), "modrinth.index.json");
|
bool technicFound = packZipDir.exists("/bin/modpack.jar") || packZipDir.exists("/bin/version.json");
|
||||||
QString root;
|
QString root;
|
||||||
if(!mmcFound.isNull())
|
|
||||||
|
// NOTE: Prioritize modpack platforms that aren't searched for recursively.
|
||||||
|
// Especially Flame has a very common filename for its manifest, which may appear inside overrides for example
|
||||||
|
if(modrinthFound)
|
||||||
{
|
{
|
||||||
// process as MultiMC instance/pack
|
// process as Modrinth pack
|
||||||
qDebug() << "MultiMC:" << mmcFound;
|
qDebug() << "Modrinth:" << modrinthFound;
|
||||||
root = mmcFound;
|
m_modpackType = ModpackType::Modrinth;
|
||||||
m_modpackType = ModpackType::MultiMC;
|
|
||||||
}
|
}
|
||||||
else if (technicFound)
|
else if (technicFound)
|
||||||
{
|
{
|
||||||
@ -156,19 +158,25 @@ void InstanceImportTask::processZipPack()
|
|||||||
extractDir.cd(".minecraft");
|
extractDir.cd(".minecraft");
|
||||||
m_modpackType = ModpackType::Technic;
|
m_modpackType = ModpackType::Technic;
|
||||||
}
|
}
|
||||||
else if(!flameFound.isNull())
|
else
|
||||||
{
|
{
|
||||||
// process as Flame pack
|
QString mmcRoot = MMCZip::findFolderOfFileInZip(m_packZip.get(), "instance.cfg");
|
||||||
qDebug() << "Flame:" << flameFound;
|
QString flameRoot = MMCZip::findFolderOfFileInZip(m_packZip.get(), "manifest.json");
|
||||||
root = flameFound;
|
|
||||||
m_modpackType = ModpackType::Flame;
|
if (!mmcRoot.isEmpty())
|
||||||
}
|
{
|
||||||
else if(!modrinthFound.isNull())
|
// process as MultiMC instance/pack
|
||||||
{
|
qDebug() << "MultiMC:" << mmcRoot;
|
||||||
// process as Modrinth pack
|
root = mmcRoot;
|
||||||
qDebug() << "Modrinth:" << modrinthFound;
|
m_modpackType = ModpackType::MultiMC;
|
||||||
root = modrinthFound;
|
}
|
||||||
m_modpackType = ModpackType::Modrinth;
|
else if(!flameRoot.isEmpty())
|
||||||
|
{
|
||||||
|
// process as Flame pack
|
||||||
|
qDebug() << "Flame:" << flameRoot;
|
||||||
|
root = flameRoot;
|
||||||
|
m_modpackType = ModpackType::Flame;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(m_modpackType == ModpackType::Unknown)
|
if(m_modpackType == ModpackType::Unknown)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user