Downloads
Fetching the per-version mapping artifacts RemapCache provisions from: where they live, how to retry a transient failure, and how to verify what came back. Nothing here knows about the cache layout or the masking-loader hop — it hands back files.
Runs on the game loader, like its caller: MC's bundled Gson and the JDK HttpClient both live there.
Properties
The REST API, NOT /stash/projects/.../raw/...: the raw path sits behind Cloudflare's interactive challenge and answers a plain GET with an HTML page. REST is not challenged.
BuildTools' own per-version lookup. Required, not a convenience: BuildData REPLACES mappings/ each version rather than accumulating, so a version's csrg exists only at the commit refs.BuildData pins — master carries none of them. The commit is also the integrity gate, since BuildData publishes no hash.
Functions
Map a retryable HTTP status (429 / 5xx) to an IOException so withRetry retries it; leave 4xx permanent.
Mojang manifest -> the version's JSON -> client_mappings url.
SpigotMC BuildData's per-version CLASS mappings (obf -> spigot), the axis Mojang's proguard cannot supply: spigot's class names are spigot's own invention, derivable from no Mojang artifact.
The MCP here is Mod Coder Pack (forge's obf->srg mappings), not this mod's Model Context Protocol.
Retry a synchronous, idempotent GET on TRANSIENT failures only: IOException (connection reset/abort/ timeout) and 429/5xx. 4xx is permanent → not retried. 3 attempts, exponential backoff. The JDK HttpClient's own retry is connection-establishment-only.