Fix crash and make loader override more consistent with other option groups

Signed-off-by: TheKodeToad <TheKodeToad@proton.me>
This commit is contained in:
TheKodeToad 2025-06-02 14:43:56 +01:00
parent 178965676e
commit 956f5ee180
No known key found for this signature in database
GPG key ID: 5E39D70B4C93C38E
2 changed files with 50 additions and 36 deletions

View file

@ -104,19 +104,21 @@ MinecraftSettingsWidget::MinecraftSettingsWidget(MinecraftInstancePtr instance,
if (!value) if (!value)
m_instance->settings()->reset("GlobalDataPacksPath"); m_instance->settings()->reset("GlobalDataPacksPath");
}); });
connect(m_ui->dataPacksPathEdit, &QLineEdit::editingFinished, this, &MinecraftSettingsWidget::editedDataPacksPath); connect(m_ui->dataPacksPathEdit, &QLineEdit::editingFinished, this, &MinecraftSettingsWidget::saveDataPacksPath);
connect(m_ui->dataPacksPathBrowse, &QPushButton::clicked, this, &MinecraftSettingsWidget::selectDataPacksFolder); connect(m_ui->dataPacksPathBrowse, &QPushButton::clicked, this, &MinecraftSettingsWidget::selectDataPacksFolder);
connect(m_ui->loaderGroup, &QGroupBox::toggled, this, [this](bool value) { connect(m_ui->loaderGroup, &QGroupBox::toggled, this, [this](bool value) {
m_instance->settings()->set("OverrideModDownloadLoaders", value); m_instance->settings()->set("OverrideModDownloadLoaders", value);
if (!value) if (value)
saveSelectedLoaders();
else
m_instance->settings()->reset("ModDownloadLoaders"); m_instance->settings()->reset("ModDownloadLoaders");
}); });
connect(m_ui->neoForge, &QCheckBox::stateChanged, this, &MinecraftSettingsWidget::selectedLoadersChanged); connect(m_ui->neoForge, &QCheckBox::stateChanged, this, &MinecraftSettingsWidget::saveSelectedLoaders);
connect(m_ui->forge, &QCheckBox::stateChanged, this, &MinecraftSettingsWidget::selectedLoadersChanged); connect(m_ui->forge, &QCheckBox::stateChanged, this, &MinecraftSettingsWidget::saveSelectedLoaders);
connect(m_ui->fabric, &QCheckBox::stateChanged, this, &MinecraftSettingsWidget::selectedLoadersChanged); connect(m_ui->fabric, &QCheckBox::stateChanged, this, &MinecraftSettingsWidget::saveSelectedLoaders);
connect(m_ui->quilt, &QCheckBox::stateChanged, this, &MinecraftSettingsWidget::selectedLoadersChanged); connect(m_ui->quilt, &QCheckBox::stateChanged, this, &MinecraftSettingsWidget::saveSelectedLoaders);
connect(m_ui->liteLoader, &QCheckBox::stateChanged, this, &MinecraftSettingsWidget::selectedLoadersChanged); connect(m_ui->liteLoader, &QCheckBox::stateChanged, this, &MinecraftSettingsWidget::saveSelectedLoaders);
} }
m_ui->maximizedWarning->hide(); m_ui->maximizedWarning->hide();
@ -251,22 +253,28 @@ void MinecraftSettingsWidget::loadSettings()
m_ui->fabric->blockSignals(true); m_ui->fabric->blockSignals(true);
m_ui->quilt->blockSignals(true); m_ui->quilt->blockSignals(true);
m_ui->liteLoader->blockSignals(true); m_ui->liteLoader->blockSignals(true);
auto instLoaders = m_instance->getPackProfile()->getSupportedModLoaders().value();
m_ui->loaderGroup->setChecked(settings->get("OverrideModDownloadLoaders").toBool()); const bool overrideLoaders = settings->get("OverrideModDownloadLoaders").toBool();
auto loaders = Json::toStringList(settings->get("ModDownloadLoaders").toString()); const QStringList loaders = Json::toStringList(settings->get("ModDownloadLoaders").toString());
if (loaders.isEmpty()) {
m_ui->neoForge->setChecked(instLoaders & ModPlatform::NeoForge); m_ui->loaderGroup->setChecked(overrideLoaders);
m_ui->forge->setChecked(instLoaders & ModPlatform::Forge);
m_ui->fabric->setChecked(instLoaders & ModPlatform::Fabric); if (overrideLoaders) {
m_ui->quilt->setChecked(instLoaders & ModPlatform::Quilt);
m_ui->liteLoader->setChecked(instLoaders & ModPlatform::LiteLoader);
} else {
m_ui->neoForge->setChecked(loaders.contains(getModLoaderAsString(ModPlatform::NeoForge))); m_ui->neoForge->setChecked(loaders.contains(getModLoaderAsString(ModPlatform::NeoForge)));
m_ui->forge->setChecked(loaders.contains(getModLoaderAsString(ModPlatform::Forge))); m_ui->forge->setChecked(loaders.contains(getModLoaderAsString(ModPlatform::Forge)));
m_ui->fabric->setChecked(loaders.contains(getModLoaderAsString(ModPlatform::Fabric))); m_ui->fabric->setChecked(loaders.contains(getModLoaderAsString(ModPlatform::Fabric)));
m_ui->quilt->setChecked(loaders.contains(getModLoaderAsString(ModPlatform::Quilt))); m_ui->quilt->setChecked(loaders.contains(getModLoaderAsString(ModPlatform::Quilt)));
m_ui->liteLoader->setChecked(loaders.contains(getModLoaderAsString(ModPlatform::LiteLoader))); m_ui->liteLoader->setChecked(loaders.contains(getModLoaderAsString(ModPlatform::LiteLoader)));
} else {
auto instLoaders = m_instance->getPackProfile()->getSupportedModLoaders().value_or(ModPlatform::ModLoaderTypes(0));
m_ui->neoForge->setChecked(instLoaders & ModPlatform::NeoForge);
m_ui->forge->setChecked(instLoaders & ModPlatform::Forge);
m_ui->fabric->setChecked(instLoaders & ModPlatform::Fabric);
m_ui->quilt->setChecked(instLoaders & ModPlatform::Quilt);
m_ui->liteLoader->setChecked(instLoaders & ModPlatform::LiteLoader);
} }
m_ui->loaderGroup->blockSignals(false); m_ui->loaderGroup->blockSignals(false);
m_ui->neoForge->blockSignals(false); m_ui->neoForge->blockSignals(false);
m_ui->forge->blockSignals(false); m_ui->forge->blockSignals(false);
@ -504,7 +512,29 @@ bool MinecraftSettingsWidget::isQuickPlaySupported()
return m_instance->traits().contains("feature:is_quick_play_singleplayer"); return m_instance->traits().contains("feature:is_quick_play_singleplayer");
} }
void MinecraftSettingsWidget::editedDataPacksPath() void MinecraftSettingsWidget::saveSelectedLoaders()
{
QStringList loaders;
if (m_ui->neoForge->isChecked())
loaders << getModLoaderAsString(ModPlatform::NeoForge);
if (m_ui->forge->isChecked())
loaders << getModLoaderAsString(ModPlatform::Forge);
if (m_ui->fabric->isChecked())
loaders << getModLoaderAsString(ModPlatform::Fabric);
if (m_ui->quilt->isChecked())
loaders << getModLoaderAsString(ModPlatform::Quilt);
if (m_ui->liteLoader->isChecked())
loaders << getModLoaderAsString(ModPlatform::LiteLoader);
m_instance->settings()->set("ModDownloadLoaders", Json::fromStringList(loaders));
}
void MinecraftSettingsWidget::saveDataPacksPath()
{ {
if (QDir::separator() != '/') if (QDir::separator() != '/')
m_ui->dataPacksPathEdit->setText(m_ui->dataPacksPathEdit->text().replace(QDir::separator(), '/')); m_ui->dataPacksPathEdit->setText(m_ui->dataPacksPathEdit->text().replace(QDir::separator(), '/'));
@ -531,19 +561,3 @@ void MinecraftSettingsWidget::selectDataPacksFolder()
m_ui->dataPacksPathEdit->setText(path); m_ui->dataPacksPathEdit->setText(path);
m_instance->settings()->set("GlobalDataPacksPath", path); m_instance->settings()->set("GlobalDataPacksPath", path);
} }
void MinecraftSettingsWidget::selectedLoadersChanged()
{
QStringList loaders;
if (m_ui->neoForge->isChecked())
loaders << getModLoaderAsString(ModPlatform::NeoForge);
if (m_ui->forge->isChecked())
loaders << getModLoaderAsString(ModPlatform::Forge);
if (m_ui->fabric->isChecked())
loaders << getModLoaderAsString(ModPlatform::Fabric);
if (m_ui->quilt->isChecked())
loaders << getModLoaderAsString(ModPlatform::Quilt);
if (m_ui->liteLoader->isChecked())
loaders << getModLoaderAsString(ModPlatform::LiteLoader);
m_instance->settings()->set("ModDownloadLoaders", Json::fromStringList(loaders));
}

View file

@ -57,8 +57,8 @@ class MinecraftSettingsWidget : public QWidget {
void updateAccountsMenu(const SettingsObject& settings); void updateAccountsMenu(const SettingsObject& settings);
bool isQuickPlaySupported(); bool isQuickPlaySupported();
private slots: private slots:
void selectedLoadersChanged(); void saveSelectedLoaders();
void editedDataPacksPath(); void saveDataPacksPath();
void selectDataPacksFolder(); void selectDataPacksFolder();
MinecraftInstancePtr m_instance; MinecraftInstancePtr m_instance;