summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt3
-rw-r--r--launcher/java/JavaUtils.cpp25
2 files changed, 27 insertions, 1 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1c3b5ec6f8..b6d77d6d08 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -268,6 +268,9 @@ if(UNIX AND APPLE)
set(BUNDLE_DEST_DIR ".")
set(RESOURCES_DEST_DIR ".")
+ # Set RPATH for macOS
+ SET(MeshMC_BINARY_RPATH "@executable_path")
+
# Mac bundle settings
set(MACOSX_BUNDLE_BUNDLE_NAME "${MeshMC_DisplayName}")
set(MACOSX_BUNDLE_INFO_STRING "${MeshMC_DisplayName}: A custom launcher for Minecraft that allows you to easily manage multiple installations of Minecraft at once.")
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;