diff --git a/src/main/groovy/com/github/winplay02/gitcraft/config/ApplicationConfiguration.java b/src/main/groovy/com/github/winplay02/gitcraft/config/ApplicationConfiguration.java index 8a3fae4d..ded692f7 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/config/ApplicationConfiguration.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/config/ApplicationConfiguration.java @@ -170,6 +170,9 @@ public boolean isAnyVersionExcluded() { } public Optional getMappingsForMinecraftVersion(OrderedVersion mcVersion) { + if (mcVersion.isUnobfuscated()) { + return Optional.of(MappingFlavour.IDENTITY_UNMAPPED); + } if (this.usedMapping().exists(mcVersion)) { return Optional.of(this.usedMapping()); } 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..ba4ef47a 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 @@ -140,6 +140,51 @@ public MojangLauncherMetadataProvider() { "24w14potato_original", "https://maven.fabricmc.net/net/minecraft/24w14potato_original.json", "4e54c25e6eafdf0a2f1f6e86fb1b8c1d239dd8d5"); + // support unobfuscated versions + this.addMetadataSource( + "25w45a_unobfuscated", + "https://piston-data.mojang.com/v1/objects/de334d80d9ddc5abb94c611b8ad10f9125c4c421/25w45a_unobfuscated.zip", + "de334d80d9ddc5abb94c611b8ad10f9125c4c421"); + this.addMetadataSource( + "25w46a_unobfuscated", + "https://piston-data.mojang.com/v1/objects/f9c5e4f9c1469296299635b498438e94d312f0c6/25w46a_unobfuscated.zip", + "f9c5e4f9c1469296299635b498438e94d312f0c6"); + this.addMetadataSource( + "1.21.11-pre1_unobfuscated", + "https://piston-data.mojang.com/v1/objects/f98a0c053a8246cce12f8f29f2ba4ce00872fd53/1_21_11-pre1_unobfuscated.zip", + "f98a0c053a8246cce12f8f29f2ba4ce00872fd53"); + this.addMetadataSource( + "1.21.11-pre2_unobfuscated", + "https://piston-data.mojang.com/v1/objects/528731e05b7be26c90fedf8f2ef6470abb0d1994/1_21_11-pre2_unobfuscated.zip", + "528731e05b7be26c90fedf8f2ef6470abb0d1994"); + this.addMetadataSource( + "1.21.11-pre3_unobfuscated", + "https://piston-data.mojang.com/v1/objects/7717a481468cc33d2414d82ee9c0450f56264db0/1_21_11-pre3_unobfuscated.zip", + "7717a481468cc33d2414d82ee9c0450f56264db0"); + this.addMetadataSource( + "1.21.11-pre4_unobfuscated", + "https://piston-data.mojang.com/v1/objects/834666571f1e1374923b73f4baec4203d44e9c0d/1_21_11-pre4_unobfuscated.zip", + "834666571f1e1374923b73f4baec4203d44e9c0d"); + this.addMetadataSource( + "1.21.11-pre5_unobfuscated", + "https://piston-data.mojang.com/v1/objects/931df659128f913ce356d6036c318c5d9a039e85/1_21_11-pre5_unobfuscated.zip", + "931df659128f913ce356d6036c318c5d9a039e85"); + this.addMetadataSource( + "1.21.11-rc1_unobfuscated", + "https://piston-data.mojang.com/v1/objects/38712002b9d02061e662b69c44753a47d24da516/1_21_11-rc1_unobfuscated.zip", + "38712002b9d02061e662b69c44753a47d24da516"); + this.addMetadataSource( + "1.21.11-rc2_unobfuscated", + "https://piston-data.mojang.com/v1/objects/fb70de3ae3e19825622b7687d2fd783d78c4b05f/1_21_11-rc2_unobfuscated.zip", + "fb70de3ae3e19825622b7687d2fd783d78c4b05f"); + this.addMetadataSource( + "1.21.11-rc3_unobfuscated", + "https://piston-data.mojang.com/v1/objects/7abe399a1b3c07754c5dc3ec4e5c6f50ee03c10e/1_21_11-rc3_unobfuscated.zip", + "7abe399a1b3c07754c5dc3ec4e5c6f50ee03c10e"); + this.addMetadataSource( + "1.21.11_unobfuscated", + "https://piston-data.mojang.com/v1/objects/82332dfb17146de34cb7a36d2b910e3b2009191a/1_21_11_unobfuscated.zip", + "82332dfb17146de34cb7a36d2b910e3b2009191a"); } protected MojangLauncherMetadataProvider(String manifestUrl) { @@ -247,6 +292,12 @@ private Path clientJarArtifactParentPath(VersionInfo versionMeta) { } private String fixupSemver(String proposedSemVer) { + if (proposedSemVer.equals("1.21.11+unobfuscated")) { // support unobfuscated versions (release) + return proposedSemVer.replace("+unobfuscated", "-unobfuscated"); + } + if (proposedSemVer.endsWith("+unobfuscated")) { // support unobfuscated versions (snapshot) + return proposedSemVer.replace("+unobfuscated", ".unobfuscated"); + } if (proposedSemVer.contains("-Experimental")) { return proposedSemVer.replace("-Experimental", "-alpha.0.0.Experimental"); } @@ -365,13 +416,56 @@ protected List getParentVersionIds(String versionId) { case "1.9.2" -> { return List.of("1.9.1"); } + // support unobfuscated versions + case "25w45a_unobfuscated" -> { + return List.of("25w44a"); + } + case "25w46a_unobfuscated" -> { + return List.of("25w45a_unobfuscated"); + } + case "1.21.11-pre1_unobfuscated" -> { + return List.of("25w46a_unobfuscated"); + } + case "1.21.11-pre2_unobfuscated" -> { + return List.of("1.21.11-pre1_unobfuscated"); + } + case "1.21.11-pre3_unobfuscated" -> { + return List.of("1.21.11-pre2_unobfuscated"); + } + case "1.21.11-pre4_unobfuscated" -> { + return List.of("1.21.11-pre3_unobfuscated"); + } + case "1.21.11-pre5_unobfuscated" -> { + return List.of("1.21.11-pre4_unobfuscated"); + } + case "1.21.11-rc1_unobfuscated" -> { + return List.of("1.21.11-pre5_unobfuscated"); + } + case "1.21.11-rc2_unobfuscated" -> { + return List.of("1.21.11-rc1_unobfuscated"); + } + case "1.21.11-rc3_unobfuscated" -> { + return List.of("1.21.11-rc2_unobfuscated"); + } + case "1.21.11_unobfuscated" -> { + return List.of("1.21.10", "1.21.11-rc3_unobfuscated"); + } + case "1.21.11-rc3" -> { + return List.of("1.21.11-rc2"); + } + case "1.21.11" -> { + return List.of("1.21.10", "1.21.11-rc3"); + } + case "26.1-snapshot-1" -> { + return List.of("1.21.11_unobfuscated"); + } default -> { return null; } } } - 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+)?(-(snapshot-|pre|rc)\\d+|_[a-z_\\-]+snapshot-\\d+| Pre-Release \\d+)?$)"); @Override public boolean shouldExcludeFromMainBranch(OrderedVersion mcVersion) { diff --git a/src/main/groovy/com/github/winplay02/gitcraft/mappings/MojangMappings.java b/src/main/groovy/com/github/winplay02/gitcraft/mappings/MojangMappings.java index f27bd825..3c3fdfa5 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/mappings/MojangMappings.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/mappings/MojangMappings.java @@ -43,7 +43,7 @@ public boolean needsPackageFixingForLaunch() { @Override public boolean doMappingsExist(OrderedVersion mcVersion) { - return mcVersion.hasClientMojMaps() || mcVersion.hasServerMojMaps(); + return mcVersion.isUnobfuscated() || mcVersion.hasClientMojMaps() || mcVersion.hasServerMojMaps(); } @Override 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..875594cd 100644 --- a/src/main/groovy/com/github/winplay02/gitcraft/types/OrderedVersion.java +++ b/src/main/groovy/com/github/winplay02/gitcraft/types/OrderedVersion.java @@ -112,6 +112,20 @@ public int javaVersion() { return this.versionInfo().javaVersion() != null ? this.versionInfo().javaVersion().majorVersion() : 8; } + public boolean isUnobfuscated() { + if (Objects.equals(this.versionInfo().type(), "unobfuscated")) { + return true; + } + try { + if (SemanticVersion.parse(this.semanticVersion()).getVersionComponent(0) >= 26) { + return true; + } + } catch (VersionParsingException e) { + MiscHelper.panicBecause(e, "Could not parse version %s (%s) as semantic version", launcherFriendlyVersionName(), semanticVersion()); + } + return false; + } + public boolean isSnapshot() { return Objects.equals(this.versionInfo().type(), "snapshot"); }