diff --git a/src/main/java/de/xite/scoreboard/utils/Version.java b/src/main/java/de/xite/scoreboard/utils/Version.java index cb8de67..e80987a 100644 --- a/src/main/java/de/xite/scoreboard/utils/Version.java +++ b/src/main/java/de/xite/scoreboard/utils/Version.java @@ -5,6 +5,8 @@ import org.jetbrains.annotations.NotNull; import java.util.logging.Logger; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class Version implements Comparable { private final String version; @@ -15,13 +17,33 @@ public Version(@NotNull String version) { this.version = version; } + public static final Version v1_8 = new Version("1.8"); + public static final Version v1_9 = new Version("1.9"); + public static final Version v1_10 = new Version("1.10"); + public static final Version v1_11 = new Version("1.11"); + public static final Version v1_12 = new Version("1.12"); + public static final Version v1_13 = new Version("1.13"); + public static final Version v1_14 = new Version("1.14"); + public static final Version v1_15 = new Version("1.15"); + public static final Version v1_16 = new Version("1.16"); + public static final Version v1_17 = new Version("1.17"); + public static final Version v1_18 = new Version("1.18"); + public static final Version v1_20_3 = new Version("1.20.3"); + public static final Version CURRENT; static { Logger logger = PowerBoard.pl.getLogger(); Version v; + String s = Bukkit.getBukkitVersion(); try { - String s = Bukkit.getBukkitVersion(); - String version = s.substring(0, s.lastIndexOf("-R")).replace("_", "."); + // Extracts the leading numeric version, tolerating arbitrary suffixes: + // "1.21.4-R0.1-SNAPSHOT" -> "1.21.4" + // "26.1.2-build.12-alpha" -> "26.1.2" + // "26.1.2.build.12-alpha" -> "26.1.2" + Matcher m = Pattern.compile("^([0-9]+(?:\\.[0-9]+)*)").matcher(s.replace("_", ".")); + if(!m.find()) + throw new IllegalArgumentException("No leading version number in '" + s + "'"); + String version = m.group(1); if(PowerBoard.debug) { logger.info(" "); @@ -32,24 +54,11 @@ public Version(@NotNull String version) { v = new Version(version); } catch (Exception e) { e.printStackTrace(); - logger.severe("Could not extract MC version! Defaulting to 1.13."); + logger.severe("Could not extract MC version from '" + s + "'! Defaulting to 1.13."); v = Version.v1_13; } CURRENT = v; } - - public static final Version v1_8 = new Version("1.8"); - public static final Version v1_9 = new Version("1.9"); - public static final Version v1_10 = new Version("1.10"); - public static final Version v1_11 = new Version("1.11"); - public static final Version v1_12 = new Version("1.12"); - public static final Version v1_13 = new Version("1.13"); - public static final Version v1_14 = new Version("1.14"); - public static final Version v1_15 = new Version("1.15"); - public static final Version v1_16 = new Version("1.16"); - public static final Version v1_17 = new Version("1.17"); - public static final Version v1_18 = new Version("1.18"); - public static final Version v1_20_3 = new Version("1.20.3"); private static boolean isAbove_1_13 = Version.CURRENT.isAtLeast(Version.v1_13); private static boolean isAbove_1_20_3 = Version.CURRENT.isAtLeast(Version.v1_20_3);