diff --git a/launcher/modplatform/modrinth/ModrinthInstanceExportTask.cpp b/launcher/modplatform/modrinth/ModrinthInstanceExportTask.cpp index 7f33c4de..6f09c09c 100644 --- a/launcher/modplatform/modrinth/ModrinthInstanceExportTask.cpp +++ b/launcher/modplatform/modrinth/ModrinthInstanceExportTask.cpp @@ -29,15 +29,24 @@ void InstanceExportTask::executeTask() QDir modsDir(m_instance->gameRoot() + "/mods"); modsDir.setFilter(QDir::Files); - modsDir.setNameFilters(QStringList() << "*.jar"); + QStringList modsFilter = { "*.jar" }; + if (m_settings.treatDisabledAsOptional) { + modsFilter << "*.jar.disabled"; + } + modsDir.setNameFilters(modsFilter); + + QStringList zipFilter = { "*.zip" }; + if (m_settings.treatDisabledAsOptional) { + zipFilter << "*.zip.disabled"; + } QDir resourcePacksDir(m_instance->gameRoot() + "/resourcepacks"); resourcePacksDir.setFilter(QDir::Files); - resourcePacksDir.setNameFilters(QStringList() << "*.zip"); + resourcePacksDir.setNameFilters(zipFilter); QDir shaderPacksDir(m_instance->gameRoot() + "/shaderpacks"); shaderPacksDir.setFilter(QDir::Files); - shaderPacksDir.setNameFilters(QStringList() << "*.zip"); + shaderPacksDir.setNameFilters(zipFilter); QStringList filesToResolve; @@ -132,7 +141,13 @@ void InstanceExportTask::lookupSucceeded() QDir gameDir(m_instance->gameRoot()); - fileData.path = gameDir.relativeFilePath(file.fileInfo.absoluteFilePath()); + QString path = file.fileInfo.absoluteFilePath(); + if (path.endsWith(".disabled")) { + fileData.optional = true; + path = path.left(path.length() - QString(".disabled").length()); + } + + fileData.path = gameDir.relativeFilePath(path); fileData.download = url; fileData.sha512 = sha512Hash; fileData.sha1 = sha1Hash; @@ -175,6 +190,13 @@ void InstanceExportTask::lookupSucceeded() fileObj.insert("fileSize", QJsonValue(file.fileSize)); + if (file.optional) { + QJsonObject env; + env.insert("client", "optional"); + env.insert("server", "optional"); + fileObj.insert("env", env); + } + files.append(fileObj); } diff --git a/launcher/modplatform/modrinth/ModrinthInstanceExportTask.h b/launcher/modplatform/modrinth/ModrinthInstanceExportTask.h index 4a6010c8..a1be67f3 100644 --- a/launcher/modplatform/modrinth/ModrinthInstanceExportTask.h +++ b/launcher/modplatform/modrinth/ModrinthInstanceExportTask.h @@ -26,6 +26,7 @@ struct ExportSettings bool includeModConfigs; bool includeResourcePacks; bool includeShaderPacks; + bool treatDisabledAsOptional; QString datapacksPath; QString gameVersion; @@ -44,6 +45,7 @@ struct ExportFile QString sha1; QString download; qint64 fileSize; + bool optional = false; }; class InstanceExportTask : public Task diff --git a/launcher/ui/dialogs/ModrinthExportDialog.cpp b/launcher/ui/dialogs/ModrinthExportDialog.cpp index 1762f9a6..14c919c9 100644 --- a/launcher/ui/dialogs/ModrinthExportDialog.cpp +++ b/launcher/ui/dialogs/ModrinthExportDialog.cpp @@ -81,6 +81,7 @@ void ModrinthExportDialog::accept() settings.includeModConfigs = ui->includeModConfigs->isChecked(); settings.includeResourcePacks = ui->includeResourcePacks->isChecked(); settings.includeShaderPacks = ui->includeShaderPacks->isChecked(); + settings.treatDisabledAsOptional = ui->treatDisabledAsOptional->isChecked(); if (ui->includeDatapacks->isChecked()) { settings.datapacksPath = ui->datapacksPath->text(); diff --git a/launcher/ui/dialogs/ModrinthExportDialog.ui b/launcher/ui/dialogs/ModrinthExportDialog.ui index c386f881..9bb2e5e4 100644 --- a/launcher/ui/dialogs/ModrinthExportDialog.ui +++ b/launcher/ui/dialogs/ModrinthExportDialog.ui @@ -112,7 +112,7 @@ 9 29 801 - 221 + 227 @@ -174,6 +174,16 @@ + + + + If enabled, all mods, shaders and resource packs that are available on Modrinth will be treated as optional on both client and server. Files that are unavailable on Modrinth will simply retain the ".disabled" extension as Modrinth packs don't support optional overrides. + + + Treat disabled mods, shaders and resource packs as optional + + +