From a0e453ad3d965a9bb56d6d27b68625425a7262d2 Mon Sep 17 00:00:00 2001 From: Gianluca Falcomer Date: Sat, 8 Aug 2026 15:05:32 +0200 Subject: [PATCH] Updated VersionUtil --- .../com/earth2me/essentials/utils/VersionUtil.java | 6 ++++-- .../test/java/com/earth2me/essentials/UtilTest.java | 11 +++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java b/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java index f8eaa65af67..9587db98db8 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java @@ -214,7 +214,8 @@ private static boolean isSupportedVersion(final BukkitVersion version) { } public static final class BukkitVersion implements Comparable { - private static final Pattern VERSION_PATTERN = Pattern.compile("^(\\d+)\\.(\\d+)\\.?([0-9]*)?(?:-snapshot-(\\d+))?(?:-pre-?(\\d+))?(?:-rc-?(\\d+))?(?:\\.build\\.(\\d+)(?:-([a-z]+))?)?(?:-?R?([\\d.]+))?(?:(?:\\.local)?-SNAPSHOT)?"); + // Paper/API jars may report a literal "+" build (e.g. "26.2.build.+") when the build number is unresolved. + private static final Pattern VERSION_PATTERN = Pattern.compile("^(\\d+)\\.(\\d+)\\.?([0-9]*)?(?:-snapshot-(\\d+))?(?:-pre-?(\\d+))?(?:-rc-?(\\d+))?(?:\\.build\\.(\\d+|\\+)(?:-([a-z]+))?)?(?:-?R?([\\d.]+))?(?:(?:\\.local)?-SNAPSHOT)?"); private static final Pattern LEGACY_SNAPSHOT_PATTERN = Pattern.compile("^(\\d{2})w(\\d{2})([a-z])(?:-?R?([\\d.]+))?(?:-SNAPSHOT)?"); private final int major; @@ -302,7 +303,8 @@ private static BukkitVersion from(final String major, final String minor, String if (snapshotRelease == null || snapshotRelease.isEmpty()) snapshotRelease = "-1"; if (preRelease == null || preRelease.isEmpty()) preRelease = "-1"; if (releaseCandidate == null || releaseCandidate.isEmpty()) releaseCandidate = "-1"; - if (paperBuild == null || paperBuild.isEmpty()) paperBuild = "-1"; + // "+" is used by some Paper/API jars when the build number is unresolved (e.g. "26.2.build.+"). + if (paperBuild == null || paperBuild.isEmpty() || "+".equals(paperBuild)) paperBuild = "-1"; return new BukkitVersion(Integer.parseInt(major), Integer.parseInt(minor), Integer.parseInt(patch), diff --git a/Essentials/src/test/java/com/earth2me/essentials/UtilTest.java b/Essentials/src/test/java/com/earth2me/essentials/UtilTest.java index 33c88ea4485..4f827757294 100644 --- a/Essentials/src/test/java/com/earth2me/essentials/UtilTest.java +++ b/Essentials/src/test/java/com/earth2me/essentials/UtilTest.java @@ -457,5 +457,16 @@ public void testVer() { .isHigherThan(VersionUtil.BukkitVersion.fromString("26.1-pre-1.build.99-alpha"))); assertTrue(VersionUtil.BukkitVersion.fromString("26.1.build.1-alpha") .isHigherThan(VersionUtil.BukkitVersion.fromString("26.1-snapshot-99.build.99-alpha"))); + // Unresolved Paper/API build placeholder (e.g. ASPaper reports "26.2.build.+") + v = VersionUtil.BukkitVersion.fromString("26.2.build.+"); + assertEquals(v.getMajor(), 26); + assertEquals(v.getMinor(), 2); + assertEquals(v.getPatch(), 0); + assertEquals(v.getRevision(), 0.0); + assertEquals(v.getPaperBuild(), -1); + assertNull(v.getReleaseChannel()); + assertTrue(v.equalsBaseVersion(VersionUtil.BukkitVersion.fromString("26.2-R0.1-SNAPSHOT"))); + assertTrue(VersionUtil.BukkitVersion.fromString("26.2.build.+") + .equalsBaseVersion(VersionUtil.v26_2_R01)); } }