summaryrefslogtreecommitdiffstats
path: root/logic
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2015-05-05 01:09:28 +0200
committerPetr Mrázek <peterix@gmail.com>2015-05-05 01:09:28 +0200
commit4c6edc9fd450eb55361d6f61408247eb857d230e (patch)
treefc78e6f16eea2fd2fd096a9f92128e99fc04e738 /logic
parent49d3705d16dcbfb69995eb731a11944eb9db33fd (diff)
downloadMultiMC-4c6edc9fd450eb55361d6f61408247eb857d230e.tar
MultiMC-4c6edc9fd450eb55361d6f61408247eb857d230e.tar.gz
MultiMC-4c6edc9fd450eb55361d6f61408247eb857d230e.tar.lz
MultiMC-4c6edc9fd450eb55361d6f61408247eb857d230e.tar.xz
MultiMC-4c6edc9fd450eb55361d6f61408247eb857d230e.zip
GH-907 fix location/java override for java detection
Diffstat (limited to 'logic')
-rw-r--r--logic/minecraft/MinecraftInstance.cpp33
1 files 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 <settings/Setting.h>
#include "settings/SettingsObject.h"
#include <pathutils.h>
#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<Setting> a, std::shared_ptr<Setting> 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<Setting> m_a;
+ std::shared_ptr<Setting> 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<OrSetting>("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"