From 15f96ebe77dab50ec4c9fc24ab0a8f59a351b7a6 Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Mon, 29 Dec 2025 00:00:30 +0000 Subject: [PATCH 1/9] Parent versions --- .../OmniarchiveMetadataProvider.java | 108 +++++++++++++++++- 1 file changed, 105 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..fb1d4747 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,111 @@ public String getInternalName() { @Override public List getParentVersionIds(String versionId) { switch (versionId) { - case "3D Shareware v1.34" -> { - return List.of("19w13b+1653"); - } + // Combat + case "combat1" -> { + return List.of("1.14.3-pre4"); + } + case "combat2" -> { + return List.of("combat1", "1.14.4"); + } + case "combat3" -> { + return List.of("combat2"); + } + case "combat4" -> { + return List.of("combat3", "1.15-pre3"); + } + case "combat5" -> { + return List.of("combat4", "1.15.2-pre2"); + } + case "combat6" -> { + return List.of("combat5", "1.16.2-pre3"); + } + case "combat7" -> { + return List.of("combat6", "1.16.2"); + } + 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-pre1"); + } + 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"); + } + // April + case "2.0-preview" -> { + return List.of("1.5.1"); + } + 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"); + } + case "23w13a_or_b-0722" -> { + return List.of("23w13a"); + } + 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"); + } + case "b1.2_02-dev" -> { + return List.of("b1.2_02"); + } + //Classic + case "c0.30-c-1900-renew" -> { + return List.of("c0.30-c-1900"); + } } return super.getParentVersionIds(versionId); From c702493e2666bbd135c5ce2e0372abe5e77d627a Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Mon, 29 Dec 2025 00:07:58 +0000 Subject: [PATCH 2/9] Use custom NORMAL_SNAPSHOT_PATTERN --- .../manifest/omniarchive/OmniarchiveMetadataProvider.java | 7 +++++++ .../manifest/vanilla/MojangLauncherMetadataProvider.java | 6 +++++- 2 files changed, 12 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 fb1d4747..492265c3 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 @@ -138,4 +138,11 @@ 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+)?$)|(^(1|\\d\\d).\\d+(.\\d+)?(-(pre|rc|snapshot)(\\d+)?(-\\d+)?)?$)"); + + @Override + protected Pattern getNormalSnapshotPattern() { + return OMNI_NORMAL_SNAPSHOT_PATTERN; + } } 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 d7d78a0b..1f9106e9 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 @@ -373,11 +373,15 @@ 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()); + || (mcVersion.isSnapshotOrPending() && !this.getNormalSnapshotPattern().matcher(mcVersion.launcherFriendlyVersionName()).matches()); } } From 4dedff8c66810f582721e6f29f6206b8d23675ab Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Mon, 29 Dec 2025 00:11:12 +0000 Subject: [PATCH 3/9] Edit pattern to allow timestamps --- .../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 492265c3..699ed03e 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 @@ -139,7 +139,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+)?$)|(^(1|\\d\\d).\\d+(.\\d+)?(-(pre|rc|snapshot)(\\d+)?(-\\d+)?)?$)"); + private static final Pattern OMNI_NORMAL_SNAPSHOT_PATTERN = Pattern.compile("(^\\d\\dw\\d\\d[a-z](-\\d+)?$)|(^(1|\\d\\d).\\d+(.\\d+)?(-(pre|rc|snapshot-)(\\d+)?(-\\d+)?)?$)"); @Override protected Pattern getNormalSnapshotPattern() { From 2be584021d23a57fe3607cf9591b8362de0b734c Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Mon, 29 Dec 2025 00:13:20 +0000 Subject: [PATCH 4/9] Use custom shouldExcludeFromMainBranch logic --- .../OmniarchiveMetadataProvider.java | 30 +++++++++++++++++++ 1 file changed, 30 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 699ed03e..2a53ee15 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 @@ -136,6 +136,11 @@ public List getParentVersionIds(String versionId) { } } + String launcher_duplicate = this.getLauncherVersionDuplicate(versionId); + if (launcher_duplicate != null) { + return List.of(launcher_duplicate); + } + return super.getParentVersionIds(versionId); } @@ -145,4 +150,29 @@ public List getParentVersionIds(String versionId) { 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.substring(0, versionId.length() - LAUNCHER_SUFFIX.length()); + if (this.getVersionsAssumeLoaded().containsKey(potential_duplicate)) { + return potential_duplicate; + } + } + return null; + } + + @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 + && !GitCraftQuirks.omniarchiveLinearSpecials.contains(mcVersion.launcherFriendlyVersionName())) + // Exclude duplicate versions from launcher + || (this.getLauncherVersionDuplicate(mcVersion.launcherFriendlyVersionName()) != null); + } } From 20671cef68d81466654e7b51096c2eb91c42bc0d Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Mon, 29 Dec 2025 00:14:30 +0000 Subject: [PATCH 5/9] Imports --- .../manifest/omniarchive/OmniarchiveMetadataProvider.java | 3 +++ 1 file changed, 3 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 2a53ee15..43ea8819 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.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; public class OmniarchiveMetadataProvider extends MojangLauncherMetadataProvider { From 7efcd241d1dd16a0354e8bc0f9ef8ad50da8db07 Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Mon, 29 Dec 2025 00:19:31 +0000 Subject: [PATCH 6/9] Add Omniarchive version types --- .../github/winplay02/gitcraft/GitCraftQuirks.java | 6 ++++++ .../winplay02/gitcraft/types/OrderedVersion.java | 14 +++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) 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/types/OrderedVersion.java b/src/main/groovy/com/github/winplay02/gitcraft/types/OrderedVersion.java index 2193e50d..24b900fa 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/types/OrderedVersion.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/types/OrderedVersion.java @@ -113,13 +113,25 @@ public int javaVersion() { } public boolean isSnapshot() { - return Objects.equals(this.versionInfo().type(), "snapshot"); + return Objects.equals(this.versionInfo().type(), "snapshot") + // Special case for snapshots from Omniarchive manifest which are marked as "special" + || (this.isSpecial() && GitCraftQuirks.omniarchiveSpecialSnapshots.contains(this.versionInfo().id())); } public boolean isPending() { return Objects.equals(this.versionInfo().type(), "pending"); } + // Omniarchive + public boolean isSpecial() { + return Objects.equals(this.versionInfo().type(), "special"); + } + + // Omniarchive + public boolean isAprilFools() { + return Objects.equals(this.versionInfo().type(), "april-fools"); + } + public boolean isSnapshotOrPending() { return this.isSnapshot() || this.isPending(); } From 6374f9ea52921041b776f7837eb4431d4d8d75aa Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Mon, 29 Dec 2025 00:23:30 +0000 Subject: [PATCH 7/9] Mark april fools versions from Omniarchive as snapshots --- .../com/github/winplay02/gitcraft/types/OrderedVersion.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 24b900fa..9ad7bba4 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/types/OrderedVersion.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/types/OrderedVersion.java @@ -115,7 +115,9 @@ public int javaVersion() { public boolean isSnapshot() { return Objects.equals(this.versionInfo().type(), "snapshot") // Special case for snapshots from Omniarchive manifest which are marked as "special" - || (this.isSpecial() && GitCraftQuirks.omniarchiveSpecialSnapshots.contains(this.versionInfo().id())); + || (this.isSpecial() && GitCraftQuirks.omniarchiveSpecialSnapshots.contains(this.versionInfo().id())) + // Mark april fools versions from Omniarchive as snapshots + || this.isAprilFools(); } public boolean isPending() { From fa336c6bf216a7867f22b98dfa191059d7372310 Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Mon, 29 Dec 2025 00:26:48 +0000 Subject: [PATCH 8/9] Fix semver for 2.0-preview --- .../manifest/omniarchive/OmniarchiveMetadataProvider.java | 4 ++-- .../manifest/vanilla/MojangLauncherMetadataProvider.java | 2 ++ 2 files changed, 4 insertions(+), 2 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 43ea8819..b3f68501 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 @@ -126,14 +126,14 @@ public List getParentVersionIds(String versionId) { case "24w14potato-1104" -> { return List.of("24w14potato-0838"); } - //Beta + // Beta case "b1.3-demo" -> { return List.of("b1.3_01"); } case "b1.2_02-dev" -> { return List.of("b1.2_02"); } - //Classic + // Classic case "c0.30-c-1900-renew" -> { return List.of("c0.30-c-1900"); } 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 1f9106e9..67b1bfb7 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 @@ -196,6 +196,8 @@ protected boolean isExistingVersionMetadataValid(MojangLauncherManifest.VersionE // Version Override private static final Map minecraftVersionSemVerOverride = Map.of( + // 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 b2852eabb5aed9f91ed64abd5897fd2d39de34c5 Mon Sep 17 00:00:00 2001 From: 0x189D7997 <199489335+0x189D7997@users.noreply.github.com> Date: Mon, 29 Dec 2025 02:42:39 +0000 Subject: [PATCH 9/9] Spacing and fix oopsie [no ci] --- .../omniarchive/OmniarchiveMetadataProvider.java | 2 +- .../winplay02/gitcraft/types/OrderedVersion.java | 11 ++++++----- 2 files changed, 7 insertions(+), 6 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 578dacc5..2bc18d88 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 @@ -98,7 +98,7 @@ public List getParentVersionIds(String versionId) { case "1.19-exp1" -> { return List.of("1.18.1"); } - // Unobfuscated + // Unobfuscated case "25w45a-unobf" -> { return List.of("25w44a"); } 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 41b4e48b..a57bf831 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/types/OrderedVersion.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/types/OrderedVersion.java @@ -117,8 +117,8 @@ public int javaVersion() { public boolean isSnapshot() { return Objects.equals(this.versionInfo().type(), "snapshot") - // Special case required because the manifest for experimental unobfuscated versions - // does not specify their snapshot status and always uses 'unobfuscated' as version type + // Special case required because the manifest for experimental unobfuscated versions + // does not specify their snapshot status and always uses 'unobfuscated' as version type || (this.isUnobfuscated() && UNOBFUSCATED_SNAPSHOT_PATTERN.matcher(this.versionInfo().id()).matches()) // Another special case for snapshots from Omniarchive manifest which are marked as "special" || (this.isSpecial() && GitCraftQuirks.omniarchiveSpecialSnapshots.contains(this.versionInfo().id())) @@ -130,15 +130,15 @@ public boolean isPending() { return Objects.equals(this.versionInfo().type(), "pending"); } - // Mojang and Skyrising + // Mojang and Skyrising /** * This method is specifically for checking if this is an experimental "unobfuscated" version. * To determine whether this version has no obfuscation use {@link OrderedVersion#isNotObfuscated()}. */ public boolean isUnobfuscated() { return Objects.equals(this.versionInfo().type(), "unobfuscated") - // special case for omniarchive manifest - || (this.isSpecial() && this.versionInfo().id().endsWith("-unobf")); + // special case for omniarchive manifest + || (this.isSpecial() && this.versionInfo().id().endsWith("-unobf")); } // Omniarchive @@ -149,6 +149,7 @@ public boolean isSpecial() { // Omniarchive public boolean isAprilFools() { return Objects.equals(this.versionInfo().type(), "april-fools"); + } public boolean isSnapshotOrPending() { return this.isSnapshot() || this.isPending();