diff --git a/headlessmc-launcher/src/main/java/me/earth/headlessmc/launcher/java/JavaVersionParser.java b/headlessmc-launcher/src/main/java/me/earth/headlessmc/launcher/java/JavaVersionParser.java index 792d4ac1..e46cd218 100644 --- a/headlessmc-launcher/src/main/java/me/earth/headlessmc/launcher/java/JavaVersionParser.java +++ b/headlessmc-launcher/src/main/java/me/earth/headlessmc/launcher/java/JavaVersionParser.java @@ -9,8 +9,9 @@ import java.util.regex.Pattern; public class JavaVersionParser { + private static final Pattern PATTERN = Pattern.compile( - "version \"([0-9]+\\.[0-9]+\\.[0-9_]+(?:\\.[0-9]+)*)\""); + "version \"(\\d+)[.-](\\d*)"); public int parseVersionCommand(String path) throws IOException { Process prcs = new ProcessBuilder().command(path, "-version").start(); @@ -26,8 +27,10 @@ public int parseVersion(String output) throws IOException { if (!matcher.find()) { throw new IOException("Couldn't parse '" + output + "'"); } - - return Integer.parseInt(getMajorVersion(matcher.group(1))); + if (matcher.group(1).equals("1")) { + return Integer.parseInt(matcher.group(2)); + } + return Integer.parseInt(matcher.group(1)); } public static String getMajorVersion(String versionString) { diff --git a/headlessmc-launcher/src/test/java/me/earth/headlessmc/launcher/java/JavaVersionParserTest.java b/headlessmc-launcher/src/test/java/me/earth/headlessmc/launcher/java/JavaVersionParserTest.java index 4cfa7650..0722b3c6 100644 --- a/headlessmc-launcher/src/test/java/me/earth/headlessmc/launcher/java/JavaVersionParserTest.java +++ b/headlessmc-launcher/src/test/java/me/earth/headlessmc/launcher/java/JavaVersionParserTest.java @@ -29,6 +29,14 @@ public void testParse() throws IOException { "Java HotSpot(TM) 64-Bit Server VM (build 25.331-b09," + " mixed mode)"); Assertions.assertEquals(8, version); + + version = parser.parseVersion( + "java version \"17-internal\" 2021-09-14\nOpenJDK" + + " Runtime Environment (build 17-internal+0-adhoc..src)\n" + + "OpenJDK 64-Bit Server VM (build 17-" + + "internal+0-adhoc..src)"); + Assertions.assertEquals(17, version); + Assertions.assertThrows(IOException.class, () -> parser.parseVersion("test")); }