From 2582064323645205be06a7aeef910d38762ece47 Mon Sep 17 00:00:00 2001 From: Trial97 Date: Fri, 12 Dec 2025 01:15:53 +0200 Subject: [PATCH] extend setting to allow user chose between release or any Signed-off-by: Trial97 --- launcher/meta/VersionList.cpp | 5 +-- launcher/meta/VersionList.h | 2 +- launcher/minecraft/MinecraftInstance.cpp | 1 + launcher/minecraft/MinecraftLoadAndCheck.cpp | 6 ++-- launcher/minecraft/PackProfile.cpp | 16 ++++++---- launcher/minecraft/PackProfile.h | 2 +- .../ui/widgets/MinecraftSettingsWidget.cpp | 11 +++++-- .../ui/widgets/MinecraftSettingsWidget.ui | 32 +++++++++++++++++-- 8 files changed, 57 insertions(+), 18 deletions(-) diff --git a/launcher/meta/VersionList.cpp b/launcher/meta/VersionList.cpp index 2bc74fca2..effe5fc0c 100644 --- a/launcher/meta/VersionList.cpp +++ b/launcher/meta/VersionList.cpp @@ -326,11 +326,12 @@ static const Meta::Version::Ptr& getLatestVersion(const Meta::Version::Ptr& a, c return (a->rawTime() > b->rawTime() ? a : b); } -Version::Ptr VersionList::getLatest() +Version::Ptr VersionList::getLatest(bool onlyRelease) { Version::Ptr latestCompat = nullptr; for (auto ver : m_versions) { - latestCompat = getLatestVersion(latestCompat, ver); + if (!onlyRelease || ver->type() == "release") + latestCompat = getLatestVersion(latestCompat, ver); } return latestCompat; } diff --git a/launcher/meta/VersionList.h b/launcher/meta/VersionList.h index 2d629e6f4..b9cb3cb51 100644 --- a/launcher/meta/VersionList.h +++ b/launcher/meta/VersionList.h @@ -45,7 +45,7 @@ class VersionList : public BaseVersionList, public BaseEntity { BaseVersion::Ptr getRecommended() const override; Version::Ptr getRecommendedForParent(const QString& uid, const QString& version); Version::Ptr getLatestForParent(const QString& uid, const QString& version); - Version::Ptr getLatest(); + Version::Ptr getLatest(bool onlyRelease = true); QVariant data(const QModelIndex& index, int role) const override; RoleList providesRoles() const override; diff --git a/launcher/minecraft/MinecraftInstance.cpp b/launcher/minecraft/MinecraftInstance.cpp index 963e52c67..3b082ddf6 100644 --- a/launcher/minecraft/MinecraftInstance.cpp +++ b/launcher/minecraft/MinecraftInstance.cpp @@ -187,6 +187,7 @@ void MinecraftInstance::loadSpecificSettings() auto argsOverride = m_settings->registerSetting("OverrideJavaArgs", false); m_settings->registerSetting("AutomaticJava", false); m_settings->registerSetting("UseLatestMinecraftVersion", false); + m_settings->registerSetting("UseLatestMinecraftVersionType", "release"); if (auto global_settings = globalSettings()) { m_settings->registerOverride(global_settings->getSetting("JavaPath"), locationOverride); diff --git a/launcher/minecraft/MinecraftLoadAndCheck.cpp b/launcher/minecraft/MinecraftLoadAndCheck.cpp index 44800b0d4..09e10d1fb 100644 --- a/launcher/minecraft/MinecraftLoadAndCheck.cpp +++ b/launcher/minecraft/MinecraftLoadAndCheck.cpp @@ -10,12 +10,12 @@ void MinecraftLoadAndCheck::executeTask() // add offline metadata load task auto components = m_inst->getPackProfile(); if (m_inst->settings()->get("UseLatestMinecraftVersion").toBool()) { - if (APPLICATION->settings()->get("AutomaticJavaSwitch").toBool() && m_inst->settings()->get("AutomaticJava").toBool() && - m_inst->settings()->get("OverrideJavaLocation").toBool()) { + auto releaseType = m_inst->settings()->get("UseLatestMinecraftVersionType").toString(); + if (components->updateLatestMinecraft(releaseType == "release") && APPLICATION->settings()->get("AutomaticJavaSwitch").toBool() && + m_inst->settings()->get("AutomaticJava").toBool() && m_inst->settings()->get("OverrideJavaLocation").toBool()) { m_inst->settings()->set("OverrideJavaLocation", false); m_inst->settings()->set("JavaPath", ""); } - components->updateLatestMinecraft(); } if (auto result = components->reload(m_netmode); !result) { emitFailed(result.error); diff --git a/launcher/minecraft/PackProfile.cpp b/launcher/minecraft/PackProfile.cpp index 3453d4d1d..f0e601c0e 100644 --- a/launcher/minecraft/PackProfile.cpp +++ b/launcher/minecraft/PackProfile.cpp @@ -1072,19 +1072,23 @@ QList PackProfile::getModLoadersList() return result; } -void PackProfile::updateLatestMinecraft() +bool PackProfile::updateLatestMinecraft(bool onlyRelease) { const QString uid = "net.minecraft"; auto patch = getComponent(uid); + auto oldVersion = patch->getVersion(); patch->waitLoadMeta(); // make sure we have latest versions auto list = patch->getVersionList(); if (!list) { - return; + return false; } - auto latest = list->getLatest(); + auto latest = list->getLatest(onlyRelease); - qDebug() << "Change" << uid << "to" << latest.get(); - setComponentVersion(uid, latest->descriptor(), true); - resolve(Net::Mode::Online); + if (oldVersion != latest->descriptor()) { + qDebug() << "Change" << uid << "to" << latest.get(); + setComponentVersion(uid, latest->descriptor(), true); + resolve(Net::Mode::Online); + } + return oldVersion != latest->descriptor(); } \ No newline at end of file diff --git a/launcher/minecraft/PackProfile.h b/launcher/minecraft/PackProfile.h index cb5d4c2a4..c931aa157 100644 --- a/launcher/minecraft/PackProfile.h +++ b/launcher/minecraft/PackProfile.h @@ -164,7 +164,7 @@ class PackProfile : public QAbstractListModel { /// apply the component patches. Catches all the errors and returns true/false for success/failure void invalidateLaunchProfile(); - void updateLatestMinecraft(); + bool updateLatestMinecraft(bool onlyRelease = true); private: void scheduleSave(); diff --git a/launcher/ui/widgets/MinecraftSettingsWidget.cpp b/launcher/ui/widgets/MinecraftSettingsWidget.cpp index 22d0e2d84..d45050c12 100644 --- a/launcher/ui/widgets/MinecraftSettingsWidget.cpp +++ b/launcher/ui/widgets/MinecraftSettingsWidget.cpp @@ -61,7 +61,7 @@ MinecraftSettingsWidget::MinecraftSettingsWidget(MinecraftInstance* instance, QW m_ui->serverJoinGroupBox->hide(); m_ui->globalDataPacksGroupBox->hide(); m_ui->loaderGroup->hide(); - m_ui->latestMCVersionCheckBox->hide(); + m_ui->latestMCVersionGroupBox->hide(); } else { m_javaSettings = new JavaSettingsWidget(m_instance, this); m_ui->javaScrollArea->setWidget(m_javaSettings); @@ -294,7 +294,11 @@ void MinecraftSettingsWidget::loadSettings() for (auto c : blockSignalsCheckBoxes) { c->blockSignals(false); } - m_ui->latestMCVersionCheckBox->setChecked(settings->get("UseLatestMinecraftVersion").toBool()); + + m_ui->latestMCVersionGroupBox->setChecked(settings->get("UseLatestMinecraftVersion").toBool()); + auto autoUpdateType = settings->get("UseLatestMinecraftVersionType").toString() == "release"; + m_ui->releaseRadioButton->setChecked(autoUpdateType); + m_ui->anyRadioButton->setChecked(!autoUpdateType); } m_ui->legacySettingsGroupBox->setChecked(settings->get("OverrideLegacySettings").toBool()); @@ -472,7 +476,8 @@ void MinecraftSettingsWidget::saveSettings() settings->reset("InstanceAccountId"); } - settings->set("UseLatestMinecraftVersion", m_ui->latestMCVersionCheckBox->isChecked()); + settings->set("UseLatestMinecraftVersion", m_ui->latestMCVersionGroupBox->isChecked()); + settings->set("UseLatestMinecraftVersionType", m_ui->releaseRadioButton->isChecked() ? "release" : "any"); } bool overrideLegacySettings = m_instance == nullptr || m_ui->legacySettingsGroupBox->isChecked(); diff --git a/launcher/ui/widgets/MinecraftSettingsWidget.ui b/launcher/ui/widgets/MinecraftSettingsWidget.ui index f7eb7a01b..3febe14c8 100644 --- a/launcher/ui/widgets/MinecraftSettingsWidget.ui +++ b/launcher/ui/widgets/MinecraftSettingsWidget.ui @@ -555,10 +555,35 @@ It is most likely you will need to change the path - please refer to the mod's w - - + + Always use the latest minecraft version + + true + + + + + + Release + + + latestVersionModeGroup + + + + + + + Any + + + latestVersionModeGroup + + + + @@ -898,4 +923,7 @@ It is most likely you will need to change the path - please refer to the mod's w + + +