diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/VersionsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/VersionsPage.java index d13f12c63..73476d12f 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/VersionsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/VersionsPage.java @@ -200,7 +200,7 @@ public final class VersionsPage extends Control implements WizardPage, Refreshab case PENDING: case SNAPSHOT: if (versionType == RemoteVersion.Type.SNAPSHOT - && GameVersionNumber.asGameVersion(remoteVersion.getGameVersion()).isSpecial()) { + && GameVersionNumber.asGameVersion(remoteVersion.getGameVersion()).isAprilFools()) { content.getTags().setAll(i18n("version.game.april_fools")); content.setImage(VersionIconType.APRIL_FOOLS.getIcon()); } else { @@ -492,7 +492,7 @@ public final class VersionsPage extends Control implements WizardPage, Refreshab || versionType == RemoteVersion.Type.PENDING; case APRIL_FOOLS: return versionType == RemoteVersion.Type.SNAPSHOT - && GameVersionNumber.asGameVersion(it.getGameVersion()).isSpecial(); + && GameVersionNumber.asGameVersion(it.getGameVersion()).isAprilFools(); case OLD: return versionType == RemoteVersion.Type.OLD; case ALL: diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/versioning/GameVersionNumber.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/versioning/GameVersionNumber.java index 09ed46959..7569aead8 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/versioning/GameVersionNumber.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/versioning/GameVersionNumber.java @@ -98,8 +98,16 @@ public abstract class GameVersionNumber implements Comparable this.value = value; } - public boolean isSpecial() { - return this instanceof Special; + public boolean isAprilFools() { + if (this instanceof Special) + return true; + + if (this instanceof Snapshot) { + Snapshot snapshot = (Snapshot) this; + return snapshot.intValue == Snapshot.toInt(15, 14, 'a'); + } + + return false; } enum Type { diff --git a/HMCLCore/src/test/java/org/jackhuang/hmcl/util/versioning/GameVersionNumberTest.java b/HMCLCore/src/test/java/org/jackhuang/hmcl/util/versioning/GameVersionNumberTest.java index bd65468e8..1b1e579c6 100644 --- a/HMCLCore/src/test/java/org/jackhuang/hmcl/util/versioning/GameVersionNumberTest.java +++ b/HMCLCore/src/test/java/org/jackhuang/hmcl/util/versioning/GameVersionNumberTest.java @@ -99,6 +99,29 @@ public final class GameVersionNumberTest { assertEquals(VersionNumber.asVersion(versionNumber), old.versionNumber); } + private static boolean isAprilFools(String version) { + return GameVersionNumber.asGameVersion(version).isAprilFools(); + } + + @Test + public void testIsAprilFools() { + assertTrue(isAprilFools("15w14a")); + assertTrue(isAprilFools("1.RV-Pre1")); + assertTrue(isAprilFools("3D Shareware v1.34")); + assertTrue(isAprilFools("2.0")); + assertTrue(isAprilFools("20w14infinite")); + assertTrue(isAprilFools("22w13oneBlockAtATime")); + assertTrue(isAprilFools("23w13a_or_b")); + assertTrue(isAprilFools("24w14potato")); + assertTrue(isAprilFools("25w14craftmine")); + + assertFalse(isAprilFools("1.21.8")); + assertFalse(isAprilFools("1.21.8-rc1")); + assertFalse(isAprilFools("25w21a")); + assertFalse(isAprilFools("13w12~")); + assertFalse(isAprilFools("15w14b")); + } + @Test public void testParseOld() { assertOldVersion("rd-132211", GameVersionNumber.Type.PRE_CLASSIC, "132211");