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 e96bcaaae..53d5e5168 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java @@ -34,8 +34,9 @@ public final class VersionUtil { public static final BukkitVersion v1_16_5_R01 = BukkitVersion.fromString("1.16.5-R0.1-SNAPSHOT"); public static final BukkitVersion v1_17_R01 = BukkitVersion.fromString("1.17-R0.1-SNAPSHOT"); public static final BukkitVersion v1_17_1_R01 = BukkitVersion.fromString("1.17.1-R0.1-SNAPSHOT"); + public static final BukkitVersion v1_18_rc3_R01 = BukkitVersion.fromString("1.18-rc3-R0.1-SNAPSHOT"); - private static final Set supportedVersions = ImmutableSet.of(v1_8_8_R01, v1_9_4_R01, v1_10_2_R01, v1_11_2_R01, v1_12_2_R01, v1_13_2_R01, v1_14_4_R01, v1_15_2_R01, v1_16_5_R01, v1_17_1_R01); + private static final Set supportedVersions = ImmutableSet.of(v1_8_8_R01, v1_9_4_R01, v1_10_2_R01, v1_11_2_R01, v1_12_2_R01, v1_13_2_R01, v1_14_4_R01, v1_15_2_R01, v1_16_5_R01, v1_17_1_R01, v1_18_rc3_R01); private static final Map unsupportedServerClasses; @@ -158,20 +159,22 @@ public final class VersionUtil { } public static final class BukkitVersion implements Comparable { - private static final Pattern VERSION_PATTERN = Pattern.compile("^(\\d+)\\.(\\d+)\\.?([0-9]*)?(?:-pre(\\d))?(?:-?R?([\\d.]+))?(?:-SNAPSHOT)?"); + private static final Pattern VERSION_PATTERN = Pattern.compile("^(\\d+)\\.(\\d+)\\.?([0-9]*)?(?:-pre(\\d))?(?:-rc(\\d+))?(?:-?R?([\\d.]+))?(?:-SNAPSHOT)?"); private final int major; private final int minor; - private final int prerelease; + private final int preRelease; + private final int releaseCandidate; private final int patch; private final double revision; - private BukkitVersion(final int major, final int minor, final int patch, final double revision, final int prerelease) { + private BukkitVersion(final int major, final int minor, final int patch, final double revision, final int preRelease, final int releaseCandidate) { this.major = major; this.minor = minor; this.patch = patch; this.revision = revision; - this.prerelease = prerelease; + this.preRelease = preRelease; + this.releaseCandidate = releaseCandidate; } public static BukkitVersion fromString(final String string) { @@ -185,18 +188,20 @@ public final class VersionUtil { Preconditions.checkArgument(matcher.matches(), string + " is not in valid version format. e.g. 1.8.8-R0.1"); } - return from(matcher.group(1), matcher.group(2), matcher.group(3), matcher.groupCount() < 5 ? "" : matcher.group(5), matcher.group(4)); + return from(matcher.group(1), matcher.group(2), matcher.group(3), matcher.group(6), matcher.group(4), matcher.group(5)); } - private static BukkitVersion from(final String major, final String minor, String patch, String revision, String prerelease) { + private static BukkitVersion from(final String major, final String minor, String patch, String revision, String preRelease, String releaseCandidate) { if (patch == null || patch.isEmpty()) patch = "0"; if (revision == null || revision.isEmpty()) revision = "0"; - if (prerelease == null || prerelease.isEmpty()) prerelease = "-1"; + if (preRelease == null || preRelease.isEmpty()) preRelease = "-1"; + if (releaseCandidate == null || releaseCandidate.isEmpty()) releaseCandidate = "-1"; return new BukkitVersion(Integer.parseInt(major), Integer.parseInt(minor), Integer.parseInt(patch), Double.parseDouble(revision), - Integer.parseInt(prerelease)); + Integer.parseInt(preRelease), + Integer.parseInt(releaseCandidate)); } public boolean isHigherThan(final BukkitVersion o) { @@ -232,7 +237,11 @@ public final class VersionUtil { } public int getPrerelease() { - return prerelease; + return preRelease; + } + + public int getReleaseCandidate() { + return releaseCandidate; } @Override @@ -248,12 +257,12 @@ public final class VersionUtil { minor == that.minor && patch == that.patch && revision == that.revision && - prerelease == that.prerelease; + preRelease == that.preRelease; } @Override public int hashCode() { - return Objects.hashCode(major, minor, patch, revision, prerelease); + return Objects.hashCode(major, minor, patch, revision, preRelease, releaseCandidate); } @Override @@ -262,8 +271,11 @@ public final class VersionUtil { if (patch != 0) { sb.append(".").append(patch); } - if (prerelease != -1) { - sb.append("-pre").append(prerelease); + if (preRelease != -1) { + sb.append("-pre").append(preRelease); + } + if (releaseCandidate != -1) { + sb.append("-rc").append(releaseCandidate); } return sb.append("-R").append(revision).toString(); } @@ -285,12 +297,18 @@ public final class VersionUtil { } else if (patch > o.patch) { return 1; } else { // equal patch - if (prerelease < o.prerelease) { + if (preRelease < o.preRelease) { return -1; - } else if (prerelease > o.prerelease) { + } else if (preRelease > o.preRelease) { return 1; } else { // equal prerelease - return Double.compare(revision, o.revision); + if (releaseCandidate < o.releaseCandidate) { + return -1; + } else if (releaseCandidate > o.releaseCandidate) { + return 1; + } else { // equal release candidate + return Double.compare(revision, o.revision); + } } } } diff --git a/Essentials/src/test/java/com/earth2me/essentials/UtilTest.java b/Essentials/src/test/java/com/earth2me/essentials/UtilTest.java index a46b29eb5..350a41d2f 100644 --- a/Essentials/src/test/java/com/earth2me/essentials/UtilTest.java +++ b/Essentials/src/test/java/com/earth2me/essentials/UtilTest.java @@ -200,29 +200,41 @@ public class UtilTest extends TestCase { assertEquals(v.getPatch(), 2); assertEquals(v.getRevision(), 0.1); assertEquals(v.getPrerelease(), -1); + assertEquals(v.getReleaseCandidate(), -1); v = VersionUtil.BukkitVersion.fromString("1.9-R1.4"); // not real assertEquals(v.getMajor(), 1); assertEquals(v.getMinor(), 9); assertEquals(v.getPatch(), 0); assertEquals(v.getRevision(), 1.4); assertEquals(v.getPrerelease(), -1); + assertEquals(v.getReleaseCandidate(), -1); v = VersionUtil.BukkitVersion.fromString("1.14-pre5"); assertEquals(v.getMajor(), 1); assertEquals(v.getMinor(), 14); assertEquals(v.getPatch(), 0); assertEquals(v.getRevision(), 0.0); assertEquals(v.getPrerelease(), 5); + assertEquals(v.getReleaseCandidate(), -1); v = VersionUtil.BukkitVersion.fromString("1.13.2-pre1-R0.1"); // not real assertEquals(v.getMajor(), 1); assertEquals(v.getMinor(), 13); assertEquals(v.getPatch(), 2); assertEquals(v.getRevision(), 0.1); assertEquals(v.getPrerelease(), 1); + assertEquals(v.getReleaseCandidate(), -1); v = VersionUtil.BukkitVersion.fromString("1.14.3-SNAPSHOT"); assertEquals(v.getMajor(), 1); assertEquals(v.getMinor(), 14); assertEquals(v.getPatch(), 3); assertEquals(v.getRevision(), 0.0); assertEquals(v.getPrerelease(), -1); + assertEquals(v.getReleaseCandidate(), -1); + v = VersionUtil.BukkitVersion.fromString("1.18-rc3-R0.1-SNAPSHOT"); + assertEquals(v.getMajor(), 1); + assertEquals(v.getMinor(), 18); + assertEquals(v.getPatch(), 0); + assertEquals(v.getRevision(), 0.1); + assertEquals(v.getPrerelease(), -1); + assertEquals(v.getReleaseCandidate(), 3); } } diff --git a/README.md b/README.md index 58b0993e1..658260cc3 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ EssentialsX is almost a completely drop-in replacement for Essentials. However, * **EssentialsX requires Java 8 or higher.** On older versions, the plugin may not work properly. -* **EssentialsX supports Minecraft versions 1.8.8, 1.9.4, 1.10.2, 1.11.2, 1.12.2, 1.13.2, 1.14.4, 1.15.2, 1.16.5, and 1.17.1** +* **EssentialsX supports Minecraft versions 1.8.8, 1.9.4, 1.10.2, 1.11.2, 1.12.2, 1.13.2, 1.14.4, 1.15.2, 1.16.5, 1.17.1, and 1.18** Support