voor-kia: Add mod update script

pull/50/head
Tristan Daniël Maat 2021-07-25 22:21:29 +01:00
parent 7c24369cb9
commit d94145bf34
Signed by: tlater
GPG Key ID: 49670FD774E43268
4 changed files with 425 additions and 174 deletions

View File

@ -90,7 +90,22 @@
in {
devShell = with pkgs;
mkShell {
buildInputs = [ nixfmt git-lfs ];
buildInputs = [
nixfmt
git-lfs
# For the minecraft mod update script
(python3.withPackages (pypkgs:
with pypkgs; [
requests
ipython
python-language-server
pyls-black
pyls-isort
pyls-mypy
]))
];
shellHook = ''
export QEMU_OPTS="-m 3941 -smp 2 -curses"
export QEMU_NET_OPTS="hostfwd=::3022-:2222,hostfwd=::3080-:80,hostfwd=::3443-:443,hostfwd=::3021-:2221,hostfwd=::25565-:25565"

View File

@ -10,11 +10,11 @@ let
#
# 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 id));
b = head (match "0*([[:digit:]]+)" (substring 4 7 id));
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" "id" "filename" ];
otherArgs = removeAttrs args [ "project" "project_id" "id" "filename" ];
in fetchurl (otherArgs // {
inherit url;

View File

@ -1,512 +1,597 @@
[
{
"project": "ai-improvements",
"id": "3031978",
"id": 3031978,
"filename": "AI-Improvements-1.16.2-0.3.0.jar",
"sha256": "47526292ea2f11dd18a8da8863b40ba81a93601f03aa4abcc742ac62ea599c69"
"sha256": "47526292ea2f11dd18a8da8863b40ba81a93601f03aa4abcc742ac62ea599c69",
"project_id": 233019
},
{
"project": "alexs-mobs",
"id": "3230693",
"id": 3230693,
"filename": "alexsmobs-1.7.1.jar",
"sha256": "e8066d512f53b80a796e5b83db27246aa5fe4b055929475e7efe5ff6dd090f42"
"sha256": "e8066d512f53b80a796e5b83db27246aa5fe4b055929475e7efe5ff6dd090f42",
"project_id": 426558
},
{
"project": "apotheosis",
"id": "3095843",
"id": 3095843,
"filename": "Apotheosis-1.16.3-4.4.1.jar",
"sha256": "de5ed7501bc17196cca7bddabace3464cbdbf8afba63385d260804ad013ba836"
"sha256": "de5ed7501bc17196cca7bddabace3464cbdbf8afba63385d260804ad013ba836",
"project_id": 313970
},
{
"project": "appleskin",
"id": "3035787",
"id": 3035787,
"filename": "AppleSkin-mc1.16.2-forge-1.0.14.jar",
"sha256": "e0d39f6b138e853d6171bd51fa158545d68cab5e718a01feb919d37964e5eb4f"
"sha256": "e0d39f6b138e853d6171bd51fa158545d68cab5e718a01feb919d37964e5eb4f",
"project_id": 248787
},
{
"project": "architectury-forge",
"id": "3208686",
"id": 3208686,
"filename": "architectury-1.7.117-forge.jar",
"sha256": "6cdbdb32b958ca5cec46c92eaa3c5d2c33404b20f5080bc7c612ba7e3fa4bf57"
"sha256": "6cdbdb32b958ca5cec46c92eaa3c5d2c33404b20f5080bc7c612ba7e3fa4bf57",
"project_id": 419699
},
{
"project": "artifacts",
"id": "3208854",
"id": 3208854,
"filename": "Artifacts-1.16.5-2.8.1.jar",
"sha256": "6c74163a75a2303b3fce04c098efad6de0c345059e279a7e5858a1200779d423"
"sha256": "6c74163a75a2303b3fce04c098efad6de0c345059e279a7e5858a1200779d423",
"project_id": 312353
},
{
"project": "attributefix",
"id": "3170246",
"id": 3170246,
"filename": "AttributeFix-1.16.5-10.0.1.jar",
"sha256": "8492d282ca55c1e01fad6fd4ae8bd66e418128ccf9044a150af7b4526e02d906"
"sha256": "8492d282ca55c1e01fad6fd4ae8bd66e418128ccf9044a150af7b4526e02d906",
"project_id": 280510
},
{
"project": "autoreglib",
"id": "3128555",
"id": 3128555,
"filename": "AutoRegLib-1.6-47.jar",
"sha256": "bacb22ec651ca70462e0128d6e6e800cee69b125cd078b9cf6d3a45de3e403fc"
"sha256": "bacb22ec651ca70462e0128d6e6e800cee69b125cd078b9cf6d3a45de3e403fc",
"project_id": 250363
},
{
"project": "bedspreads",
"id": "3118466",
"id": 3118466,
"filename": "bedspreads-forge-1.16.4-5.1.0.1.jar",
"sha256": "7844407085109d10ba87faf21816fb89fc411ff82ea7f0b761e2bd4f987987d2"
"sha256": "7844407085109d10ba87faf21816fb89fc411ff82ea7f0b761e2bd4f987987d2",
"project_id": 308653
},
{
"project": "better-burning",
"id": "3181436",
"id": 3181436,
"filename": "BetterBurning-1.16.5-6.0.2.jar",
"sha256": "e81297506876a623e9e770222d6c053eb33ac5451a3905454c2befd69115ae19"
"sha256": "e81297506876a623e9e770222d6c053eb33ac5451a3905454c2befd69115ae19",
"project_id": 353434
},
{
"project": "yungs-better-caves",
"id": "3170047",
"id": 3170047,
"filename": "BetterCaves-Forge-1.16.4-1.1.1.jar",
"sha256": "f5bc8ba0f46acab08e79f95e8ff980b2629fd678ea25e9068d2d96823c1ba983"
"sha256": "f5bc8ba0f46acab08e79f95e8ff980b2629fd678ea25e9068d2d96823c1ba983",
"project_id": 340583
},
{
"project": "yungs-better-mineshafts-forge",
"id": "3175671",
"id": 3175671,
"filename": "BetterMineshafts-Forge-1.16.4-2.0.1.jar",
"sha256": "a640f45962f8a1abc60f83c8632e558b541b6ba0238d6297912814dec2d0bdc7"
"sha256": "a640f45962f8a1abc60f83c8632e558b541b6ba0238d6297912814dec2d0bdc7",
"project_id": 389665
},
{
"project": "yungs-better-portals",
"id": "3221299",
"id": 3221299,
"filename": "BetterPortals-1.16.4-0.3.1.jar",
"sha256": "a86ddf3cbc066d15562e4136717d061861dfb77a2da7b4f112a2b290073c47d9"
"sha256": "a86ddf3cbc066d15562e4136717d061861dfb77a2da7b4f112a2b290073c47d9",
"project_id": 443723
},
{
"project": "bookshelf",
"id": "3170154",
"id": 3170154,
"filename": "Bookshelf-1.16.5-10.0.1.jar",
"sha256": "33bade36884a25cbf3bac3bdd2e762a2c5fcc1840f613ab5aaaf57642ffc0c68"
"sha256": "33bade36884a25cbf3bac3bdd2e762a2c5fcc1840f613ab5aaaf57642ffc0c68",
"project_id": 228525
},
{
"project": "bad-wither-no-cookie-reloaded",
"id": "3101531",
"id": 3101531,
"filename": "bwncr-1.16.4-3.9.16.jar",
"sha256": "91c4df24466b958d36d41ce886e5d8b0839a07b73d58248a0dcb84a67279b81f"
"sha256": "91c4df24466b958d36d41ce886e5d8b0839a07b73d58248a0dcb84a67279b81f",
"project_id": 261251
},
{
"project": "oh-the-biomes-youll-go",
"id": "3197729",
"id": 3197729,
"filename": "byg-1.1.10.jar",
"sha256": "28db347d22ea27167cdbf107180b01b53003d98739189a66ef6c1e4f21e4b436"
"sha256": "28db347d22ea27167cdbf107180b01b53003d98739189a66ef6c1e4f21e4b436",
"project_id": 247560
},
{
"project": "callable-horses",
"id": "3090832",
"id": 3090832,
"filename": "callablehorses-1.16.3-1.2.1.4.jar",
"sha256": "639778fd58667aa560d333a2490352e34c1c32e897d9f8204e52df305ca5e879"
"sha256": "639778fd58667aa560d333a2490352e34c1c32e897d9f8204e52df305ca5e879",
"project_id": 331746
},
{
"project": "citadel",
"id": "3198842",
"id": 3198842,
"filename": "citadel-1.6.1.jar",
"sha256": "e13434097199a926a565a109b5c7b82b5e0308efa88dbc2a4d030d78d8f1ac37"
"sha256": "e13434097199a926a565a109b5c7b82b5e0308efa88dbc2a4d030d78d8f1ac37",
"project_id": 331936
},
{
"project": "cloth-config-forge",
"id": "3203817",
"id": 3203817,
"filename": "cloth-config-4.10.13-forge.jar",
"sha256": "d47bf12ed961fac529064254931308d1ca20d08f411718563827141175daf32b"
"sha256": "d47bf12ed961fac529064254931308d1ca20d08f411718563827141175daf32b",
"project_id": 348521
},
{
"project": "clumps",
"id": "3205705",
"id": 3205705,
"filename": "Clumps-6.0.0.17.jar",
"sha256": "a9535cf8df267bb2e2ffb46a278aa67f4b6e447d0bc1140205f98257dc108d58"
"sha256": "a9535cf8df267bb2e2ffb46a278aa67f4b6e447d0bc1140205f98257dc108d58",
"project_id": 256717
},
{
"project": "codechicken-lib-1-8",
"id": "3175750",
"id": 3175750,
"filename": "CodeChickenLib-1.16.4-3.5.1.408-universal.jar",
"sha256": "6b88e5f13ceb642734d3f3168da706a80ae2a2d538ba8dd958eb73b3d8911ab3"
"sha256": "6b88e5f13ceb642734d3f3168da706a80ae2a2d538ba8dd958eb73b3d8911ab3",
"project_id": 242818
},
{
"project": "cooking-for-blockheads",
"id": "3098223",
"id": 3098223,
"filename": "CookingForBlockheads_1.16.3-9.2.2.jar",
"sha256": "5b15a1e4bac72160ed1ef1042c2cef5eeca5d8dbfecb6620511caa1cf644adaa"
"sha256": "5b15a1e4bac72160ed1ef1042c2cef5eeca5d8dbfecb6620511caa1cf644adaa",
"project_id": 231484
},
{
"project": "cosmetic-armor-reworked",
"id": "3205904",
"id": 3205904,
"filename": "CosmeticArmorReworked-1.16.5-v1b.jar",
"sha256": "6535b9077d0b64c2cc3392c145f558492c47280eb4a38672c6b6a4897fee7ec7"
"sha256": "6535b9077d0b64c2cc3392c145f558492c47280eb4a38672c6b6a4897fee7ec7",
"project_id": 237307
},
{
"project": "crafting-station",
"id": "3084325",
"id": 3084325,
"filename": "craftingstation-4.1.1.jar",
"sha256": "a3516650a1c5e76b47b9efd69a4cfa9cda4f85250bf217fa7186f74ef375a7e4"
"sha256": "a3516650a1c5e76b47b9efd69a4cfa9cda4f85250bf217fa7186f74ef375a7e4",
"project_id": 318551
},
{
"project": "create",
"id": "3167531",
"id": 3167531,
"filename": "create-mc1.16.3_v0.3e.jar",
"sha256": "8c24ee59c3d1c74fb2047564d0aa6935862b2b85fb478dadf19798f7cc08944f"
"sha256": "8c24ee59c3d1c74fb2047564d0aa6935862b2b85fb478dadf19798f7cc08944f",
"project_id": 328085
},
{
"project": "creativecore",
"id": "3128357",
"id": 3128357,
"filename": "CreativeCore_v2.0.10_mc1.16.4.jar",
"sha256": "85210df1f6abe5befc7afbb9150e5639f885c229ba3018bd6f40fd142468f377"
"sha256": "85210df1f6abe5befc7afbb9150e5639f885c229ba3018bd6f40fd142468f377",
"project_id": 257814
},
{
"project": "curios",
"id": "3186427",
"id": 3186427,
"filename": "curios-forge-1.16.5-4.0.4.0.jar",
"sha256": "4d6d63c432e24d295a410ec9eb24054123094db4913e76f564adfa188cf59d29"
"sha256": "4d6d63c432e24d295a410ec9eb24054123094db4913e76f564adfa188cf59d29",
"project_id": 309927
},
{
"project": "dank-storage",
"id": "3161863",
"id": 3161863,
"filename": "dankstorage-3.14.jar",
"sha256": "2ff74a22f0a90f9daed9a0632133b14868ad47500f378326f2a0faedc6029684"
"sha256": "2ff74a22f0a90f9daed9a0632133b14868ad47500f378326f2a0faedc6029684",
"project_id": 335673
},
{
"project": "decorative-blocks",
"id": "3166283",
"id": 3166283,
"filename": "decorative_blocks-1.16.4-1.7.2.jar",
"sha256": "f12dbfe76e36cdec65b8a575fc671f0291323a0de5ff420ff196d16bd19e6f84"
"sha256": "f12dbfe76e36cdec65b8a575fc671f0291323a0de5ff420ff196d16bd19e6f84",
"project_id": 362528
},
{
"project": "doggy-talents",
"id": "3203941",
"id": 3203941,
"filename": "DoggyTalents-1.16.4-2.0.1.3.jar",
"sha256": "59d8c5f058ef329bf6363fa8d300da3e876c523f9cc6229e0524317207442489"
"sha256": "59d8c5f058ef329bf6363fa8d300da3e876c523f9cc6229e0524317207442489",
"project_id": 271050
},
{
"project": "easy-piglins",
"id": "3169792",
"id": 3169792,
"filename": "easy_piglins-1.16.5-1.0.0.jar",
"sha256": "b048630085695a5e8846cc2b8cc1bb6f1bcb59f0077ab63394a803c905df1006"
"sha256": "b048630085695a5e8846cc2b8cc1bb6f1bcb59f0077ab63394a803c905df1006",
"project_id": 419372
},
{
"project": "easy-villagers",
"id": "3171686",
"id": 3171686,
"filename": "easy_villagers-1.16.4-1.1.28.jar",
"sha256": "3b8eff14b2b83f5cfe178f03076fa37c49add5dc05836b3151c7077f65a96dff"
"sha256": "3b8eff14b2b83f5cfe178f03076fa37c49add5dc05836b3151c7077f65a96dff",
"project_id": 400514
},
{
"project": "enchantment-descriptions",
"id": "3191059",
"id": 3191059,
"filename": "EnchantmentDescriptions-1.16.5-7.0.2.jar",
"sha256": "890db07c51b07fb5921c8ae9e6352987c705625ca27f3d23bdfd313115a6a94b"
"sha256": "890db07c51b07fb5921c8ae9e6352987c705625ca27f3d23bdfd313115a6a94b",
"project_id": 250419
},
{
"project": "ender-storage-1-8",
"id": "3175751",
"id": 3175751,
"filename": "EnderStorage-1.16.4-2.7.1.166-universal.jar",
"sha256": "fbb861b85858f7a118a442d5577a53e5415c1f1b6ba7c4ade942d5512706f40d"
"sha256": "fbb861b85858f7a118a442d5577a53e5415c1f1b6ba7c4ade942d5512706f40d",
"project_id": 245174
},
{
"project": "extended-lights-mod",
"id": "3144281",
"id": 3144281,
"filename": "extlights-3.3.jar",
"sha256": "7f210f8e8bc451df301a6a2c22f81e434dd1835699444e5c0ed2bb2620847a6b"
"sha256": "7f210f8e8bc451df301a6a2c22f81e434dd1835699444e5c0ed2bb2620847a6b",
"project_id": 335051
},
{
"project": "extrastorage",
"id": "3179402",
"id": 3179402,
"filename": "ExtraStorage-1.16.4-1.3.1.jar",
"sha256": "30a78eb59482d393c7471a3b834e49e2dc6a70998be8ece9ba2c487abb5c92a5"
"sha256": "30a78eb59482d393c7471a3b834e49e2dc6a70998be8ece9ba2c487abb5c92a5",
"project_id": 410168
},
{
"project": "farming-for-blockheads",
"id": "3098206",
"id": 3098206,
"filename": "FarmingForBlockheads_1.16.3-7.2.1.jar",
"sha256": "2225906be3306bb1066b58ebb97b998ebb679ef7fc2dcab6be53129675c44867"
"sha256": "2225906be3306bb1066b58ebb97b998ebb679ef7fc2dcab6be53129675c44867",
"project_id": 261924
},
{
"project": "fast-leaf-decay",
"id": "3052146",
"id": 3052146,
"filename": "FastLeafDecay-v25.jar",
"sha256": "0abd12217bd7e83d5427a4aca6acec27241bb4a7272ef79958a692bd60fe1d86"
"sha256": "0abd12217bd7e83d5427a4aca6acec27241bb4a7272ef79958a692bd60fe1d86",
"project_id": 230976
},
{
"project": "fastworkbench",
"id": "3171218",
"id": 3171218,
"filename": "FastWorkbench-1.16.4-4.5.0.jar",
"sha256": "0f4dc32d33512193a3f53ef4e2432bce921ffc047590e1734d3763b8dbd0a547"
"sha256": "0f4dc32d33512193a3f53ef4e2432bce921ffc047590e1734d3763b8dbd0a547",
"project_id": 288885
},
{
"project": "fishing-real",
"id": "3074201",
"id": 3074201,
"filename": "fishingreal-1.16.3-1.0.0.jar",
"sha256": "1c2f868ee221e59407f6c8f1ec07fa7ccca49a819559dad818713a6778291fc5"
"sha256": "1c2f868ee221e59407f6c8f1ec07fa7ccca49a819559dad818713a6778291fc5",
"project_id": 348834
},
{
"project": "hardcore-revival",
"id": "3066098",
"id": 3066098,
"filename": "HardcoreRevival_1.16.3-5.2.0.jar",
"sha256": "c7d20cad7f9d5e9dd36252c3735568b8e7a9a214bc543356b8429b6748f5ae49"
"sha256": "c7d20cad7f9d5e9dd36252c3735568b8e7a9a214bc543356b8429b6748f5ae49",
"project_id": 274036
},
{
"project": "ice-and-fire-dragons",
"id": "3162719",
"id": 3162719,
"filename": "iceandfire-2.1.5-1.16.4.jar",
"sha256": "eb67d6808d9ae4d32b92d26a9a4561549e5e3fbeacf23ed614b19786c2172c76"
"sha256": "eb67d6808d9ae4d32b92d26a9a4561549e5e3fbeacf23ed614b19786c2172c76",
"project_id": 264231
},
{
"project": "ichunutil",
"id": "3062089",
"id": 3062089,
"filename": "iChunUtil-1.16.3-10.0.0.jar",
"sha256": "015b4cb31362e323ccdd84e3f865137bd7c32a8a1adcb9f9b77c4e6301a56a25"
"sha256": "015b4cb31362e323ccdd84e3f865137bd7c32a8a1adcb9f9b77c4e6301a56a25",
"project_id": 229060
},
{
"project": "iron-chests",
"id": "3105315",
"id": 3105315,
"filename": "ironchest-1.16.4-11.2.10.jar",
"sha256": "5208572a3f07647ca3cfed9f7414957acd0059b7f708d2518f4c73c98beae6be"
"sha256": "5208572a3f07647ca3cfed9f7414957acd0059b7f708d2518f4c73c98beae6be",
"project_id": 228756
},
{
"project": "iron-furnaces",
"id": "3152441",
"id": 3152441,
"filename": "ironfurnaces-1.16.4-2.5.6.jar",
"sha256": "042dcb6eca515f814b2093a600cca23a42fef71e4dbaf53b301369018ac5f288"
"sha256": "042dcb6eca515f814b2093a600cca23a42fef71e4dbaf53b301369018ac5f288",
"project_id": 237664
},
{
"project": "jei",
"id": "3192904",
"id": 3192904,
"filename": "jei-1.16.4-7.6.1.71.jar",
"sha256": "a4f1cc91214605b7d9b840a4a8ffd910c0eccc9db7f6ce82964bba9f3ca661e5"
"sha256": "a4f1cc91214605b7d9b840a4a8ffd910c0eccc9db7f6ce82964bba9f3ca661e5",
"project_id": 238222
},
{
"project": "jei-integration",
"id": "3202331",
"id": 3202331,
"filename": "jeiintegration_1.16.5-7.0.1.15.jar",
"sha256": "0b45fe2858a8e9f97bf10fb218975a48a7d228ca27d274194c4dfaa91534bdfd"
"sha256": "0b45fe2858a8e9f97bf10fb218975a48a7d228ca27d274194c4dfaa91534bdfd",
"project_id": 265917
},
{
"project": "just-enough-resources-jer",
"id": "3066754",
"id": 3066754,
"filename": "JustEnoughResources-1.16.3-0.12.0.100.jar",
"sha256": "d09fe055704075044e76e38c315ef410b8fc3587b1e24e500d540b57365ceb66"
"sha256": "d09fe055704075044e76e38c315ef410b8fc3587b1e24e500d540b57365ceb66",
"project_id": 240630
},
{
"project": "kiwi",
"id": "3103509",
"id": 3103509,
"filename": "Kiwi-1.16.3-3.4.1.jar",
"sha256": "8e03a2109cb60117f6020a8943a19dc354a2cf2e1b83a0523169fece4ef06757"
"sha256": "8e03a2109cb60117f6020a8943a19dc354a2cf2e1b83a0523169fece4ef06757",
"project_id": 303657
},
{
"project": "lollipop",
"id": "3209431",
"id": 3209431,
"filename": "Lollipop-1.16.4-3.2.6.jar",
"sha256": "5eb4c5c6947cfdcd26014a3209aff91653fe13044436dbfd0c310bcbf8abf701"
"sha256": "5eb4c5c6947cfdcd26014a3209aff91653fe13044436dbfd0c310bcbf8abf701",
"project_id": 347954
},
{
"project": "lotta-terracotta",
"id": "3186253",
"id": 3186253,
"filename": "lottaterracotta-1.16.5-1.3.1.jar",
"sha256": "8a5879733d8c35129c999d6524f0b7c1b49482076e1104c0c873f70267ea22d5"
"sha256": "8a5879733d8c35129c999d6524f0b7c1b49482076e1104c0c873f70267ea22d5",
"project_id": 351060
},
{
"project": "macaws-doors",
"id": "3182357",
"id": 3182357,
"filename": "mcw-doors-1.0.2-mc1.16.5.jar",
"sha256": "cea684ad9bf1fa75ba2685b3e521b2e1806f428681f7d929e3f937b161fb397e"
"sha256": "cea684ad9bf1fa75ba2685b3e521b2e1806f428681f7d929e3f937b161fb397e",
"project_id": 378646
},
{
"project": "macaws-furniture",
"id": "3182349",
"id": 3182349,
"filename": "mcw-furniture-2.0.1-mc1.16.5.jar",
"sha256": "7f81b95c128ce97f3c41e29a4e98618c591f96321b53b718b5c3b6b8d3cb619e"
"sha256": "7f81b95c128ce97f3c41e29a4e98618c591f96321b53b718b5c3b6b8d3cb619e",
"project_id": 359540
},
{
"project": "metal-barrels",
"id": "3055811",
"id": 3055811,
"filename": "metalbarrels-3.3a.jar",
"sha256": "9bec62579ec71be41a303519e3b7944df0f3ee23a5b03ac7c0d0b27fe7c66150"
"sha256": "9bec62579ec71be41a303519e3b7944df0f3ee23a5b03ac7c0d0b27fe7c66150",
"project_id": 324985
},
{
"project": "pams-harvestcraft-2-crops",
"id": "3076451",
"id": 3076451,
"filename": "pamhc2crops-1.16.3-1.0.1.jar",
"sha256": "d987b59e46c36c3461ee913729e9eb3d808e3e2c71499ef6e517c1b3f55ee093"
"sha256": "d987b59e46c36c3461ee913729e9eb3d808e3e2c71499ef6e517c1b3f55ee093",
"project_id": 361385
},
{
"project": "pams-harvestcraft-2-food-core",
"id": "3190867",
"id": 3190867,
"filename": "pamhc2foodcore-1.16.3-1.0.2.jar",
"sha256": "e4414d35013e746e5b06256a08dd957a814b17cebcb035899a84a3692d08b544"
"sha256": "e4414d35013e746e5b06256a08dd957a814b17cebcb035899a84a3692d08b544",
"project_id": 372534
},
{
"project": "pams-harvestcraft-2-food-extended",
"id": "3190664",
"id": 3190664,
"filename": "pamhc2foodextended-1.16.3-1.0.1.jar",
"sha256": "58a97f94f7087c2e66c9a6b2f33a328619bc544f46134597d3f612387b165668"
"sha256": "58a97f94f7087c2e66c9a6b2f33a328619bc544f46134597d3f612387b165668",
"project_id": 402231
},
{
"project": "pams-harvestcraft-2-trees",
"id": "3117043",
"id": 3117043,
"filename": "pamhc2trees-1.16.3-1.0.0.jar",
"sha256": "0b18c28cec6212d5256a9abaea13cbac502d329f70797d17a3523d8a662846ce"
"sha256": "0b18c28cec6212d5256a9abaea13cbac502d329f70797d17a3523d8a662846ce",
"project_id": 365460
},
{
"project": "passable-foliage",
"id": "3103676",
"id": 3103676,
"filename": "PassableFoliage-1.16.4-2.2.0.jar",
"sha256": "be727b1e5dc0412404af84145180b00222274c1f7d31f5bfed5bc716e6146eeb"
"sha256": "be727b1e5dc0412404af84145180b00222274c1f7d31f5bfed5bc716e6146eeb",
"project_id": 379887
},
{
"project": "performant",
"id": "3285916",
"id": 3285916,
"filename": "performant-1.16.2-5-3.54m.jar",
"sha256": "N8eUXJtIdbNRqZHLZ2gdj9HgpMYu7tAhMnG5Dw2dgqk="
"sha256": "N8eUXJtIdbNRqZHLZ2gdj9HgpMYu7tAhMnG5Dw2dgqk=",
"project_id": 354143
},
{
"project": "placebo",
"id": "3172794",
"id": 3172794,
"filename": "Placebo-1.16.4-4.4.1.jar",
"sha256": "c57663a0b37260ca0cfaa6a4fb710d58f35866f029e92412b2332587a27d8f5d"
"sha256": "c57663a0b37260ca0cfaa6a4fb710d58f35866f029e92412b2332587a27d8f5d",
"project_id": 283644
},
{
"project": "platter",
"id": "3115114",
"id": 3115114,
"filename": "Platter-1.16-1.0.0.jar",
"sha256": "6e4aee987ac4efa41a1b9cc26a4e4588c79a56bb200402b9fee71e43ab45a533"
"sha256": "6e4aee987ac4efa41a1b9cc26a4e4588c79a56bb200402b9fee71e43ab45a533",
"project_id": 381581
},
{
"project": "powah",
"id": "3209434",
"id": 3209434,
"filename": "Powah-1.16.4-2.3.12.jar",
"sha256": "83806e56f79cb01382a6f105ffee8bba131afe52b04909138452eaffd0f87d49"
"sha256": "83806e56f79cb01382a6f105ffee8bba131afe52b04909138452eaffd0f87d49",
"project_id": 352656
},
{
"project": "quark-oddities",
"id": "3088871",
"id": 3088871,
"filename": "QuarkOddities-1.16.3.jar",
"sha256": "5eafd942f2eb9b13edde3bff451ee968c1d0fe549c8decd2f8551e59a079711d"
"sha256": "5eafd942f2eb9b13edde3bff451ee968c1d0fe549c8decd2f8551e59a079711d",
"project_id": 301051
},
{
"project": "quark",
"id": "3208541",
"id": 3208541,
"filename": "Quark-r2.4-305.jar",
"sha256": "02c6788bc39963b436de77e315808cd05ca09fddf8adeb27be5f5874cfd59b73"
"sha256": "02c6788bc39963b436de77e315808cd05ca09fddf8adeb27be5f5874cfd59b73",
"project_id": 243121
},
{
"project": "refined-storage",
"id": "3196167",
"id": 3196167,
"filename": "refinedstorage-1.9.12.jar",
"sha256": "dbe279c56a44decbbfcaf2b1d8aed84988a5ddb62b0c20ec8777e90ecb58e346"
"sha256": "dbe279c56a44decbbfcaf2b1d8aed84988a5ddb62b0c20ec8777e90ecb58e346",
"project_id": 243076
},
{
"project": "repair-chests",
"id": "3111984",
"id": 3111984,
"filename": "RepairChests-1.16.4-1.6.jar",
"sha256": "e93bfbadf085764e0f458ab7a77a6c1f7620039390ffa7f60f08914d09124468"
"sha256": "e93bfbadf085764e0f458ab7a77a6c1f7620039390ffa7f60f08914d09124468",
"project_id": 401644
},
{
"project": "redstone-gauges-and-switches",
"id": "3179484",
"id": 3179484,
"filename": "rsgauges-1.16.4-1.2.8.jar",
"sha256": "dcac66fb8d65080d5326310c173e215437e0fa15405721f494f6da27e125b785"
"sha256": "dcac66fb8d65080d5326310c173e215437e0fa15405721f494f6da27e125b785",
"project_id": 296686
},
{
"project": "snow-real-magic",
"id": "3196605",
"id": 3196605,
"filename": "SnowRealMagic-1.16.4-2.3.1.jar",
"sha256": "f588ae017f68f85dbdc26374282a0ad728ad44496577001314a2b2e5f22ef33b"
"sha256": "f588ae017f68f85dbdc26374282a0ad728ad44496577001314a2b2e5f22ef33b",
"project_id": 308663
},
{
"project": "snow-under-trees",
"id": "3152350",
"id": 3152350,
"filename": "snowundertrees-1.16.4-v1.1.3.jar",
"sha256": "6fb11fc0ff8542780796d481cc69549718dc6759b80bec43835003ebd33b8235"
"sha256": "6fb11fc0ff8542780796d481cc69549718dc6759b80bec43835003ebd33b8235",
"project_id": 353942
},
{
"project": "spice-of-life-carrot-edition",
"id": "3174886",
"id": 3174886,
"filename": "solcarrot-1.16.3-1.9.9.jar",
"sha256": "541ef38547ec17fb7cc485474747623d2dcc963a788c5ea300b39e31612e9022"
"sha256": "541ef38547ec17fb7cc485474747623d2dcc963a788c5ea300b39e31612e9022",
"project_id": 277616
},
{
"project": "spark",
"id": "3245792",
"id": 3245792,
"filename": "spark-forge.jar",
"sha256": "9BSMsIoiLWFFQje2jhnVqFNiFTXKITTAlIuDxUOgtds="
"sha256": "9BSMsIoiLWFFQje2jhnVqFNiFTXKITTAlIuDxUOgtds=",
"project_id": 361579
},
{
"project": "storage-drawers",
"id": "3180569",
"id": 3180569,
"filename": "StorageDrawers-1.16.3-8.2.2.jar",
"sha256": "e8775a6bd6b4c61f2df6efe22294d41e390b1aef79d744233948cc1e2bb07651"
"sha256": "e8775a6bd6b4c61f2df6efe22294d41e390b1aef79d744233948cc1e2bb07651",
"project_id": 223852
},
{
"project": "supplementaries",
"id": "3281805",
"id": 3281805,
"filename": "supplementaries-1.16.5-0.12.1.jar",
"sha256": "sOjCHEhL1x/jF4D/HuYiKdXvFIZyPFeKk0ihY6SUqcI="
"sha256": "sOjCHEhL1x/jF4D/HuYiKdXvFIZyPFeKk0ihY6SUqcI=",
"project_id": 412082
},
{
"project": "sweet-concrete",
"id": "3186255",
"id": 3186255,
"filename": "sweetconcrete-1.16.5-1.7.1.jar",
"sha256": "6333aeb7dbdf3d2c5365bc7679ef91d0eec1c6d1ac6ff2f86c19139abbb02afe"
"sha256": "6333aeb7dbdf3d2c5365bc7679ef91d0eec1c6d1ac6ff2f86c19139abbb02afe",
"project_id": 351052
},
{
"project": "swingthroughgrass",
"id": "3103028",
"id": 3103028,
"filename": "swingthroughgrass-1.16.4-1.5.3.jar",
"sha256": "d47132c8e97989f6f1b4c3c2c0736bf9e16e9a72970b3953fc80dcf8b1a4e31d"
"sha256": "d47132c8e97989f6f1b4c3c2c0736bf9e16e9a72970b3953fc80dcf8b1a4e31d",
"project_id": 264353
},
{
"project": "the-bumblezone-forge",
"id": "3389654",
"id": 3389654,
"filename": "the_bumblezone-1.16.5-2.4.9-forge.jar",
"sha256": "51b2b5860ee391df2ea76c235c6614b34225312ebadaca4893c8ff16b0e9242a"
"sha256": "51b2b5860ee391df2ea76c235c6614b34225312ebadaca4893c8ff16b0e9242a",
"project_id": 362479
},
{
"project": "the-undergarden",
"id": "3361666",
"id": 3361666,
"filename": "The_Undergarden-1.16.5-0.5.4.jar",
"sha256": "b596836a5c1d50cf1c65c50ea728b0e295965cf9a4091a8eb1caac517aad5c50"
"sha256": "b596836a5c1d50cf1c65c50ea728b0e295965cf9a4091a8eb1caac517aad5c50",
"project_id": 379849
},
{
"project": "towers-of-the-wild",
"id": "3103750",
"id": 3103750,
"filename": "towers_of_the_wild-1.16.4-2.0.1.jar",
"sha256": "fcd0e3f808569f0e547313a1ea3563c9a5d2fa8fbb638678eed6e46c1d8cfaf1"
"sha256": "fcd0e3f808569f0e547313a1ea3563c9a5d2fa8fbb638678eed6e46c1d8cfaf1",
"project_id": 386415
},
{
"project": "travelers-backpack",
"id": "3171745",
"id": 3171745,
"filename": "TravelersBackpack-1.16.4-5.3.8.jar",
"sha256": "cd15a1bef4388bfc492c96dab510d32fff17cd921a06393bbb7ab25f6f25fc88"
"sha256": "cd15a1bef4388bfc492c96dab510d32fff17cd921a06393bbb7ab25f6f25fc88",
"project_id": 321117
},
{
"project": "the-weirding-gadget",
"id": "3116235",
"id": 3116235,
"filename": "weirdinggadget-1.16.(2-4)-2.2.7.jar",
"sha256": "fe9b2d4f39020a4239a19ea0e7229beec29eb8f1ef2b2b198b9aa5aad0b13318"
"sha256": "fe9b2d4f39020a4239a19ea0e7229beec29eb8f1ef2b2b198b9aa5aad0b13318",
"project_id": 258914
},
{
"project": "wither-skeleton-tweaks",
"id": "3172803",
"id": 3172803,
"filename": "Wither-Skeleton-Tweaks-1.16.4-5.3.0.jar",
"sha256": "e6375312aeb188cda4951a4c4935343a64785303129dbb47f49f59768d0865d3"
"sha256": "e6375312aeb188cda4951a4c4935343a64785303129dbb47f49f59768d0865d3",
"project_id": 255902
},
{
"project": "xaeros-minimap",
"id": "3200201",
"id": 3200201,
"filename": "Xaeros_Minimap_21.3.0.2_Forge_1.16.5.jar",
"sha256": "d477b6838bc27bfc759dc8601582683fdc7d425736656d304a1cbae4d932c6f0"
"sha256": "d477b6838bc27bfc759dc8601582683fdc7d425736656d304a1cbae4d932c6f0",
"project_id": 263420
},
{
"project": "xaeros-world-map",
"id": "3200214",
"id": 3200214,
"filename": "XaerosWorldMap_1.12.0.2_Forge_1.16.5.jar",
"sha256": "d4cc27d1646ce8bb5411261b31f1a13b11b7ad709fe7d9be43c4c7c8caa529f1"
"sha256": "d4cc27d1646ce8bb5411261b31f1a13b11b7ad709fe7d9be43c4c7c8caa529f1",
"project_id": 317780
},
{
"project": "yungs-api",
"id": "3186128",
"id": 3186128,
"filename": "YungsApi-1.16.4-Forge-4.jar",
"sha256": "5a78eec5576ed162def18849bb604d5c69ec73b8715ab28ad41174ad0a673304"
"sha256": "5a78eec5576ed162def18849bb604d5c69ec73b8715ab28ad41174ad0a673304",
"project_id": 421850
}
]

View File

@ -0,0 +1,151 @@
import argparse
import json
import hashlib
from copy import deepcopy
from enum import Enum
from typing import Dict, Generator, NamedTuple, Optional, Union
import requests
API = "https://addons-ecs.forgesvc.net/api/v2"
class ModLoader(Enum):
FORGE = 1
FABRIC = 4
class File(NamedTuple):
id: int
gameVersion: str
name: str
modLoader: Optional[ModLoader]
@classmethod
def from_json(cls, f: Dict[str, Union[str, int]]):
modLoader = f.get("modLoader", None)
assert isinstance(f["gameVersion"], str)
assert isinstance(f["projectFileId"], int)
assert isinstance(f["projectFileName"], str)
if modLoader is not None:
assert isinstance(modLoader, int)
return cls(
f["projectFileId"],
f["gameVersion"],
f["projectFileName"],
ModLoader(modLoader) if modLoader is not None else None,
)
class CurseAPI:
def __init__(self):
self._session = requests.Session()
self._session.headers[
"User-Agent"
] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0"
def get_latest_files(self, mod_id: int) -> Generator[File, None, None]:
res = self._session.get(f"{API}/addon/{mod_id}")
res.raise_for_status()
latest_files = res.json().get("gameVersionLatestFiles", None)
if latest_files is None:
return (_ for _ in [])
else:
return (File.from_json(f) for f in latest_files)
def get_file_url(self, mod_id: int, file_id: int) -> str:
res = self._session.get(f"{API}/addon/{mod_id}/file/{file_id}/download-url")
res.raise_for_status()
return res.text.rstrip("\n")
def download_file(self, mod_id: int, file_id: int) -> bytes:
url = self.get_file_url(mod_id, file_id)
file_ = self._session.get(url)
file_.raise_for_status()
return file_.content
def main():
parser = argparse.ArgumentParser()
parser.add_argument("version", help="The minecraft version to limit updates to")
parser.add_argument(
"--mod-loader", choices=["none", "forge", "fabric"], default="forge"
)
args = parser.parse_args()
if args.mod_loader == "forge":
mod_loader = ModLoader.FORGE
elif args.mod_loader == "fabric":
mod_loader = ModLoader.FABRIC
else:
raise AssertionError("Unreachable")
update(args.version, mod_loader)
def update(version: str, mod_loader: ModLoader):
with open("./mods.json") as mods_json:
mods = json.load(mods_json)
curse = CurseAPI()
new_mods = []
for mod in mods:
print(f"Checking for updates to {mod['project']}...")
try:
latest_files = list(curse.get_latest_files(mod["project_id"]))
except requests.HTTPError as err:
print(f"WARNING: Could not access curse API for {mod['project']}: {err}")
latest_files = [_ for _ in []]
def compatible(file_: File) -> bool:
file_version = file_.gameVersion.split(".")
target_version = version.split(".")
# We assume that major + minor version are compatible;
# this seems to generally be true, but check the output
# for possible mistakes.
#
# The patch version is completely ignored since mod
# authors generally don't register versions properly
# enough to match this.
#
# Being more strict than this usually results in
# technically compatible mods with no available versions.
return (
(file_.modLoader is None or file_.modLoader == mod_loader)
and file_version[0] == target_version[0]
and file_version[1] == target_version[1]
)
latest = max(filter(compatible, latest_files), key=lambda f: f.gameVersion)
if latest is None:
print(f"WARNING: No compatible files found for {mod['project']}")
print(
f"Versions available: {[(f.name, f.gameVersion) for f in latest_files]}"
)
new_mods.append(mod)
elif latest.id != mod["id"]:
print(f"Updating {mod['project']}...")
contents = curse.download_file(mod["project_id"], latest.id)
sha256 = hashlib.sha256(contents).hexdigest()
new_mod = deepcopy(mod)
new_mod.update({"filename": latest.name, "id": latest.id, "sha256": sha256})
new_mods.append(new_mod)
else:
new_mods.append(mod)
with open("temp.json", "w") as out:
json.dump(new_mods, out, sort_keys=True, indent=2)
if __name__ == "__main__":
main()