@@ -57,6 +57,7 @@ public final class JavaRepository {
|
||||
Optional.ofNullable(System.getenv("ProgramFiles(x86)")).orElse("C:\\Program Files (x86)"),
|
||||
"Minecraft Launcher\\runtime"));
|
||||
case LINUX:
|
||||
case FREEBSD:
|
||||
return Stream.of(FileUtils.tryGetPath(System.getProperty("user.home", ".minecraft/runtime")));
|
||||
case OSX:
|
||||
return Stream.of(FileUtils.tryGetPath(System.getProperty("user.home"), "Library/Application Support/minecraft/runtime"));
|
||||
|
||||
@@ -64,7 +64,8 @@ public final class OSRestriction {
|
||||
}
|
||||
|
||||
public boolean allow() {
|
||||
if (name != OperatingSystem.UNKNOWN && name != OperatingSystem.CURRENT_OS)
|
||||
if (name != OperatingSystem.UNKNOWN && name != OperatingSystem.CURRENT_OS
|
||||
&& !(name == OperatingSystem.LINUX && OperatingSystem.CURRENT_OS.isLinuxOrBSD()))
|
||||
return false;
|
||||
|
||||
if (version != null)
|
||||
|
||||
@@ -70,14 +70,14 @@ public class DefaultLauncher extends Launcher {
|
||||
case HIGH:
|
||||
if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS) {
|
||||
// res.add("cmd", "/C", "start", "unused title", "/B", "/high");
|
||||
} else if (OperatingSystem.CURRENT_OS == OperatingSystem.LINUX || OperatingSystem.CURRENT_OS == OperatingSystem.OSX) {
|
||||
} else if (OperatingSystem.CURRENT_OS.isLinuxOrBSD() || OperatingSystem.CURRENT_OS == OperatingSystem.OSX) {
|
||||
res.add("nice", "-n", "-5");
|
||||
}
|
||||
break;
|
||||
case ABOVE_NORMAL:
|
||||
if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS) {
|
||||
// res.add("cmd", "/C", "start", "unused title", "/B", "/abovenormal");
|
||||
} else if (OperatingSystem.CURRENT_OS == OperatingSystem.LINUX || OperatingSystem.CURRENT_OS == OperatingSystem.OSX) {
|
||||
} else if (OperatingSystem.CURRENT_OS.isLinuxOrBSD() || OperatingSystem.CURRENT_OS == OperatingSystem.OSX) {
|
||||
res.add("nice", "-n", "-1");
|
||||
}
|
||||
break;
|
||||
@@ -87,14 +87,14 @@ public class DefaultLauncher extends Launcher {
|
||||
case BELOW_NORMAL:
|
||||
if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS) {
|
||||
// res.add("cmd", "/C", "start", "unused title", "/B", "/belownormal");
|
||||
} else if (OperatingSystem.CURRENT_OS == OperatingSystem.LINUX || OperatingSystem.CURRENT_OS == OperatingSystem.OSX) {
|
||||
} else if (OperatingSystem.CURRENT_OS.isLinuxOrBSD() || OperatingSystem.CURRENT_OS == OperatingSystem.OSX) {
|
||||
res.add("nice", "-n", "1");
|
||||
}
|
||||
break;
|
||||
case LOW:
|
||||
if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS) {
|
||||
// res.add("cmd", "/C", "start", "unused title", "/B", "/low");
|
||||
} else if (OperatingSystem.CURRENT_OS == OperatingSystem.LINUX || OperatingSystem.CURRENT_OS == OperatingSystem.OSX) {
|
||||
} else if (OperatingSystem.CURRENT_OS.isLinuxOrBSD() || OperatingSystem.CURRENT_OS == OperatingSystem.OSX) {
|
||||
res.add("nice", "-n", "5");
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -72,7 +72,7 @@ final class ExitWaiter implements Runnable {
|
||||
} else if (exitCode != 0 || StringUtils.containsOne(errorLines, "Unable to launch")) {
|
||||
EventBus.EVENT_BUS.fireEvent(new ProcessExitedAbnormallyEvent(this, process));
|
||||
|
||||
if (exitCode == 137 && OperatingSystem.CURRENT_OS == OperatingSystem.LINUX) {
|
||||
if (exitCode == 137 && OperatingSystem.CURRENT_OS.isLinuxOrBSD()) {
|
||||
exitType = ProcessListener.ExitType.SIGKILL;
|
||||
} else {
|
||||
exitType = ProcessListener.ExitType.APPLICATION_ERROR;
|
||||
|
||||
@@ -326,6 +326,7 @@ public final class JavaVersion {
|
||||
break;
|
||||
|
||||
case LINUX:
|
||||
case FREEBSD:
|
||||
javaExecutables.add(listDirectory(Paths.get("/usr/java")).map(JavaVersion::getExecutable)); // Oracle RPMs
|
||||
javaExecutables.add(listDirectory(Paths.get("/usr/lib/jvm")).map(JavaVersion::getExecutable)); // General locations
|
||||
javaExecutables.add(listDirectory(Paths.get("/usr/lib32/jvm")).map(JavaVersion::getExecutable)); // General locations
|
||||
|
||||
@@ -100,7 +100,7 @@ public class ManagedProcess {
|
||||
// However, this method is supplied since Java 9.
|
||||
// So, there is no ways to get the pid.
|
||||
throw new UnsupportedOperationException("Cannot get the pid of a Process on Java 8 on Windows.");
|
||||
} else if (OperatingSystem.CURRENT_OS == OperatingSystem.OSX || OperatingSystem.CURRENT_OS == OperatingSystem.LINUX) {
|
||||
} else if (OperatingSystem.CURRENT_OS == OperatingSystem.OSX || OperatingSystem.CURRENT_OS.isLinuxOrBSD()) {
|
||||
// On Linux or Mac, we can get field UnixProcess.pid field to get the pid.
|
||||
// All the Java version is accepted.
|
||||
// See https://github.com/openjdk/jdk/blob/jdk8-b120/jdk/src/solaris/classes/java/lang/UNIXProcess.java.linux
|
||||
|
||||
@@ -51,6 +51,10 @@ public enum OperatingSystem {
|
||||
* Mac OS X.
|
||||
*/
|
||||
OSX("osx"),
|
||||
/**
|
||||
* FreeBSD.
|
||||
*/
|
||||
FREEBSD("freebsd"),
|
||||
/**
|
||||
* Unknown operating system.
|
||||
*/
|
||||
@@ -66,6 +70,10 @@ public enum OperatingSystem {
|
||||
return checkedName;
|
||||
}
|
||||
|
||||
public boolean isLinuxOrBSD() {
|
||||
return this == LINUX || this == FREEBSD;
|
||||
}
|
||||
|
||||
/**
|
||||
* The current operating system.
|
||||
*/
|
||||
@@ -213,6 +221,8 @@ public enum OperatingSystem {
|
||||
return OSX;
|
||||
else if (name.contains("solaris") || name.contains("linux") || name.contains("unix") || name.contains("sunos"))
|
||||
return LINUX;
|
||||
else if (name.equals("freebsd"))
|
||||
return FREEBSD;
|
||||
else
|
||||
return UNKNOWN;
|
||||
}
|
||||
@@ -273,6 +283,7 @@ public enum OperatingSystem {
|
||||
String home = System.getProperty("user.home", ".");
|
||||
switch (OperatingSystem.CURRENT_OS) {
|
||||
case LINUX:
|
||||
case FREEBSD:
|
||||
return Paths.get(home, "." + folder).toAbsolutePath();
|
||||
case WINDOWS:
|
||||
String appdata = System.getenv("APPDATA");
|
||||
|
||||
Reference in New Issue
Block a user