|
8 | 8 | using System.Text.Json; |
9 | 9 | using System.Threading.Tasks; |
10 | 10 | using CurseForge.APIClient; |
| 11 | +using Spectre.Console; |
11 | 12 |
|
12 | 13 | namespace CurseForge.Minecraft.Serverpack.Launcher |
13 | 14 | { |
@@ -122,7 +123,22 @@ private static async Task DownloadLoaderDependencies<T>(HttpClient _client, stri |
122 | 123 | case ForgeModLoaderInfo forge: |
123 | 124 | var versionString = $"{info.NonMapped["minecraftVersion"]}-{info.NonMapped["forgeVersion"]}"; |
124 | 125 | var forgeInstallerMaven = new MavenString($"net.minecraftforge.forge:{versionString}"); |
125 | | - downloadUrls.Add(new(forgeInstallerMaven, installPath, new Uri($"https://maven.minecraftforge.net/net/minecraftforge/forge/{versionString}/forge-{versionString}-installer.jar"))); |
| 126 | + |
| 127 | + var forgeDlUrl = $"https://maven.minecraftforge.net/net/minecraftforge/forge/{versionString}/forge-{versionString}-installer.jar"; |
| 128 | + |
| 129 | + if (!await CheckIfEndpointExists(_client, forgeDlUrl)) |
| 130 | + { |
| 131 | + versionString = $"{info.NonMapped["minecraftVersion"]}-{info.NonMapped["forgeVersion"]}-{info.NonMapped["minecraftVersion"]}"; |
| 132 | + forgeDlUrl = $"https://maven.minecraftforge.net/net/minecraftforge/forge/{versionString}/forge-{versionString}-installer.jar"; |
| 133 | + } |
| 134 | + |
| 135 | + if (!await CheckIfEndpointExists(_client, forgeDlUrl)) |
| 136 | + { |
| 137 | + AnsiConsole.WriteLine($"[red]Could not find an installer for the version of Forge that we need ({info.NonMapped["forgeVersion"]}) for Minecraft {info.NonMapped["minecraftVersion"]}[/]"); |
| 138 | + throw new Exception("Missing Forge installer"); |
| 139 | + } |
| 140 | + |
| 141 | + downloadUrls.Add(new(forgeInstallerMaven, installPath, new Uri(forgeDlUrl))); |
126 | 142 | break; |
127 | 143 | } |
128 | 144 |
|
@@ -152,5 +168,11 @@ private static async Task DownloadLoaderDependencies<T>(HttpClient _client, stri |
152 | 168 |
|
153 | 169 | Console.WriteLine("Downloaded all library assets"); |
154 | 170 | } |
| 171 | + |
| 172 | + private static async Task<bool> CheckIfEndpointExists(HttpClient _client, string url) |
| 173 | + { |
| 174 | + var result = await _client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead); |
| 175 | + return result.IsSuccessStatusCode; |
| 176 | + } |
155 | 177 | } |
156 | 178 | } |
0 commit comments