{ lib, fetchurl }:

with builtins;

{ project, id, filename, ... }@args:

let
  # I think this is supposed to be some weak automation
  # protection. This split "id" is simply part of the download URL.
  #
  # Note that if it's zero-prefixed we need to remove the zeroes. It's
  # really an odd one...
  a = head (match "0*([[:digit:]]+)" (substring 0 4 (toString id)));
  b = head (match "0*([[:digit:]]+)" (substring 4 7 (toString id)));

  url = "https://media.forgecdn.net/files/${a}/${b}/${filename}";
  otherArgs = removeAttrs args [ "project" "project_id" "id" "filename" ];

in fetchurl (otherArgs // {
  inherit url;
  # Rename files to avoid names incompatible with the nix store
  name = "${project}.jar";
})