@@ -46,8 +46,9 @@ public final class VersionUtil {
4646 public static final BukkitVersion v1_21_5_R01 = BukkitVersion .fromString ("1.21.5-R0.1-SNAPSHOT" );
4747 public static final BukkitVersion v1_21_8_R01 = BukkitVersion .fromString ("1.21.8-R0.1-SNAPSHOT" );
4848 public static final BukkitVersion v1_21_11_R01 = BukkitVersion .fromString ("1.21.11-R0.1-SNAPSHOT" );
49+ public static final BukkitVersion v26_1_R01 = BukkitVersion .fromString ("26.1-R0.1-SNAPSHOT" );
4950
50- private static final Set <BukkitVersion > 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_2_R01 , v1_19_4_R01 , v1_20_6_R01 , v1_21_11_R01 );
51+ private static final Set <BukkitVersion > 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_2_R01 , v1_19_4_R01 , v1_20_6_R01 , v1_21_11_R01 , v26_1_R01 );
5152
5253 public static final boolean PRE_FLATTENING = VersionUtil .getServerBukkitVersion ().isLowerThan (VersionUtil .v1_13_0_R01 );
5354
@@ -189,11 +190,12 @@ public static String getSupportStatusClass() {
189190 }
190191
191192 public static final class BukkitVersion implements Comparable <BukkitVersion > {
192- private static final Pattern VERSION_PATTERN = Pattern .compile ("^(\\ d+)\\ .(\\ d+)\\ .?([0-9]*)?(?:-pre(\\ d))?(?:-rc(\\ d+))?(?:-?R?([\\ d.]+))?(?:-SNAPSHOT)?" );
193- private static final Pattern SNAPSHOT_PATTERN = Pattern .compile ("^(\\ d{2})w(\\ d{2})([a-z])(?:-?R?([\\ d.]+))?(?:-SNAPSHOT)?" );
193+ private static final Pattern VERSION_PATTERN = Pattern .compile ("^(\\ d+)\\ .(\\ d+)\\ .?([0-9]*)?(?:-snapshot-( \\ d+))?(?:- pre-? (\\ d+ ))?(?:-rc-? (\\ d+))?(?:-?R?([\\ d.]+))?(?:-SNAPSHOT)?" );
194+ private static final Pattern LEGACY_SNAPSHOT_PATTERN = Pattern .compile ("^(\\ d{2})w(\\ d{2})([a-z])(?:-?R?([\\ d.]+))?(?:-SNAPSHOT)?" );
194195
195196 private final int major ;
196197 private final int minor ;
198+ private final int snapshotRelease ;
197199 private final int preRelease ;
198200 private final int releaseCandidate ;
199201 private final int patch ;
@@ -204,11 +206,12 @@ public static final class BukkitVersion implements Comparable<BukkitVersion> {
204206 private final int snapshotWeek ;
205207 private final char snapshotLetter ;
206208
207- private BukkitVersion (final int major , final int minor , final int patch , final double revision , final int preRelease , final int releaseCandidate ) {
209+ private BukkitVersion (final int major , final int minor , final int patch , final double revision , final int snapshotRelease , final int preRelease , final int releaseCandidate ) {
208210 this .major = major ;
209211 this .minor = minor ;
210212 this .patch = patch ;
211213 this .revision = revision ;
214+ this .snapshotRelease = snapshotRelease ;
212215 this .preRelease = preRelease ;
213216 this .releaseCandidate = releaseCandidate ;
214217 this .snapshot = false ;
@@ -217,12 +220,13 @@ private BukkitVersion(final int major, final int minor, final int patch, final d
217220 this .snapshotLetter = '\0' ;
218221 }
219222
220- private BukkitVersion (final int major , final int minor , final int patch , final double revision , final int preRelease , final int releaseCandidate ,
223+ private BukkitVersion (final int major , final int minor , final int patch , final double revision , final int snapshotRelease , final int preRelease , final int releaseCandidate ,
221224 final boolean snapshot , final int snapshotYear , final int snapshotWeek , final char snapshotLetter ) {
222225 this .major = major ;
223226 this .minor = minor ;
224227 this .patch = patch ;
225228 this .revision = revision ;
229+ this .snapshotRelease = snapshotRelease ;
226230 this .preRelease = preRelease ;
227231 this .releaseCandidate = releaseCandidate ;
228232 this .snapshot = snapshot ;
@@ -237,11 +241,11 @@ public static BukkitVersion fromString(final String string) {
237241 // Try standard release format first
238242 Matcher matcher = VERSION_PATTERN .matcher (string );
239243 if (matcher .matches ()) {
240- return from (matcher .group (1 ), matcher .group (2 ), matcher .group (3 ), matcher .group (6 ), matcher .group (4 ), matcher .group (5 ));
244+ return from (matcher .group (1 ), matcher .group (2 ), matcher .group (3 ), matcher .group (7 ), matcher .group (4 ), matcher .group (5 ), matcher . group ( 6 ));
241245 }
242246
243247 // Try snapshot format (e.g., 25w32a-R0.1-SNAPSHOT)
244- final Matcher snapshotMatcher = SNAPSHOT_PATTERN .matcher (string );
248+ final Matcher snapshotMatcher = LEGACY_SNAPSHOT_PATTERN .matcher (string );
245249 if (snapshotMatcher .matches ()) {
246250 final int year = Integer .parseInt (snapshotMatcher .group (1 ));
247251 final int week = Integer .parseInt (snapshotMatcher .group (2 ));
@@ -259,24 +263,26 @@ public static BukkitVersion fromString(final String string) {
259263 }
260264 matcher = VERSION_PATTERN .matcher (v1_16_1_R01 .toString ());
261265 Preconditions .checkArgument (matcher .matches (), string + " is not in valid version format. e.g. 1.8.8-R0.1" );
262- return from (matcher .group (1 ), matcher .group (2 ), matcher .group (3 ), matcher .group (6 ), matcher .group (4 ), matcher .group (5 ));
266+ return from (matcher .group (1 ), matcher .group (2 ), matcher .group (3 ), matcher .group (7 ), matcher .group (4 ), matcher .group (5 ), matcher . group ( 6 ));
263267 }
264268
265- private static BukkitVersion from (final String major , final String minor , String patch , String revision , String preRelease , String releaseCandidate ) {
269+ private static BukkitVersion from (final String major , final String minor , String patch , String revision , String snapshotRelease , String preRelease , String releaseCandidate ) {
266270 if (patch == null || patch .isEmpty ()) patch = "0" ;
267271 if (revision == null || revision .isEmpty ()) revision = "0" ;
272+ if (snapshotRelease == null || snapshotRelease .isEmpty ()) snapshotRelease = "-1" ;
268273 if (preRelease == null || preRelease .isEmpty ()) preRelease = "-1" ;
269274 if (releaseCandidate == null || releaseCandidate .isEmpty ()) releaseCandidate = "-1" ;
270275 return new BukkitVersion (Integer .parseInt (major ),
271276 Integer .parseInt (minor ),
272277 Integer .parseInt (patch ),
273278 Double .parseDouble (revision ),
279+ Integer .parseInt (snapshotRelease ),
274280 Integer .parseInt (preRelease ),
275281 Integer .parseInt (releaseCandidate ));
276282 }
277283
278284 private static BukkitVersion fromSnapshot (final int year , final int week , final char letter , final double revision ) {
279- return new BukkitVersion (-1 , -1 , -1 , revision , -1 , -1 , true , year , week , letter );
285+ return new BukkitVersion (-1 , -1 , -1 , revision , -1 , -1 , - 1 , true , year , week , letter );
280286 }
281287
282288 public boolean isHigherThan (final BukkitVersion o ) {
@@ -319,6 +325,10 @@ public int getReleaseCandidate() {
319325 return releaseCandidate ;
320326 }
321327
328+ public int getSnapshotRelease () {
329+ return snapshotRelease ;
330+ }
331+
322332 public boolean isSnapshot () {
323333 return snapshot ;
324334 }
@@ -343,15 +353,17 @@ public boolean equals(final Object o) {
343353 minor == that .minor &&
344354 patch == that .patch &&
345355 revision == that .revision &&
346- preRelease == that .preRelease ;
356+ snapshotRelease == that .snapshotRelease &&
357+ preRelease == that .preRelease &&
358+ releaseCandidate == that .releaseCandidate ;
347359 }
348360
349361 @ Override
350362 public int hashCode () {
351363 if (snapshot ) {
352364 return Objects .hashCode ("snapshot" , snapshotYear , snapshotWeek , snapshotLetter , revision );
353365 }
354- return Objects .hashCode (major , minor , patch , revision , preRelease , releaseCandidate );
366+ return Objects .hashCode (major , minor , patch , revision , snapshotRelease , preRelease , releaseCandidate );
355367 }
356368
357369 @ Override
@@ -363,6 +375,9 @@ public String toString() {
363375 if (patch != 0 ) {
364376 sb .append ("." ).append (patch );
365377 }
378+ if (snapshotRelease != -1 ) {
379+ sb .append ("-snapshot-" ).append (snapshotRelease );
380+ }
366381 if (preRelease != -1 ) {
367382 sb .append ("-pre" ).append (preRelease );
368383 }
@@ -407,17 +422,23 @@ public int compareTo(final BukkitVersion o) {
407422 } else if (patch > o .patch ) {
408423 return 1 ;
409424 } else { // equal patch
410- if (preRelease < o .preRelease ) {
425+ if (snapshotRelease < o .snapshotRelease ) {
411426 return -1 ;
412- } else if (preRelease > o .preRelease ) {
427+ } else if (snapshotRelease > o .snapshotRelease ) {
413428 return 1 ;
414- } else { // equal prerelease
415- if (releaseCandidate < o .releaseCandidate ) {
429+ } else { // equal snapshot release
430+ if (preRelease < o .preRelease ) {
416431 return -1 ;
417- } else if (releaseCandidate > o .releaseCandidate ) {
432+ } else if (preRelease > o .preRelease ) {
418433 return 1 ;
419- } else { // equal release candidate
420- return Double .compare (revision , o .revision );
434+ } else { // equal prerelease
435+ if (releaseCandidate < o .releaseCandidate ) {
436+ return -1 ;
437+ } else if (releaseCandidate > o .releaseCandidate ) {
438+ return 1 ;
439+ } else { // equal release candidate
440+ return Double .compare (revision , o .revision );
441+ }
421442 }
422443 }
423444 }
0 commit comments