using System; namespace PCL.Core.Minecraft; /// /// 用于解析 Maven 包 ID 为 Uri 或 Path /// /// public class MavenArtifact(string mavenId) { /// /// 将 Maven 包 ID 转换为 Uri 或 Path /// /// /// public string Resolve(string uriOrPath) { return $"{uriOrPath.TrimEnd('/')}{_GetMavenPath(mavenId)}"; } /// /// 解析 Maven 包 ID /// /// 包 ID /// Maven 包相对路径 (以 / 开头) /// 给定的 Maven 包 ID 长度过长或过短 private static string _GetMavenPath(string packageId) { var packageIds = packageId.Split(":"); switch (packageIds.Length) { case 3: return $"/{packageIds[0].Replace(".","/")}/{packageIds[1]}/{packageIds[1]}-{packageIds[2]}.jar"; case 4: if (_IsCommonPackaging(packageIds[2])) { return $"/{packageIds[0].Replace(".","/")}/{packageIds[1]}/{packageIds[1]}-{packageIds[3]}.{packageIds[2]}"; } return $"/{packageIds[0].Replace(".","/")}/{packageId[1]}/{packageIds[1]}-{packageIds[2]}-{packageIds[3]}.jar"; case 5: return $"{packageIds[0].Replace(".","/")}/{packageIds[1]}/{packageIds[1]}-{packageIds[3]}-{packageId[4]}.{packageId[2]}"; default: throw new FormatException($"Invalid maven package id: Length is {packageIds.Length}"); } } /// /// 用于检查是否是 Packaging /// private static bool _IsCommonPackaging(string name) { return name == "jar" || name == "zip" || name == "pom"; } }