From 5cab75dd7759f6718150db3ed067dc010575ab36 Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Wed, 15 Oct 2025 23:31:55 +0000 Subject: [PATCH 01/26] Filter null values from parent versions list --- .../manifest/vanilla/MojangLauncherMetadataProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java b/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java index 2c5f081d..925a4c75 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java @@ -295,7 +295,7 @@ private String fixupSemver(String proposedSemVer) { @Override public List getParentVersions(OrderedVersion mcVersion) { List parentVersionIds = this.getParentVersionIds(mcVersion.friendlyVersion()); - return parentVersionIds == null ? null : parentVersionIds.stream().map(this::getVersionByVersionID).toList(); + return parentVersionIds == null ? null : parentVersionIds.stream().map(this::getVersionByVersionID).filter(Objects::nonNull).toList(); } protected List getParentVersionIds(String versionId) { From 33be7d3a81b30b6eafb42ae0131b93825270c78b Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Thu, 16 Oct 2025 19:06:33 +0000 Subject: [PATCH 02/26] Fix breaking typo --- .../manifest/omniarchive/OmniarchiveMetadataProvider.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java b/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java index 823cb912..e00d3ff5 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java @@ -29,9 +29,9 @@ public String getInternalName() { @Override public List getParentVersionIds(String versionId) { switch (versionId) { - case "3D Shareware v1.34" -> { - return List.of("19w13b+1653"); - } + case "3D Shareware v1.34" -> { + return List.of("19w13b-1653"); + } } return super.getParentVersionIds(versionId); From 329b89159c5d356ece0c45257def09f239ee767d Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Thu, 16 Oct 2025 19:48:39 +0000 Subject: [PATCH 03/26] Add parent version overrides for Omniarchive manifest --- .../OmniarchiveMetadataProvider.java | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java b/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java index e00d3ff5..dbed592a 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java @@ -29,9 +29,91 @@ public String getInternalName() { @Override public List getParentVersionIds(String versionId) { switch (versionId) { + // Combat + case "combat1" -> { + return List.of("1.14.3-pre4"); + } + case "combat2" -> { + return List.of("1.14.4", "combat1"); + } + case "combat3" -> { + return List.of("combat2"); + } + case "combat4" -> { + return List.of("1.15-pre3", "combat3"); + } + case "combat5" -> { + return List.of("1.15.2-pre2", "combat4"); + } + case "combat6" -> { + return List.of("1.16.2-pre3", "combat5"); + } + case "combat7" -> { + return List.of("1.16.2", "combat6"); + } + case "combat7b" -> { + return List.of("combat7"); + } + case "combat7c" -> { + return List.of("combat7b"); + } + case "combat8" -> { + return List.of("combat7c"); + } + case "combat8b" -> { + return List.of("combat8"); + } + case "combat8c" -> { + return List.of("combat8b"); + } + // Experimental 1.18 + case "1.18-exp1" -> { + return List.of("1.17.1"); + } + case "1.18-exp2" -> { + return List.of("1.18-exp1"); + } + case "1.18-exp3" -> { + return List.of("1.18-exp2"); + } + case "1.18-exp4" -> { + return List.of("1.18-exp3"); + } + case "1.18-exp5" -> { + return List.of("1.18-exp4"); + } + case "1.18-exp6" -> { + return List.of("1.18-exp5"); + } + case "1.18-exp7" -> { + return List.of("1.18-exp6"); + } + case "21w37a" -> { + return List.of("1.17.1", "1.18-exp7"); + } + // Experimental 1.19 + case "1.19-exp1" -> { + return List.of("1.18.1"); + } + case "22w11a" -> { + return List.of("1.18.2", "1.19-exp1"); + } + // April case "3D Shareware v1.34" -> { return List.of("19w13b-1653"); } + case "23w13a_or_b-1249" -> { + return List.of("23w13a_or_b-0722", "23w13a"); + } + case "23w13a_or_b-0722" -> { + return List.of("23w13a"); + } + case "24w14potato-1104" -> { + return List.of("24w14potato-0838", "24w12a"); + } + case "24w14potato-0838" -> { + return List.of("24w12a"); + } } return super.getParentVersionIds(versionId); From 708af6ee43a6fd88e3ef7b6fa68f0dbc4eacd515 Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Thu, 16 Oct 2025 21:16:29 +0000 Subject: [PATCH 04/26] Add more special cases for parent versions --- .../omniarchive/OmniarchiveMetadataProvider.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java b/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java index dbed592a..f9a6017d 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java @@ -99,6 +99,15 @@ public List getParentVersionIds(String versionId) { return List.of("1.18.2", "1.19-exp1"); } // April + case "2.0-blue" -> { + return List.of("1.5.1"); + } + case "2.0-purple" -> { + return List.of("1.5.1"); + } + case "2.0-red" -> { + return List.of("1.5.1"); + } case "3D Shareware v1.34" -> { return List.of("19w13b-1653"); } From f6c9b354de799e7556874871359767a709da43c1 Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Fri, 17 Oct 2025 01:10:16 +0000 Subject: [PATCH 05/26] Replace null filter with assertion --- .../manifest/vanilla/MojangLauncherMetadataProvider.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java b/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java index 925a4c75..20aa1b3a 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java @@ -295,7 +295,14 @@ private String fixupSemver(String proposedSemVer) { @Override public List getParentVersions(OrderedVersion mcVersion) { List parentVersionIds = this.getParentVersionIds(mcVersion.friendlyVersion()); - return parentVersionIds == null ? null : parentVersionIds.stream().map(this::getVersionByVersionID).filter(Objects::nonNull).toList(); + return parentVersionIds == null ? null : parentVersionIds.stream() + .map(this::getVersionByVersionID) + .peek(ver -> { + if (ver == null) { + MiscHelper.panic("One or more of the parent versions were not found for %", mcVersion.friendlyVersion()); + } + }) + .toList(); } protected List getParentVersionIds(String versionId) { From 27c36af3b065e539652347d5430c04712ccfe5f6 Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Fri, 17 Oct 2025 01:14:54 +0000 Subject: [PATCH 06/26] Filter classic and alpha server from Skyrining parent versions And remove null filter --- .../skyrising/SkyrisingMetadataProvider.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/groovy/com/github/winplay02/gitcraft/manifest/skyrising/SkyrisingMetadataProvider.java b/src/main/groovy/com/github/winplay02/gitcraft/manifest/skyrising/SkyrisingMetadataProvider.java index 9b513bb5..66d560a0 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/manifest/skyrising/SkyrisingMetadataProvider.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/manifest/skyrising/SkyrisingMetadataProvider.java @@ -123,8 +123,13 @@ protected boolean isExistingVersionMetadataValid(SkyrisingManifest.VersionEntry @Override public List getParentVersions(OrderedVersion mcVersion) { return this.getVersionDetails(mcVersion.launcherFriendlyVersionName()).previous().stream() + .filter(it -> !isClassicOrAlphaServer(it)) .map(this::getVersionByVersionID) - .filter(Objects::nonNull) + .peek(ver -> { + if (ver == null) { + MiscHelper.panic("One or more of the parent versions were not found for %", mcVersion.friendlyVersion()); + } + }) .toList(); } @@ -133,7 +138,11 @@ public List getParentVersions(OrderedVersion mcVersion) { @Override public boolean shouldExclude(OrderedVersion mcVersion) { // classic and alpha servers don't work well with the version graph right now - return mcVersion.launcherFriendlyVersionName().startsWith("server-"); + return isClassicOrAlphaServer(mcVersion.launcherFriendlyVersionName()); + } + + private static boolean isClassicOrAlphaServer(String versionId) { + return versionId.startsWith("server-"); } @Override From c2836df904ec6948da2dc9c9f8a4c95f68bd5fca Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Fri, 17 Oct 2025 01:27:12 +0000 Subject: [PATCH 07/26] fix typos --- .../gitcraft/manifest/skyrising/SkyrisingMetadataProvider.java | 2 +- .../manifest/vanilla/MojangLauncherMetadataProvider.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/groovy/com/github/winplay02/gitcraft/manifest/skyrising/SkyrisingMetadataProvider.java b/src/main/groovy/com/github/winplay02/gitcraft/manifest/skyrising/SkyrisingMetadataProvider.java index 66d560a0..f7c6a6c2 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/manifest/skyrising/SkyrisingMetadataProvider.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/manifest/skyrising/SkyrisingMetadataProvider.java @@ -127,7 +127,7 @@ public List getParentVersions(OrderedVersion mcVersion) { .map(this::getVersionByVersionID) .peek(ver -> { if (ver == null) { - MiscHelper.panic("One or more of the parent versions were not found for %", mcVersion.friendlyVersion()); + MiscHelper.panic("One or more of the parent versions were not found for %s", mcVersion.friendlyVersion()); } }) .toList(); diff --git a/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java b/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java index 20aa1b3a..92d0bffd 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java @@ -299,7 +299,7 @@ public List getParentVersions(OrderedVersion mcVersion) { .map(this::getVersionByVersionID) .peek(ver -> { if (ver == null) { - MiscHelper.panic("One or more of the parent versions were not found for %", mcVersion.friendlyVersion()); + MiscHelper.panic("One or more of the parent versions were not found for %s", mcVersion.friendlyVersion()); } }) .toList(); From 1795749051d3dbb6e71e469e64c96e7fb7b9edd2 Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Thu, 23 Oct 2025 00:42:52 +0000 Subject: [PATCH 08/26] Exclude 15w14a from main branch as an april fools snapshot --- .../manifest/vanilla/MojangLauncherMetadataProvider.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java b/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java index 92d0bffd..e68444f1 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java @@ -424,6 +424,9 @@ public boolean shouldExcludeFromMainBranch(OrderedVersion mcVersion) { return super.shouldExcludeFromMainBranch(mcVersion) // filter out april fools snapshots and experimental versions, // which often have typical ids that do not match normal snapshots - || (mcVersion.isSnapshotOrPending() && !NORMAL_SNAPSHOT_PATTERN.matcher(mcVersion.launcherFriendlyVersionName()).matches()); + || (mcVersion.isSnapshotOrPending() + && !NORMAL_SNAPSHOT_PATTERN.matcher(mcVersion.launcherFriendlyVersionName()).matches()) + // Exclude april fools that looks like regular snapshot + || Objects.equals(mcVersion.launcherFriendlyVersionName(), "15w14a");; } } From d98d8ce0ab5f4dd67aa25eb42c8a62f1d8708cdd Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Thu, 23 Oct 2025 00:51:17 +0000 Subject: [PATCH 09/26] Make 22w13oneblockatatime use correct parent version --- .../manifest/vanilla/MojangLauncherMetadataProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java b/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java index e68444f1..a42220a2 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java @@ -390,7 +390,7 @@ protected List getParentVersionIds(String versionId) { return List.of("20w13b"); } case "22w13oneblockatatime" -> { - return List.of("22w13a"); + return List.of("1.18.2"); } case "23w13a_or_b" -> { return List.of("23w13a_or_b_original", "23w13a"); From f45887276adb48ef150f2fa5d3a3b56d97381783 Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Thu, 23 Oct 2025 01:04:31 +0000 Subject: [PATCH 10/26] Add ability to override NORMAL_SNAPSHOT_PATTERN in MojangLauncherMetadataProvider --- .../manifest/vanilla/MojangLauncherMetadataProvider.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java b/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java index a42220a2..2ddbf4d0 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java @@ -419,13 +419,17 @@ protected List getParentVersionIds(String versionId) { private static final Pattern NORMAL_SNAPSHOT_PATTERN = Pattern.compile("(^\\d\\dw\\d\\d[a-z]$)|(^\\d.\\d+(.\\d+)?(-(pre|rc)\\d+|_[a-z_\\-]+snapshot-\\d+| Pre-Release \\d+)?$)"); + protected Pattern getNormalSnapshotPattern() { + return NORMAL_SNAPSHOT_PATTERN; + } + @Override public boolean shouldExcludeFromMainBranch(OrderedVersion mcVersion) { return super.shouldExcludeFromMainBranch(mcVersion) // filter out april fools snapshots and experimental versions, // which often have typical ids that do not match normal snapshots || (mcVersion.isSnapshotOrPending() - && !NORMAL_SNAPSHOT_PATTERN.matcher(mcVersion.launcherFriendlyVersionName()).matches()) + && !this.getNormalSnapshotPattern().matcher(mcVersion.launcherFriendlyVersionName()).matches()) // Exclude april fools that looks like regular snapshot || Objects.equals(mcVersion.launcherFriendlyVersionName(), "15w14a");; } From 5044a728172c5f8e5e56e40b77f066895ca1b6d9 Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Tue, 28 Oct 2025 04:54:08 +0000 Subject: [PATCH 11/26] Add detection for more version types from different manifests --- .../gitcraft/types/OrderedVersion.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/main/groovy/com/github/winplay02/gitcraft/types/OrderedVersion.java b/src/main/groovy/com/github/winplay02/gitcraft/types/OrderedVersion.java index 2193e50d..e8832030 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/types/OrderedVersion.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/types/OrderedVersion.java @@ -116,10 +116,39 @@ public boolean isSnapshot() { return Objects.equals(this.versionInfo().type(), "snapshot"); } + // Can be found in Mojang and Skyrising manifests public boolean isPending() { return Objects.equals(this.versionInfo().type(), "pending"); } + public boolean isOldBeta() { + return Objects.equals(this.versionInfo().type(), "old_beta"); + } + + public boolean isOldAlpha() { + return Objects.equals(this.versionInfo().type(), "old_alpha"); + } + + // Can be found in Skyrising manifest + public boolean isAlphaServer() { + return Objects.equals(this.versionInfo().type(), "alpha_server"); + } + + // Can be found in Skyrising manifest + public boolean isClassicServer() { + return Objects.equals(this.versionInfo().type(), "classic_server"); + } + + // Can be found in Omniarchive manifest + public boolean isSpecial() { + return Objects.equals(this.versionInfo().type(), "special"); + } + + // Can be found in Omniarchive manifest + public boolean isAprilFools() { + return Objects.equals(this.versionInfo().type(), "april-fools"); + } + public boolean isSnapshotOrPending() { return this.isSnapshot() || this.isPending(); } From 60bf6cbba5c10fdab8f7f2a089f3d106c58c1ee9 Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Tue, 28 Oct 2025 05:17:35 +0000 Subject: [PATCH 12/26] Use custom shouldExcludeFromMainBranch for Omniarchive manifest --- .../OmniarchiveMetadataProvider.java | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java b/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java index f9a6017d..20f3547c 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java @@ -123,8 +123,70 @@ public List getParentVersionIds(String versionId) { case "24w14potato-0838" -> { return List.of("24w12a"); } + //Beta + case "b1.3-demo" -> { + return List.of("b1.3_01"); + } + case "b1.2_02-dev" -> { + return List.of("b1.2_02"); + } + case "b1.2_02-launcher" -> { + return List.of("b1.2_02"); + } + //Alpha + case "a1.2.0_02-launcher" -> { + return List.of("a1.2.0_02"); + } + case "a1.1.0-101847-launcher" -> { + return List.of("a1.1.0-101847"); + } + case "a1.0.14-1659-launcher" -> { + return List.of("a1.0.14-1659"); + } + case "a1.0.4-launcher" -> { + return List.of("a1.0.4"); + } + //Classic + case "c0.30-c-1900-renew" -> { + return List.of("c0.30-c-1900"); + } + case "c0.0.13a_03-launcher" -> { + return List.of("c0.0.13a_03"); + } } return super.getParentVersionIds(versionId); } + + private static final Pattern OMNI_NORMAL_SNAPSHOT_PATTERN = Pattern.compile("(^\\d\\dw\\d\\d[a-z](-\\d+)?$)|(^\\d.\\d+(.\\d+)?(-(pre|rc)(\\d+)?(-\\d+)?|-exp\\d+)?$)"); + + @Override + protected Pattern getNormalSnapshotPattern() { + return OMNI_NORMAL_SNAPSHOT_PATTERN; + } + + @Override + public boolean shouldExcludeFromMainBranch(OrderedVersion mcVersion) { + return super.shouldExcludeFromMainBranch(mcVersion) + // Exclude all april fools snapshots + || mcVersion.isAprilFools() + // Exclude special versions such as combat experiments and b1.3-demo + || (mcVersion.isSpecial() + // Allow special versions which do not branch out + && !Objects.equals(mcVersion.launcherFriendlyVersionName(), "13w12~-1439") + && !Objects.equals(mcVersion.launcherFriendlyVersionName(), "1.5-pre-whitelinefix") + && !Objects.equals(mcVersion.launcherFriendlyVersionName(), "13w04a-whitelinefix") + && !Objects.equals(mcVersion.launcherFriendlyVersionName(), "13w02a-whitetexturefix") + && !Objects.equals(mcVersion.launcherFriendlyVersionName(), "1.0.0-tominecon") + && !Objects.equals(mcVersion.launcherFriendlyVersionName(), "b1.6-tb3") + && !Objects.equals(mcVersion.launcherFriendlyVersionName(), "c0.0.13a-launcher") + && !Objects.equals(mcVersion.launcherFriendlyVersionName(), "c0.0.11a-launcher")) + // Exclude duplicate versions from launcher + || Objects.equals(mcVersion.launcherFriendlyVersionName(), "b1.2_02-launcher") + || Objects.equals(mcVersion.launcherFriendlyVersionName(), "a1.2.0_02-launcher") + || Objects.equals(mcVersion.launcherFriendlyVersionName(), "a1.1.0-101847-launcher") + || Objects.equals(mcVersion.launcherFriendlyVersionName(), "a1.0.14-1659-launcher") + || Objects.equals(mcVersion.launcherFriendlyVersionName(), "a1.0.4-launcher") + || Objects.equals(mcVersion.launcherFriendlyVersionName(), "c0.0.13a_03-launcher"); + } } From ff0f1f70feccc128c87266237f503326cb559fd5 Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Thu, 30 Oct 2025 00:36:10 +0000 Subject: [PATCH 13/26] fix missing imports and a typo --- .../manifest/omniarchive/OmniarchiveMetadataProvider.java | 3 +++ .../manifest/vanilla/MojangLauncherMetadataProvider.java | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java b/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java index 20f3547c..344d9a94 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java @@ -1,9 +1,12 @@ package com.github.winplay02.gitcraft.manifest.omniarchive; import java.util.List; +import java.util.Objects; +import java.util.regex.Pattern; import com.github.winplay02.gitcraft.manifest.ManifestSource; import com.github.winplay02.gitcraft.manifest.vanilla.MojangLauncherMetadataProvider; +import com.github.winplay02.gitcraft.types.OrderedVersion; public class OmniarchiveMetadataProvider extends MojangLauncherMetadataProvider { diff --git a/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java b/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java index 2ddbf4d0..ab12d491 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java @@ -431,6 +431,6 @@ public boolean shouldExcludeFromMainBranch(OrderedVersion mcVersion) { || (mcVersion.isSnapshotOrPending() && !this.getNormalSnapshotPattern().matcher(mcVersion.launcherFriendlyVersionName()).matches()) // Exclude april fools that looks like regular snapshot - || Objects.equals(mcVersion.launcherFriendlyVersionName(), "15w14a");; + || Objects.equals(mcVersion.launcherFriendlyVersionName(), "15w14a"); } } From 9178d856203f669fb51b2b03aa3d74ad0b96d6ae Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Sat, 15 Nov 2025 19:42:03 +0000 Subject: [PATCH 14/26] Propagate root paramter when recursively calling walkBackToBranchPoint --- .../com/github/winplay02/gitcraft/MinecraftVersionGraph.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/groovy/com/github/winplay02/gitcraft/MinecraftVersionGraph.java b/src/main/groovy/com/github/winplay02/gitcraft/MinecraftVersionGraph.java index 84589c92..ca9ff15b 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/MinecraftVersionGraph.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/MinecraftVersionGraph.java @@ -320,7 +320,7 @@ private OrderedVersion walkBackToBranchPoint(OrderedVersion mcVersion, boolean r Set branches = this.getPreviousVertices(mcVersion); if (branches.size() == 1) { - return this.walkBackToBranchPoint(branches.iterator().next()); + return this.walkBackToBranchPoint(branches.iterator().next(), root); } // version is not a branch point or root, and number of prev versions @@ -337,7 +337,7 @@ private OrderedVersion walkBackToBranchPoint(OrderedVersion mcVersion, boolean r // if path length to tip is not present, then this version // was already marked as lying on a branch if (!this.pathsToTip.containsKey(branch)) { - return this.walkBackToBranchPoint(branch); + return this.walkBackToBranchPoint(branch, root); } int pathToRoot = this.pathsToRoot.get(branch); From 439b844c1c2fe656eba65488375ae65f03478b37 Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Sun, 16 Nov 2025 15:05:10 +0000 Subject: [PATCH 15/26] Place 1.18 and deep dark experimental snapshots correctly --- .../manifest/vanilla/MojangLauncherMetadataProvider.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java b/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java index ab12d491..5417d59d 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java @@ -346,7 +346,7 @@ protected List getParentVersionIds(String versionId) { } // Experimental 1.18 case "1.18_experimental-snapshot-1" -> { - return List.of("1.17.1"); + return List.of("1.17.1-pre1"); } case "1.18_experimental-snapshot-2" -> { return List.of("1.18_experimental-snapshot-1"); @@ -373,9 +373,6 @@ protected List getParentVersionIds(String versionId) { case "1.19_deep_dark_experimental_snapshot-1" -> { return List.of("1.18.1"); } - case "22w11a" -> { - return List.of("1.18.2", "1.19_deep_dark_experimental_snapshot-1"); - } // April case "15w14a" -> { return List.of("1.8.3"); From 8a4a969bcd84ee2c80212e1aa069994d086f7633 Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Mon, 17 Nov 2025 16:35:26 +0000 Subject: [PATCH 16/26] Correct branch structure for 23w13a_or_b and 24w14potato --- .../vanilla/MojangLauncherMetadataProvider.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java b/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java index 5417d59d..ba1dd5fd 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java @@ -389,18 +389,18 @@ protected List getParentVersionIds(String versionId) { case "22w13oneblockatatime" -> { return List.of("1.18.2"); } - case "23w13a_or_b" -> { - return List.of("23w13a_or_b_original", "23w13a"); - } case "23w13a_or_b_original" -> { return List.of("23w13a"); } - case "24w14potato" -> { - return List.of("24w14potato_original", "24w12a"); + case "23w13a_or_b" -> { + return List.of("23w13a_or_b_original"); } case "24w14potato_original" -> { return List.of("24w12a"); } + case "24w14potato" -> { + return List.of("24w14potato_original"); + } case "25w14craftmine" -> { return List.of("1.21.5"); } From 05653299fbf809e73a281ddfb0ec5bb59f44d3c6 Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Mon, 17 Nov 2025 17:19:50 +0000 Subject: [PATCH 17/26] Remove redundant special case --- .../manifest/vanilla/MojangLauncherMetadataProvider.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java b/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java index ba1dd5fd..1c0f684a 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java @@ -404,10 +404,6 @@ protected List getParentVersionIds(String versionId) { case "25w14craftmine" -> { return List.of("1.21.5"); } - // Special case to make version graph not contain a cycle - case "1.9.2" -> { - return List.of("1.9.1"); - } default -> { return null; } From 60cef6bb2a9ef11672b3f3e3fa70785f553bf866 Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Mon, 17 Nov 2025 17:22:29 +0000 Subject: [PATCH 18/26] Improve combat branch structure representation in code --- .../vanilla/MojangLauncherMetadataProvider.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java b/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java index 1c0f684a..71498937 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java @@ -312,22 +312,22 @@ protected List getParentVersionIds(String versionId) { return List.of("1.14.3-pre4"); } case "1.14_combat-0" -> { - return List.of("1.14.4", "1.14_combat-212796"); + return List.of("1.14_combat-212796", "1.14.4"); } case "1.14_combat-3" -> { return List.of("1.14_combat-0"); } case "1.15_combat-1" -> { - return List.of("1.15-pre3", "1.14_combat-3"); + return List.of("1.14_combat-3", "1.15-pre3"); } case "1.15_combat-6" -> { - return List.of("1.15.2-pre2", "1.15_combat-1"); + return List.of("1.15_combat-1", "1.15.2-pre2"); } case "1.16_combat-0" -> { - return List.of("1.16.2-pre3", "1.15_combat-6"); + return List.of("1.15_combat-6", "1.16.2-pre3"); } case "1.16_combat-1" -> { - return List.of("1.16.2", "1.16_combat-0"); + return List.of("1.16_combat-0", "1.16.2"); } case "1.16_combat-2" -> { return List.of("1.16_combat-1"); From d31a0bff303f59ef941d250671614084813c20db Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Mon, 17 Nov 2025 17:37:38 +0000 Subject: [PATCH 19/26] Repeat changes for Omniarchive manifest --- .../OmniarchiveMetadataProvider.java | 25 ++++++++----------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java b/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java index 344d9a94..807fcdfe 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java @@ -37,22 +37,22 @@ public List getParentVersionIds(String versionId) { return List.of("1.14.3-pre4"); } case "combat2" -> { - return List.of("1.14.4", "combat1"); + return List.of("combat1", "1.14.4"); } case "combat3" -> { return List.of("combat2"); } case "combat4" -> { - return List.of("1.15-pre3", "combat3"); + return List.of("combat3", "1.15-pre3"); } case "combat5" -> { - return List.of("1.15.2-pre2", "combat4"); + return List.of("combat4", "1.15.2-pre2"); } case "combat6" -> { - return List.of("1.16.2-pre3", "combat5"); + return List.of("combat5", "1.16.2-pre3"); } case "combat7" -> { - return List.of("1.16.2", "combat6"); + return List.of("combat6", "1.16.2"); } case "combat7b" -> { return List.of("combat7"); @@ -71,7 +71,7 @@ public List getParentVersionIds(String versionId) { } // Experimental 1.18 case "1.18-exp1" -> { - return List.of("1.17.1"); + return List.of("1.17.1-pre1"); } case "1.18-exp2" -> { return List.of("1.18-exp1"); @@ -98,9 +98,6 @@ public List getParentVersionIds(String versionId) { case "1.19-exp1" -> { return List.of("1.18.1"); } - case "22w11a" -> { - return List.of("1.18.2", "1.19-exp1"); - } // April case "2.0-blue" -> { return List.of("1.5.1"); @@ -114,18 +111,18 @@ public List getParentVersionIds(String versionId) { case "3D Shareware v1.34" -> { return List.of("19w13b-1653"); } - case "23w13a_or_b-1249" -> { - return List.of("23w13a_or_b-0722", "23w13a"); - } case "23w13a_or_b-0722" -> { return List.of("23w13a"); } - case "24w14potato-1104" -> { - return List.of("24w14potato-0838", "24w12a"); + case "23w13a_or_b-1249" -> { + return List.of("23w13a_or_b-0722"); } case "24w14potato-0838" -> { return List.of("24w12a"); } + case "24w14potato-1104" -> { + return List.of("24w14potato-0838"); + } //Beta case "b1.3-demo" -> { return List.of("b1.3_01"); From 791a28eb6687b3ec73fe7205a9dcce433443a867 Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Mon, 17 Nov 2025 17:50:44 +0000 Subject: [PATCH 20/26] Do not include experimantal snapshots in NORMAL_SNAPSHOT_PATTERN --- .../manifest/omniarchive/OmniarchiveMetadataProvider.java | 2 +- .../gitcraft/manifest/skyrising/SkyrisingMetadataProvider.java | 2 +- .../manifest/vanilla/MojangLauncherMetadataProvider.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java b/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java index 807fcdfe..bda77742 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java @@ -158,7 +158,7 @@ public List getParentVersionIds(String versionId) { return super.getParentVersionIds(versionId); } - private static final Pattern OMNI_NORMAL_SNAPSHOT_PATTERN = Pattern.compile("(^\\d\\dw\\d\\d[a-z](-\\d+)?$)|(^\\d.\\d+(.\\d+)?(-(pre|rc)(\\d+)?(-\\d+)?|-exp\\d+)?$)"); + private static final Pattern OMNI_NORMAL_SNAPSHOT_PATTERN = Pattern.compile("(^\\d\\dw\\d\\d[a-z](-\\d+)?$)|(^\\d.\\d+(.\\d+)?(-(pre|rc)(\\d+)?(-\\d+)?)?$)"); @Override protected Pattern getNormalSnapshotPattern() { diff --git a/src/main/groovy/com/github/winplay02/gitcraft/manifest/skyrising/SkyrisingMetadataProvider.java b/src/main/groovy/com/github/winplay02/gitcraft/manifest/skyrising/SkyrisingMetadataProvider.java index f7c6a6c2..a670eb11 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/manifest/skyrising/SkyrisingMetadataProvider.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/manifest/skyrising/SkyrisingMetadataProvider.java @@ -133,7 +133,7 @@ public List getParentVersions(OrderedVersion mcVersion) { .toList(); } - private static final Pattern NORMAL_SNAPSHOT_PATTERN = Pattern.compile("(^\\d\\dw\\d\\d[a-z](-\\d+)?$)|(^\\d.\\d+(.\\d+)?(-(pre|rc)((-\\d+|\\d+)(-\\d+)?)?|_[a-z_\\-]+snapshot-\\d+| Pre-Release \\d+)?$)"); + private static final Pattern NORMAL_SNAPSHOT_PATTERN = Pattern.compile("(^\\d\\dw\\d\\d[a-z](-\\d+)?$)|(^\\d.\\d+(.\\d+)?(-(pre|rc)((-\\d+|\\d+)(-\\d+)?)?| Pre-Release \\d+)?$)"); @Override public boolean shouldExclude(OrderedVersion mcVersion) { diff --git a/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java b/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java index 71498937..fed7370c 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java @@ -410,7 +410,7 @@ protected List getParentVersionIds(String versionId) { } } - private static final Pattern NORMAL_SNAPSHOT_PATTERN = Pattern.compile("(^\\d\\dw\\d\\d[a-z]$)|(^\\d.\\d+(.\\d+)?(-(pre|rc)\\d+|_[a-z_\\-]+snapshot-\\d+| Pre-Release \\d+)?$)"); + private static final Pattern NORMAL_SNAPSHOT_PATTERN = Pattern.compile("(^\\d\\dw\\d\\d[a-z]$)|(^\\d.\\d+(.\\d+)?(-(pre|rc)\\d+| Pre-Release \\d+)?$)"); protected Pattern getNormalSnapshotPattern() { return NORMAL_SNAPSHOT_PATTERN; From e94cd8aac2742a903b5f4e0e4e90d8b19658adf6 Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Thu, 20 Nov 2025 00:44:23 +0000 Subject: [PATCH 21/26] Use correct versions for pipeline tests --- .../com/github/winplay02/gitcraft/GitCraftTest.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/test/groovy/com/github/winplay02/gitcraft/GitCraftTest.java b/src/test/groovy/com/github/winplay02/gitcraft/GitCraftTest.java index 2546208d..b768487d 100644 --- a/src/test/groovy/com/github/winplay02/gitcraft/GitCraftTest.java +++ b/src/test/groovy/com/github/winplay02/gitcraft/GitCraftTest.java @@ -310,7 +310,7 @@ public void pipeline() throws Exception { } Configuration.reset(); // - GitCraft.main(new String[]{"--only-version=1.17.1,1.18_experimental-snapshot-1,21w37a,1.18,22w13oneblockatatime"}); + GitCraft.main(new String[]{"--only-version=1.17.1-pre1,1.18_experimental-snapshot-1,21w37a,1.18,22w13oneblockatatime"}); try (RepoWrapper repoWrapper = GitCraft.getRepository()) { assertNotNull(repoWrapper); assertNotNull(repoWrapper.getGit().getRepository().getRefDatabase().findRef(GitCraft.getRepositoryConfiguration().gitMainlineLinearBranch())); @@ -320,8 +320,8 @@ public void pipeline() throws Exception { assertEquals(1, Objects.requireNonNull(findCommit(repoWrapper, GitCraft.versionGraph.getMinecraftVersionByName("1.18"))).getParentCount()); assertEquals(2, Objects.requireNonNull(findCommit(repoWrapper, GitCraft.versionGraph.getMinecraftVersionByName("21w37a"))).getParentCount()); assertEquals(1, Objects.requireNonNull(findCommit(repoWrapper, GitCraft.versionGraph.getMinecraftVersionByName("1.18_experimental-snapshot-1"))).getParentCount()); - assertEquals(0, Objects.requireNonNull(findCommit(repoWrapper, GitCraft.versionGraph.getMinecraftVersionByName("1.17.1"))).getParentCount()); - RevCommit targetCommit = Objects.requireNonNull(findCommit(repoWrapper, GitCraft.versionGraph.getMinecraftVersionByName("1.17.1"))); + assertEquals(0, Objects.requireNonNull(findCommit(repoWrapper, GitCraft.versionGraph.getMinecraftVersionByName("1.17.1-pre1"))).getParentCount()); + RevCommit targetCommit = Objects.requireNonNull(findCommit(repoWrapper, GitCraft.versionGraph.getMinecraftVersionByName("1.17.1-pre1"))); try (TreeWalk walk = TreeWalk.forPath(repoWrapper.getGit().getRepository(), "minecraft/resources/assets", targetCommit.getTree())) { // assertNotNull(walk); } @@ -504,7 +504,7 @@ public void pipelineOldSnapshotSkyrisingOrnithe() throws Exception { @Test public void pipelineReset() throws Exception { Configuration.reset(); - GitCraft.main(new String[]{"--only-version=1.17.1,1.18_experimental-snapshot-1,21w37a,1.18,22w13oneblockatatime", "--refresh", "--refresh-min-version=1.18"}); + GitCraft.main(new String[]{"--only-version=1.17.1-pre1,1.18_experimental-snapshot-1,21w37a,1.18,22w13oneblockatatime", "--refresh", "--refresh-min-version=1.18"}); try (RepoWrapper repoWrapper = GitCraft.getRepository()) { assertNotNull(repoWrapper); assertNotNull(repoWrapper.getGit().getRepository().getRefDatabase().findRef(GitCraft.getRepositoryConfiguration().gitMainlineLinearBranch())); @@ -514,8 +514,8 @@ public void pipelineReset() throws Exception { assertEquals(1, Objects.requireNonNull(findCommit(repoWrapper, GitCraft.versionGraph.getMinecraftVersionByName("1.18"))).getParentCount()); assertEquals(2, Objects.requireNonNull(findCommit(repoWrapper, GitCraft.versionGraph.getMinecraftVersionByName("21w37a"))).getParentCount()); assertEquals(1, Objects.requireNonNull(findCommit(repoWrapper, GitCraft.versionGraph.getMinecraftVersionByName("1.18_experimental-snapshot-1"))).getParentCount()); - assertEquals(0, Objects.requireNonNull(findCommit(repoWrapper, GitCraft.versionGraph.getMinecraftVersionByName("1.17.1"))).getParentCount()); - RevCommit targetCommit = Objects.requireNonNull(findCommit(repoWrapper, GitCraft.versionGraph.getMinecraftVersionByName("1.17.1"))); + assertEquals(0, Objects.requireNonNull(findCommit(repoWrapper, GitCraft.versionGraph.getMinecraftVersionByName("1.17.1-pre1"))).getParentCount()); + RevCommit targetCommit = Objects.requireNonNull(findCommit(repoWrapper, GitCraft.versionGraph.getMinecraftVersionByName("1.17.1-pre1"))); try (TreeWalk walk = TreeWalk.forPath(repoWrapper.getGit().getRepository(), "minecraft/resources/assets", targetCommit.getTree())) { // assertNotNull(walk); } From e0bfb8e41cbb7ef02fb9b13950edaecbc0c2097c Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Thu, 20 Nov 2025 17:30:25 +0000 Subject: [PATCH 22/26] Omniarchive: Find duplicate 'launcher' versions automatically --- .../OmniarchiveMetadataProvider.java | 68 +++++++++---------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java b/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java index bda77742..abf35347 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java @@ -1,12 +1,13 @@ package com.github.winplay02.gitcraft.manifest.omniarchive; import java.util.List; -import java.util.Objects; +import java.util.Set; import java.util.regex.Pattern; import com.github.winplay02.gitcraft.manifest.ManifestSource; import com.github.winplay02.gitcraft.manifest.vanilla.MojangLauncherMetadataProvider; import com.github.winplay02.gitcraft.types.OrderedVersion; +import com.github.winplay02.gitcraft.util.MiscHelper; public class OmniarchiveMetadataProvider extends MojangLauncherMetadataProvider { @@ -130,29 +131,15 @@ public List getParentVersionIds(String versionId) { case "b1.2_02-dev" -> { return List.of("b1.2_02"); } - case "b1.2_02-launcher" -> { - return List.of("b1.2_02"); - } - //Alpha - case "a1.2.0_02-launcher" -> { - return List.of("a1.2.0_02"); - } - case "a1.1.0-101847-launcher" -> { - return List.of("a1.1.0-101847"); - } - case "a1.0.14-1659-launcher" -> { - return List.of("a1.0.14-1659"); - } - case "a1.0.4-launcher" -> { - return List.of("a1.0.4"); - } //Classic case "c0.30-c-1900-renew" -> { return List.of("c0.30-c-1900"); } - case "c0.0.13a_03-launcher" -> { - return List.of("c0.0.13a_03"); - } + } + + String launcher_duplicate = this.getLauncherVersionDuplicate(versionId); + if (launcher_duplicate != null) { + return List.of(launcher_duplicate); } return super.getParentVersionIds(versionId); @@ -165,6 +152,31 @@ protected Pattern getNormalSnapshotPattern() { return OMNI_NORMAL_SNAPSHOT_PATTERN; } + private static final String LAUNCHER_SUFFIX = "-launcher"; + + private String getLauncherVersionDuplicate(String versionId) { + if (versionId.endsWith(LAUNCHER_SUFFIX)) { + String potential_duplicate = versionId.replace(LAUNCHER_SUFFIX, ""); + + if (!this.versionsLoaded) { + MiscHelper.panic("Could not check if '%s' is a duplicate launcher version", versionId); + } + if (this.versionsById.containsKey(potential_duplicate)) { + return potential_duplicate; + } + /*try { + if (this.getVersions(null).containsKey(potential_duplicate)) { + return potential_duplicate; + } + } catch (Exception e) { + MiscHelper.panicBecause(e, "Could not check if '%s' is a duplicate launcher version", versionId); + }*/ + } + return null; + } + + private static final Set LINEAR_SPECIAL_VERSIONS = Set.of("13w12~-1439", "1.5-pre-whitelinefix", "13w04a-whitelinefix", "13w02a-whitetexturefix", "1.0.0-tominecon", "b1.6-tb3", "c0.0.13a-launcher", "c0.0.11a-launcher"); + @Override public boolean shouldExcludeFromMainBranch(OrderedVersion mcVersion) { return super.shouldExcludeFromMainBranch(mcVersion) @@ -173,20 +185,8 @@ public boolean shouldExcludeFromMainBranch(OrderedVersion mcVersion) { // Exclude special versions such as combat experiments and b1.3-demo || (mcVersion.isSpecial() // Allow special versions which do not branch out - && !Objects.equals(mcVersion.launcherFriendlyVersionName(), "13w12~-1439") - && !Objects.equals(mcVersion.launcherFriendlyVersionName(), "1.5-pre-whitelinefix") - && !Objects.equals(mcVersion.launcherFriendlyVersionName(), "13w04a-whitelinefix") - && !Objects.equals(mcVersion.launcherFriendlyVersionName(), "13w02a-whitetexturefix") - && !Objects.equals(mcVersion.launcherFriendlyVersionName(), "1.0.0-tominecon") - && !Objects.equals(mcVersion.launcherFriendlyVersionName(), "b1.6-tb3") - && !Objects.equals(mcVersion.launcherFriendlyVersionName(), "c0.0.13a-launcher") - && !Objects.equals(mcVersion.launcherFriendlyVersionName(), "c0.0.11a-launcher")) + && !LINEAR_SPECIAL_VERSIONS.contains(mcVersion.launcherFriendlyVersionName())) // Exclude duplicate versions from launcher - || Objects.equals(mcVersion.launcherFriendlyVersionName(), "b1.2_02-launcher") - || Objects.equals(mcVersion.launcherFriendlyVersionName(), "a1.2.0_02-launcher") - || Objects.equals(mcVersion.launcherFriendlyVersionName(), "a1.1.0-101847-launcher") - || Objects.equals(mcVersion.launcherFriendlyVersionName(), "a1.0.14-1659-launcher") - || Objects.equals(mcVersion.launcherFriendlyVersionName(), "a1.0.4-launcher") - || Objects.equals(mcVersion.launcherFriendlyVersionName(), "c0.0.13a_03-launcher"); + || (this.getLauncherVersionDuplicate(mcVersion.launcherFriendlyVersionName()) != null); } } From 80ed2c36a125c12d5a0698f0b4751bfd42c8e3e1 Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Thu, 20 Nov 2025 18:17:08 +0000 Subject: [PATCH 23/26] Fix incorrect removal of launcher suffix --- .../manifest/omniarchive/OmniarchiveMetadataProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java b/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java index abf35347..511e5d9e 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java @@ -156,7 +156,7 @@ protected Pattern getNormalSnapshotPattern() { private String getLauncherVersionDuplicate(String versionId) { if (versionId.endsWith(LAUNCHER_SUFFIX)) { - String potential_duplicate = versionId.replace(LAUNCHER_SUFFIX, ""); + String potential_duplicate = versionId.substring(0, versionId.length() - LAUNCHER_SUFFIX.length()); if (!this.versionsLoaded) { MiscHelper.panic("Could not check if '%s' is a duplicate launcher version", versionId); From d16b775f2ca22d55e7126903ae36cde3c8b6c156 Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Thu, 20 Nov 2025 19:15:07 +0000 Subject: [PATCH 24/26] Fix for '2.0-preview' april fools version --- .../manifest/omniarchive/OmniarchiveMetadataProvider.java | 3 +++ .../manifest/vanilla/MojangLauncherMetadataProvider.java | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java b/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java index 511e5d9e..6e00ae28 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java @@ -100,6 +100,9 @@ public List getParentVersionIds(String versionId) { return List.of("1.18.1"); } // April + case "2.0-preview" -> { + return List.of("1.5.1"); + } case "2.0-blue" -> { return List.of("1.5.1"); } diff --git a/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java b/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java index fed7370c..cdf3fadd 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/manifest/vanilla/MojangLauncherMetadataProvider.java @@ -201,7 +201,9 @@ protected boolean isExistingVersionMetadataValid(MojangLauncherManifest.VersionE // support extra original for 23w13a_or_b "23w13a_or_b_original", "1.20-alpha.23.13.ab.original", // support extra original for 24w14potato... - "24w14potato_original", "1.20.5-alpha.24.12.potato.original" + "24w14potato_original", "1.20.5-alpha.24.12.potato.original", + // present in Omniarchive manifest and fabric-loader does not parse it correctly + "2.0-preview", "2.0-preview" // FIX until fabric-loader is updated // END FIX ); From 45cd457fc3b9554aece1a0fdbe4497bbea6089f7 Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Thu, 18 Dec 2025 20:15:33 +0000 Subject: [PATCH 25/26] Use getVersionsAssumeLoaded from #46 --- .../omniarchive/OmniarchiveMetadataProvider.java | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java b/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java index 6e00ae28..465d0e09 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java @@ -160,20 +160,9 @@ protected Pattern getNormalSnapshotPattern() { private String getLauncherVersionDuplicate(String versionId) { if (versionId.endsWith(LAUNCHER_SUFFIX)) { String potential_duplicate = versionId.substring(0, versionId.length() - LAUNCHER_SUFFIX.length()); - - if (!this.versionsLoaded) { - MiscHelper.panic("Could not check if '%s' is a duplicate launcher version", versionId); - } - if (this.versionsById.containsKey(potential_duplicate)) { + if (this.getVersionsAssumeLoaded().containsKey(potential_duplicate)) { return potential_duplicate; } - /*try { - if (this.getVersions(null).containsKey(potential_duplicate)) { - return potential_duplicate; - } - } catch (Exception e) { - MiscHelper.panicBecause(e, "Could not check if '%s' is a duplicate launcher version", versionId); - }*/ } return null; } From c39a34accef1eaee9e5df3f7532ab843641a2642 Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Sat, 20 Dec 2025 10:44:29 +0000 Subject: [PATCH 26/26] Mark Omniarchive special snapshots as such --- .../com/github/winplay02/gitcraft/GitCraftQuirks.java | 6 ++++++ .../manifest/omniarchive/OmniarchiveMetadataProvider.java | 7 ++----- .../github/winplay02/gitcraft/types/OrderedVersion.java | 4 +++- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/main/groovy/com/github/winplay02/gitcraft/GitCraftQuirks.java b/src/main/groovy/com/github/winplay02/gitcraft/GitCraftQuirks.java index 6e1478c0..1618c97e 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/GitCraftQuirks.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/GitCraftQuirks.java @@ -5,6 +5,8 @@ import java.time.ZonedDateTime; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; public class GitCraftQuirks { /// Mapping quirks @@ -54,4 +56,8 @@ public class GitCraftQuirks { // There are no releases for these parchment versions (yet) public static List parchmentMissingVersions = List.of("1.18", "1.19", "1.19.1", "1.20", "1.20.5", "1.21.2"); + + // Special cases for Omniarchive manifest + public static List omniarchiveSpecialSnapshots = List.of("1.0.0-tominecon", "13w02a-whitetexturefix", "13w04a-whitelinefix", "1.5-pre-whitelinefix", "13w12~-1439"); + public static List omniarchiveLinearSpecials = Stream.concat(Stream.of("c0.0.11a-launcher", "c0.0.13a-launcher", "b1.6-tb3"), omniarchiveSpecialSnapshots.stream()).collect(Collectors.toList()); } diff --git a/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java b/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java index 465d0e09..8ed4c80d 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/manifest/omniarchive/OmniarchiveMetadataProvider.java @@ -1,13 +1,12 @@ package com.github.winplay02.gitcraft.manifest.omniarchive; import java.util.List; -import java.util.Set; import java.util.regex.Pattern; +import com.github.winplay02.gitcraft.GitCraftQuirks; import com.github.winplay02.gitcraft.manifest.ManifestSource; import com.github.winplay02.gitcraft.manifest.vanilla.MojangLauncherMetadataProvider; import com.github.winplay02.gitcraft.types.OrderedVersion; -import com.github.winplay02.gitcraft.util.MiscHelper; public class OmniarchiveMetadataProvider extends MojangLauncherMetadataProvider { @@ -167,8 +166,6 @@ private String getLauncherVersionDuplicate(String versionId) { return null; } - private static final Set LINEAR_SPECIAL_VERSIONS = Set.of("13w12~-1439", "1.5-pre-whitelinefix", "13w04a-whitelinefix", "13w02a-whitetexturefix", "1.0.0-tominecon", "b1.6-tb3", "c0.0.13a-launcher", "c0.0.11a-launcher"); - @Override public boolean shouldExcludeFromMainBranch(OrderedVersion mcVersion) { return super.shouldExcludeFromMainBranch(mcVersion) @@ -177,7 +174,7 @@ public boolean shouldExcludeFromMainBranch(OrderedVersion mcVersion) { // Exclude special versions such as combat experiments and b1.3-demo || (mcVersion.isSpecial() // Allow special versions which do not branch out - && !LINEAR_SPECIAL_VERSIONS.contains(mcVersion.launcherFriendlyVersionName())) + && !GitCraftQuirks.omniarchiveLinearSpecials.contains(mcVersion.launcherFriendlyVersionName())) // Exclude duplicate versions from launcher || (this.getLauncherVersionDuplicate(mcVersion.launcherFriendlyVersionName()) != null); } diff --git a/src/main/groovy/com/github/winplay02/gitcraft/types/OrderedVersion.java b/src/main/groovy/com/github/winplay02/gitcraft/types/OrderedVersion.java index e8832030..921344ba 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/types/OrderedVersion.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/types/OrderedVersion.java @@ -113,7 +113,9 @@ public int javaVersion() { } public boolean isSnapshot() { - return Objects.equals(this.versionInfo().type(), "snapshot"); + return Objects.equals(this.versionInfo().type(), "snapshot") + // another special case for snapshots from Omniarchive manifest which are marked as "special" + || (this.isSpecial() && GitCraftQuirks.omniarchiveSpecialSnapshots.contains(this.versionInfo().id())); } // Can be found in Mojang and Skyrising manifests