@@ -26,7 +26,8 @@ func DownloadLibraries(versionInfo core.VersionInfo, librariesDir string, maxCon
2626 continue
2727 }
2828
29- url := lib .Downloads .Artifact .URL
29+ originalURL := lib .Downloads .Artifact .URL
30+ url := originalURL
3031 if downloadapi == "bmclapi" {
3132 url = strings .Replace (url , "https://maven.minecraftforge.net/" , "https://bmclapi2.bangbang93.com/maven/" , 1 )
3233 url = strings .Replace (url , "https://maven.fabricmc.net/" , "https://bmclapi2.bangbang93.com/maven/" , 1 )
@@ -41,38 +42,45 @@ func DownloadLibraries(versionInfo core.VersionInfo, librariesDir string, maxCon
4142 filePath := filepath .Join (librariesDir , lib .Downloads .Artifact .Path )
4243
4344 wg .Add (1 )
44- go func (lib core.Library , url , filePath string ) {
45+ go func (lib core.Library , url , originalURL , filePath string ) {
4546 defer wg .Done ()
46- sem <- struct {}{} // 获取令牌
47+ sem <- struct {}{}
48+ defer func () { <- sem }()
49+
4750 // 校验 SHA1
4851 if _ , err := os .Stat (filePath ); err == nil {
4952 fileSHA1 , err := computeSHA1 (filePath )
5053 if err == nil && fileSHA1 == lib .Downloads .Artifact .SHA1 {
5154 fmt .Printf ("已存在且校验通过: %s\n " , filePath )
52- <- sem // 释放令牌
5355 return
5456 } else {
5557 fmt .Printf ("文件 %s 校验失败 (或无法校验),重新下载...\n " , filePath )
5658 os .Remove (filePath )
5759 }
5860 }
61+
5962 if err := os .MkdirAll (filepath .Dir (filePath ), os .ModePerm ); err != nil {
6063 fmt .Printf ("无法创建目录: %v\n " , err )
64+ return
6165 }
62- fmt .Println ("正在下载:" , url )
63- if err := core .DownloadFile (url , filePath ); err != nil {
64- fmt .Printf ("下载失败 %s (%s): %v\n " , lib .Name , url , err )
66+ err := core .DownloadFile (url , filePath )
67+ if err != nil {
68+ fmt .Printf ("下载失败 %s: %v\n " , lib .Name , err )
69+ fmt .Println ("尝试使用原始链接下载:" , originalURL )
70+ if err := core .DownloadFile (originalURL , filePath ); err != nil {
71+ fmt .Printf ("原始链接下载也失败 %s: %v\n " , lib .Name , err )
72+ } else {
73+ fmt .Println ("使用原始链接下载完成:" , filePath )
74+ }
6575 } else {
66- fmt .Println ("下载完成:" , filePath )
76+ fmt .Println ("使用 BMCLAPI 下载完成:" , filePath )
6777 }
68- <- sem // 释放令牌
69- }(lib , url , filePath )
78+ }(lib , url , originalURL , filePath )
7079 }
7180 wg .Wait ()
7281 return nil
7382}
7483
75- // 计算文件的 SHA1 哈希值
7684func computeSHA1 (filePath string ) (string , error ) {
7785 file , err := os .Open (filePath )
7886 if err != nil {
0 commit comments