summaryrefslogtreecommitdiff
path: root/launcher/java
diff options
context:
space:
mode:
Diffstat (limited to 'launcher/java')
-rw-r--r--launcher/java/JavaUtils.cpp25
1 files changed, 24 insertions, 1 deletions
diff --git a/launcher/java/JavaUtils.cpp b/launcher/java/JavaUtils.cpp
index ce560da3fd..b4dced1ca5 100644
--- a/launcher/java/JavaUtils.cpp
+++ b/launcher/java/JavaUtils.cpp
@@ -39,6 +39,7 @@
#include <QStringList>
#include <QString>
#include <QDir>
+#include <QDirIterator>
#include <QStringList>
#include <settings/Setting.h>
@@ -348,7 +349,29 @@ QList<QString> JavaUtils::FindJavaPaths()
java_candidates.append(ADOPTIUMJDK32s);
java_candidates.append(ZULU32s);
java_candidates.append(LIBERICA32s);
-
+
+ // Scan MeshMC's managed java directory ({workdir}/java/{vendor}/{version}/bin/javaw.exe)
+ QString managedJavaDir = FS::PathCombine(QDir::currentPath(), "java");
+ QDir managedDir(managedJavaDir);
+ if (managedDir.exists()) {
+ QDirIterator vendorIt(managedJavaDir, QDir::Dirs | QDir::NoDotAndDotDot);
+ while (vendorIt.hasNext()) {
+ vendorIt.next();
+ QDirIterator versionIt(vendorIt.filePath(), QDir::Dirs | QDir::NoDotAndDotDot);
+ while (versionIt.hasNext()) {
+ versionIt.next();
+ QDirIterator binIt(versionIt.filePath(), QStringList() << "javaw.exe",
+ QDir::Files, QDirIterator::Subdirectories);
+ while (binIt.hasNext()) {
+ binIt.next();
+ if (binIt.filePath().contains("/bin/")) {
+ java_candidates.append(MakeJavaPtr(binIt.filePath()));
+ }
+ }
+ }
+ }
+ }
+
java_candidates.append(MakeJavaPtr(this->GetDefaultJava()->path));
QList<QString> candidates;