From 4c6edc9fd450eb55361d6f61408247eb857d230e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Tue, 5 May 2015 01:09:28 +0200 Subject: [PATCH] GH-907 fix location/java override for java detection --- logic/minecraft/MinecraftInstance.cpp | 33 ++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/logic/minecraft/MinecraftInstance.cpp b/logic/minecraft/MinecraftInstance.cpp index 2813a609..71bec71e 100644 --- a/logic/minecraft/MinecraftInstance.cpp +++ b/logic/minecraft/MinecraftInstance.cpp @@ -1,22 +1,47 @@ #include "MinecraftInstance.h" +#include #include "settings/SettingsObject.h" #include #include "Env.h" #include "minecraft/MinecraftVersionList.h" +// all of this because keeping things compatible with deprecated old settings +// if either of the settings {a, b} is true, this also resolves to true +class OrSetting : public Setting +{ + Q_OBJECT +public: + OrSetting(QString id, std::shared_ptr a, std::shared_ptr b) + :Setting({id}, false), m_a(a), m_b(b) + { + } + virtual QVariant get() const + { + bool a = m_a->get().toBool(); + bool b = m_b->get().toBool(); + return a || b; + } + virtual void reset() {} + virtual void set(QVariant value) {} +private: + std::shared_ptr m_a; + std::shared_ptr m_b; +}; + MinecraftInstance::MinecraftInstance(SettingsObjectPtr globalSettings, SettingsObjectPtr settings, const QString &rootDir) : BaseInstance(globalSettings, settings, rootDir) { // Java Settings - m_settings->registerSetting("OverrideJava", false); + auto javaOverride = m_settings->registerSetting("OverrideJava", false); auto locationOverride = m_settings->registerSetting("OverrideJavaLocation", false); + auto javaOrLocation = std::make_shared("JavaOrLocationOverride", javaOverride, locationOverride); m_settings->registerSetting("OverrideJavaArgs", false); m_settings->registerOverride(globalSettings->getSetting("JavaPath")); m_settings->registerOverride(globalSettings->getSetting("JvmArgs")); // special! - m_settings->registerPassthrough(globalSettings->getSetting("JavaTimestamp"), locationOverride); - m_settings->registerPassthrough(globalSettings->getSetting("JavaVersion"), locationOverride); + m_settings->registerPassthrough(globalSettings->getSetting("JavaTimestamp"), javaOrLocation); + m_settings->registerPassthrough(globalSettings->getSetting("JavaVersion"), javaOrLocation); // Window Size m_settings->registerSetting("OverrideWindow", false); @@ -46,3 +71,5 @@ std::shared_ptr< BaseVersionList > MinecraftInstance::versionList() const { return ENV.getVersionList("net.minecraft"); } + +#include "MinecraftInstance.moc"