From ba1c6e49bbb2825ea62370c44c377611fa82ebd1 Mon Sep 17 00:00:00 2001 From: cyber-dream Date: Sun, 7 Aug 2022 18:48:30 +0300 Subject: [PATCH] MVP --- .gitignore | 5 + .idea/.gitignore | 3 + .idea/HeliosDistributionGenerator.iml | 10 + .../inspectionProfiles/profiles_settings.xml | 6 + .idea/misc.xml | 4 + .idea/modules.xml | 8 + .idea/vcs.xml | 6 + distribution.json | 417 ++++++++++++++++++ main.py | 88 ++-- servers.ini | 66 +++ srv_1/ServerDistribution.ini | 1 + temp_forge.json | 212 +++++++++ temp_forge_libs.json | 203 +++++++++ test.json | 241 ++++++++++ 14 files changed, 1236 insertions(+), 34 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/HeliosDistributionGenerator.iml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 distribution.json create mode 100644 servers.ini create mode 100644 srv_1/ServerDistribution.ini create mode 100644 temp_forge.json create mode 100644 temp_forge_libs.json create mode 100644 test.json diff --git a/.gitignore b/.gitignore index 5d381cc..91df70d 100644 --- a/.gitignore +++ b/.gitignore @@ -160,3 +160,8 @@ cython_debug/ # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ + +*~ +./srv*/* +*.jar +*.jar.pack.xz diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/HeliosDistributionGenerator.iml b/.idea/HeliosDistributionGenerator.iml new file mode 100644 index 0000000..74d515a --- /dev/null +++ b/.idea/HeliosDistributionGenerator.iml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..048feb7 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..1b96c86 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/distribution.json b/distribution.json new file mode 100644 index 0000000..93fb435 --- /dev/null +++ b/distribution.json @@ -0,0 +1,417 @@ +{ + "version": "1.0.0", + "discord": { + "clientId": "1.0.0", + "smallImageText": "Skirda", + "smallImageKey": "seal-circle" + }, + "java": { + "oracle": "http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html" + }, + "rss": "heh.mda", + "servers": [ + { + "id": "SkirdaTesting-1.12.2", + "name": "Skirda Test Server", + "description": "Сплошные баги блять", + "icon": "https://skirda.gregbrzezinski.com/skirda-test-server-icon.jpg", + "version": "4.6.5", + "address": "skirda.gregbrzezinski.com:45002", + "minecraftVersion": "1.12.2", + "discord_shortId": "Skirda Minecraft Server", + "discord_largeImageText": "Skirda 1.12.2 Minecraft Server", + "discord_largeImageKey": "skirda-testing", + "mainServer": "false", + "autoconnect": "true", + "modules": [ + { + "id": "net.minecraftforge:forge:1.12.2-14.23.5.2847", + "name": "Minecraft Forge", + "type": "ForgeHosted", + "artifact": { + "size": 4884700, + "MD5": "90734a5a713e24902d24c45c15caa42c", + "url": "https://skirda.gregbrzezinski.com/1.12.2/forge/forge-1.12.2-14.23.5.2859-universal.jar" + }, + "subModules": [ + { + "id": "net.minecraft:launchwrapper:1.12", + "name": "Mojang (LaunchWrapper)", + "type": "Library", + "artifact": { + "size": 32999, + "MD5": "934b2d91c7c5be4a49577c9e6b40e8da", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/launchwrapper-1.12.jar" + } + }, + { + "id": "org.ow2.asm:asm-all:5.2", + "name": "Mojang (ASM)", + "type": "Library", + "artifact": { + "size": 247787, + "MD5": "f5ad16c7f0338b541978b0430d51dc83", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/asm-all-5.2.jar" + } + }, + { + "id": "jline:jline:2.13", + "name": "Mojang (jline)", + "type": "Library", + "artifact": { + "size": 248566, + "MD5": "f251ba666cccb260ff7215b2cbeee8d4", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/jline-2.13.jar" + } + }, + { + "id": "org.scala-lang:scala-library:2.11.1@jar.pack.xz", + "name": "Minecraft Forge (scala-library)", + "type": "Library", + "artifact": { + "size": 1474672, + "MD5": "379c15c4f724421c6d5d7aecedaf87a6", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/scala-library-2.11.1.jar.pack.xz" + } + }, + { + "id": "org.scala-lang:scala-compiler:2.11.1@jar.pack.xz", + "name": "Minecraft Forge (scala-compiler)", + "type": "Library", + "artifact": { + "size": 3076920, + "MD5": "7d89e952f2d5c74577310cd2c28e3f20", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/scala-compiler-2.11.1.jar.pack.xz" + } + }, + { + "id": "org.scala-lang:scala-actors-migration_2.11:1.1.0@jar.pack.xz", + "name": "Minecraft Forge (scala-actors-migration)", + "type": "Library", + "artifact": { + "size": 21324, + "MD5": "04e3428b2600ace33c7ae2bf1f6c0a4c", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/scala-actors-migration_2.11-1.1.0.jar.pack.xz" + } + }, + { + "id": "org.scala-lang.plugins:scala-continuations-library_2.11:1.0.2@jar.pack.xz", + "name": "Minecraft Forge (scala-continuations-library)", + "type": "Library", + "artifact": { + "size": 7956, + "MD5": "ed9b1d27aba8ac4090a3749c4dfc895a", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/scala-continuations-library_2.11-1.0.2.jar.pack.xz" + } + }, + { + "id": "org.scala-lang.plugins:scala-continuations-plugin_2.11.1:1.0.2@jar.pack.xz", + "name": "Minecraft Forge (scala-continuations-plugin)", + "type": "Library", + "artifact": { + "size": 46140, + "MD5": "a8232db22a72a981de6b1399eb86dff7", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/scala-continuations-plugin_2.11.1-1.0.2.jar.pack.xz" + } + }, + { + "id": "org.scala-lang:scala-parser-combinators_2.11:1.0.1@jar.pack.xz", + "name": "Minecraft Forge (scala-parser-combinators)", + "type": "Library", + "artifact": { + "size": 85568, + "MD5": "2e50a7df17680daadacca69f07f8a16d", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/scala-parser-combinators_2.11-1.0.1.jar.pack.xz" + } + }, + { + "id": "org.scala-lang:scala-reflect:2.11.1@jar.pack.xz", + "name": "Minecraft Forge (scala-reflect)", + "type": "Library", + "artifact": { + "size": 1070312, + "MD5": "84e5dc81c10e2bd74c579c9d0332fdd9", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/scala-reflect-2.11.1.jar.pack.xz" + } + }, + { + "id": "org.scala-lang:scala-swing_2.11:1.0.1", + "name": "Minecraft Forge (scala-swing)", + "type": "Library", + "artifact": { + "size": 736795, + "MD5": "1d360289e697022a3f57abaad344b28f", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/scala-swing_2.11-1.0.1.jar" + } + }, + { + "id": "org.scala-lang:scala-xml_2.11:1.0.2@jar.pack.xz", + "name": "Minecraft Forge (scala-xml)", + "type": "Library", + "artifact": { + "size": 217812, + "MD5": "cc891b094a4c32dedc56bfefe9b072ff", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/scala-xml_2.11-1.0.2.jar.pack.xz" + } + }, + { + "id": "com.typesafe.akka:akka-actor_2.11:2.3.3@jar.pack.xz", + "name": "Minecraft Forge (akka-actor)", + "type": "Library", + "artifact": { + "size": 746612, + "MD5": "25cb22c3078e9fb3f7a861c912924862", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/akka-actor_2.11-2.3.3.jar.pack.xz" + } + }, + { + "id": "com.typesafe:config:1.2.1@jar.pack.xz", + "name": "Minecraft Forge (typesafe-config)", + "type": "Library", + "artifact": { + "size": 56636, + "MD5": "10ec4ccabc4e68aac9cf87165ead5d7d", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/config-1.2.1.jar.pack.xz" + } + }, + { + "id": "lzma:lzma:0.0.1", + "name": "Mojang (LZMA)", + "type": "Library", + "artifact": { + "size": 5762, + "MD5": "a3e3c3186e41c4a1a3027ba2bb23cdc6", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/lzma-0.0.1.jar" + } + }, + { + "id": "net.sf.trove4j:trove4j:3.0.3", + "name": "Trove4J", + "type": "Library", + "artifact": { + "size": 2523218, + "MD5": "8fc4d4e0129244f9fd39650c5f30feb2", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/trove4j-3.0.3.jar" + } + }, + { + "id": "java3d:vecmath:1.5.2", + "name": "Vecmath", + "type": "Library", + "artifact": { + "size": 318956, + "MD5": "e5d2b7f46c4800a32f62ce75676a5710", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/vecmath-1.5.2.jar" + } + }, + { + "id": "net.sf.jopt-simple:jopt-simple:5.0.3", + "name": "Jopt-simple", + "type": "Library", + "artifact": { + "size": 78175, + "MD5": "0a5ec84e23df9d7cfb4063bc55f2744c", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/jopt-simple-5.0.3.jar" + } + }, + { + "id": "org.apache.maven:maven-artifact:3.5.3", + "name": "maven-artifact", + "type": "Library", + "artifact": { + "size": 54961, + "MD5": "7741ebf29690ee7d9dde9cf4376347fc", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/maven-artifact-3.5.3.jar" + } + }, + { + "id": "net.minecraftforge:MercuriusUpdater:1.12.2", + "name": "MercuriusUpdater", + "type": "Library", + "artifact": { + "size": 15098, + "MD5": "6eb9e61097bee3103a2fdc42746b76a4", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/MercuriusUpdater-1.12.2.jar" + } + } + ] + }, + { + "id": "none:IndustrialCraft2:2.8.170", + "name": "Industrialcraft 2", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 8356436, + "MD5": "d4f952c94cacdd280abbb73f072b2424", + "url": "https://skirda.gregbrzezinski.com/1.12.2/mods/none:IndustrialCraft2:2.8.170.jar" + } + }, + { + "id": "none:ImmersiveVehicles:21.3.0", + "name": "Immersive Vehicles", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 4346535, + "MD5": "320da7aea4ccea568e8d9ad3c0a48133", + "url": "https://skirda.gregbrzezinski.com/1.12.2/mods/none:ImmersiveVehicles:21.3.0.jar" + } + }, + { + "id": "none:MTSOfficialPack:23", + "name": "IV Official pack", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 4496217, + "MD5": "e84bddb501c139c3a4977587d597fe18", + "url": "https://skirda.gregbrzezinski.com/1.12.2/mods/none:MTSOfficialPack:23.jar" + } + }, + { + "id": "none:ForgeMultipart:2.6.2.83", + "name": "Forge Multipart", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 1304958, + "MD5": "e45e04bc38dc373aaef0415c2e2d441d", + "url": "https://skirda.gregbrzezinski.com/1.12.2/mods/none:ForgeMultipart:2.6.2.83.jar" + } + }, + { + "id": "none:Computronics:1.6.6", + "name": "Computronics", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 1291533, + "MD5": "5e88b6e4939690a2067bf31f870a5577", + "url": "https://skirda.gregbrzezinski.com/1.12.2/mods/none:Computronics:1.6.6.jar" + } + }, + { + "id": "none:BiomesOPlenty:7.0.1.2441", + "name": "BiomesOPlenty", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 4696621, + "MD5": "61fcc4ffff205ca261e61d6772debc4d", + "url": "https://skirda.gregbrzezinski.com/1.12.2/mods/none:BiomesOPlenty:7.0.1.2441.jar" + } + }, + { + "id": "none:GentleHarvest:b1", + "name": "Gentle Harvest", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 4656, + "MD5": "0ac6a8a1c6ff6e1cd2e3b63c8cbb28f6", + "url": "https://skirda.gregbrzezinski.com/1.12.2/mods/none:GentleHarvest:b1.jar" + } + }, + { + "id": "none:RTG:6.1.0.0", + "name": "Realistic Terrain Generator", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 2075023, + "MD5": "08de37000d2c97ffc9c6da61f3cd6aaa", + "url": "https://skirda.gregbrzezinski.com/1.12.2/mods/none:RTG:6.1.0.0.jar" + } + }, + { + "id": "none:BuildCraft:7.99.24.8", + "name": "Build Craft", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 4879732, + "MD5": "df73e94d29b8c6bde42c451ff6018761", + "url": "https://skirda.gregbrzezinski.com/1.12.2/mods/none:BuildCraft:7.99.24.8.jar" + } + }, + { + "id": "none:GeographiCraft:0.8.9b", + "name": "Geographic Craft", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 402774, + "MD5": "0b2165b05a7b3851273691e4126b2e4e", + "url": "https://skirda.gregbrzezinski.com/1.12.2/mods/none:GeographiCraft:0.8.9b.jar" + } + }, + { + "id": "none:ArchitectureCraft:3.95", + "name": "Architecture Craft", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 920876, + "MD5": "b5bdcfd17da0675159d8903d016651a1", + "url": "https://skirda.gregbrzezinski.com/1.12.2/mods/none:ArchitectureCraft:3.95.jar" + } + }, + { + "id": "none:Dynmap:3.3.2", + "name": "Dynmap", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 9856939, + "MD5": "7680073beb90b1ecf87acb77d8ac634d", + "url": "https://skirda.gregbrzezinski.com/1.12.2/mods/none:Dynmap:3.3.2.jar" + } + }, + { + "id": "none:SereneSeasons:1.2.18", + "name": "Serene Seasons", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 185187, + "MD5": "ef89fab62d1914ea0e25d2c31b453695", + "url": "https://skirda.gregbrzezinski.com/1.12.2/mods/none:SereneSeasons:1.2.18.jar" + } + }, + { + "id": "none:CodeChickenLib:3.2.3.358", + "name": "Code Chicken Lib", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 704330, + "MD5": "3b5e44db5ac96fb23a439590b6731a31", + "url": "https://skirda.gregbrzezinski.com/1.12.2/mods/none:CodeChickenLib:3.2.3.358.jar" + } + }, + { + "id": "none:OpenComputers:1.7.5.192", + "name": "OpenComputers", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 15643758, + "MD5": "1da9dd8478ba6d682f2787746776e18a", + "url": "https://skirda.gregbrzezinski.com/1.12.2/mods/none:OpenComputers:1.7.5.192.jar" + } + }, + { + "id": "MtsOfficialPack23.jar", + "name": "Mts pack", + "type": "File", + "artifact": { + "size": 1973, + "path": "mods/MtsOfficialPack23.jar", + "url": "https://skirda.gregbrzezinski.com/1.12.2/mods/none:MTSOfficialPack:23.jar" + } + } + ] + } + ] +} \ No newline at end of file diff --git a/main.py b/main.py index 02f51d4..e3f76b7 100644 --- a/main.py +++ b/main.py @@ -13,6 +13,9 @@ def calculate_md5(file_path): hash_md5.update(chunk) return hash_md5.hexdigest() +def get_file_size(file_path): + + return os.stat(file_path).st_size def read_config(config_path): config = ConfigParser() @@ -25,19 +28,30 @@ def temp_forge_json(): data = json.load(json_file) return data +def temp_forge_libs_json(): + with open('temp_forge_libs.json') as json_file: + data = json.load(json_file) + return data + def generate_forge_list(forge_path, download_url): forge_jar = scan_forge_folder(forge_path) - forge_submodules_list = generate_lib_list(os.path.join(forge_path, 'libs'), download_url) + forge_full_path = os.path.join(forge_path, forge_jar) + #forge_submodules_list = generate_lib_list(os.path.join(forge_path, 'libs'), download_url) + forge_submodules_list = temp_forge_libs_json() forge_module = [{ - 'id': 'net.minecraftForge:forge:' + forge_jar.split('.')[0], + 'id': 'net.minecraftForge:forge:' + forge_jar[:-4], 'name': 'Minecraft Forge', 'type': 'ForgeHosted', + 'artifact': { + 'size': get_file_size(forge_full_path), + 'MD5': calculate_md5(forge_full_path), + 'url': download_url + 'forge/' + forge_jar + }, 'subModules': forge_submodules_list }] - return (forge_module) - - + forge_module = [temp_forge_json()] + return forge_module def parse_servers_config(config: ConfigParser): @@ -47,12 +61,11 @@ def parse_servers_config(config: ConfigParser): if section.split(' ')[0] == 'Server' or section.split(' ')[0] == 'server': download_url = config.get(section, 'download_url') server_mods_path = os.path.join(config.get(section, 'path'), 'mods') - server_optional_mods_path = config.get(section, 'optional_mods_path') + server_client_mods_path = config.get(section, 'client_mods_path') forge_path = config.get(section, 'forge_reference_folder') - forge_required_modules = generate_mod_list(server_mods_path, download_url, True) - forge_optionals_modules = generate_mod_list(server_optional_mods_path, download_url, False) + forge_optionals_modules = []# generate_mod_list(server_client_mods_path, download_url, False) forge_libs = generate_forge_list(forge_path, download_url) new_server_modules = forge_libs + forge_required_modules + forge_optionals_modules @@ -68,8 +81,8 @@ def parse_servers_config(config: ConfigParser): 'discord_largeImageKey': (config.get(section, 'discord_largeImageKey')), 'mainServer': (config.get(section, 'mainServer')), 'autoconnect': (config.get(section, 'autoconnect')), - '_path': (config.get(section, 'path')), - '_download_url': download_url, + #'_path': (config.get(section, 'path')) + #'_download_url': download_url, 'modules': new_server_modules } servers.append(new_server) @@ -89,30 +102,34 @@ def list_files_in_folder(path): return f +def get_mod_name(mod_id): + try: + return config.get('Mods Names', mod_id) + except: + print("No mod name for " + mod_id) + return mod_id + + def generate_mod_list(mods_path, download_url, isRequired): mods_file_list = list_files_in_folder(os.path.join(mods_path)) - mod_list = [] - # mod_list.append(temp_forge_json()) - for mod in mods_file_list: - path_to_mod = os.path.join(mods_path, mod) - mod = mod[:-4] - parsed_mod = mod.split('_') - mod_id = parsed_mod[0] - parsed_mod[0] = parsed_mod[0].split(':') - parsed_mod[1] = parsed_mod[1].replace('-', ' ') + for mod_file_name in mods_file_list: + path_to_mod = os.path.join(mods_path, mod_file_name) + parsed_mod = mod_file_name[:-4] + parsed_mod = parsed_mod.split(':') + mod_id = parsed_mod[1] if parsed_mod[-1] is not None: if parsed_mod[-1] == 'ServerSide': continue new_mod = { - 'id': mod_id, - 'name': parsed_mod[1], + 'id': mod_file_name[:-4], + 'name': get_mod_name(parsed_mod[1]), 'type': 'ForgeMod', 'required': isRequired, - 'artifact': {'size': sys.getsizeof(path_to_mod), + 'artifact': {'size': get_file_size(path_to_mod), 'MD5': calculate_md5(path_to_mod), - 'url': download_url + mod + '.jar' + 'url': download_url + 'mods/' + mod_file_name } } mod_list.append(new_mod) @@ -122,21 +139,22 @@ def generate_mod_list(mods_path, download_url, isRequired): def generate_lib_list(libs_path, download_url): libs_file_list = list_files_in_folder(os.path.join(libs_path)) lib_list = [] - for lib in libs_file_list: - path_to_lib = os.path.join(libs_path, lib) - parsed_lib = lib.split(':') - lib_id = parsed_lib[1] + for lib_file_name in libs_file_list: + path_to_lib = os.path.join(libs_path, lib_file_name) - if lib.split('.')[-1] == 'xz': - lib_id += "@jar.pack.xz" + + if lib_file_name[-2:] == 'xz': + lib_name = lib_file_name[:-12] + "@jar.pack.xz" + else: + lib_name = lib_file_name[:-4] new_lib = { - 'id': lib_id, - 'name': parsed_lib[1], + 'id': lib_name, + 'name': lib_name, 'type': 'Library', - 'artifact': {'size': sys.getsizeof(path_to_lib), + 'artifact': {'size': get_file_size(path_to_lib), 'MD5': calculate_md5(path_to_lib), - 'url': download_url + lib + 'url': download_url + 'libs/' + lib_file_name } } lib_list.append(new_lib) @@ -167,7 +185,9 @@ if __name__ == '__main__': # mod_list = generate_mod_list(servers_list) distribution = generate_json(config) - pprint(distribution) + # pprint(distribution) with open('distribution.json', 'w', encoding='utf-8') as f: + print("print distribution to " + f.name) json.dump(distribution, f, ensure_ascii=False, indent=4) + diff --git a/servers.ini b/servers.ini new file mode 100644 index 0000000..33b0b92 --- /dev/null +++ b/servers.ini @@ -0,0 +1,66 @@ +[Basic] +version = 1.0.0 +discord_clientId = 1321321321 +discord_smallImageText = Skirda +dicord_smallImageKey = seal-circle +java = http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html +rss = heh.mda + + +[Server Testing] +id = SkirdaTesting-1.12.2 +name = Skirda Test Server +description = Сплошные баги блять +icon = https://skirda.gregbrzezinski.com/skirda-test-server-icon.jpg +version = 4.6.5 +address = skirda.gregbrzezinski.com:45002 +minecraftVersion = 1.12.2 +discord_shortId = Skirda Minecraft Server +discord_largeImageText = Skirda 1.12.2 Minecraft Server +discord_largeImageKey = skirda-testing +mainServer = false +autoconnect = true +path = /home/dart/skirda/ +download_url = https://skirda.gregbrzezinski.com/1.12.2/ +client_mods_path = ./opt_mods +forge_reference_folder = ./forge +ignore_mods = DynmapBlockScan +# +#[Server Production] +#id = SkirdaProduction-1.12.2 +#name = Skirda Main Server +#description = Энджой, ёпта +#icon = https://skirda.gregbrzezinski.com/skirda-test-server-icon.jpg +#version = 4.6.5 +#address = skirda.gregbrzezinski.com:45000 +#minecraftVersion = 1.12.2 +#discord_shortId = Skirda Minecraft Server +#discord_largeImageText = Skirda 1.12.2 Minecraft Server +#discord_largeImageKey = skirda-testing +#mainServer = false +#autoconnect = true +#path = ./srv_1 +#download_url = https://skirda.gregbrzezinski.com/mods/ +#optional_mods_path = ./opt_mods + + +[Mods Names] +architecturecraft = Architecture Craft +BiomesOPlenty = BiomesOPlenty +bspkrscore = bspkrscore +BuildCraft = Build Craft +CodeChickenLib = Code Chicken Lib +Computronics = Computronics +Dynmap = Dynmap +ForgeMultipart = Forge Multipart +GentleHarvest = Gentle Harvest +GeographiCraft = Geographic Craft +ImmersiveVehicles = Immersive Vehicles +IndustrialCraft2 = Industrialcraft 2 +MTSOfficialPack = IV Official pack +MTSOfficial = Mts Official planes +OpenComputers = OpenComputers +RailCraft = Railcraft +RTG = Realistic Terrain Generator +SereneSeasons = Serene Seasons + diff --git a/srv_1/ServerDistribution.ini b/srv_1/ServerDistribution.ini new file mode 100644 index 0000000..41abec6 --- /dev/null +++ b/srv_1/ServerDistribution.ini @@ -0,0 +1 @@ +[Forge] diff --git a/temp_forge.json b/temp_forge.json new file mode 100644 index 0000000..9dd30b3 --- /dev/null +++ b/temp_forge.json @@ -0,0 +1,212 @@ +{ + "id": "net.minecraftforge:forge:1.12.2-14.23.5.2847", + "name": "Minecraft Forge", + "type": "ForgeHosted", + "artifact": { + "size": 4884700, + "MD5": "90734a5a713e24902d24c45c15caa42c", + "url": "https://skirda.gregbrzezinski.com/1.12.2/forge/forge-1.12.2-14.23.5.2859-universal.jar" + }, + "subModules": [ + { + "id": "net.minecraft:launchwrapper:1.12", + "name": "Mojang (LaunchWrapper)", + "type": "Library", + "artifact": { + "size": 32999, + "MD5": "934b2d91c7c5be4a49577c9e6b40e8da", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/launchwrapper-1.12.jar" + } + }, + { + "id": "org.ow2.asm:asm-all:5.2", + "name": "Mojang (ASM)", + "type": "Library", + "artifact": { + "size": 247787, + "MD5": "f5ad16c7f0338b541978b0430d51dc83", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/asm-all-5.2.jar" + } + }, + { + "id": "jline:jline:2.13", + "name": "Mojang (jline)", + "type": "Library", + "artifact": { + "size": 248566, + "MD5": "f251ba666cccb260ff7215b2cbeee8d4", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/jline-2.13.jar" + } + }, + { + "id": "org.scala-lang:scala-library:2.11.1@jar.pack.xz", + "name": "Minecraft Forge (scala-library)", + "type": "Library", + "artifact": { + "size": 1474672, + "MD5": "379c15c4f724421c6d5d7aecedaf87a6", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/scala-library-2.11.1.jar.pack.xz" + } + }, + { + "id": "org.scala-lang:scala-compiler:2.11.1@jar.pack.xz", + "name": "Minecraft Forge (scala-compiler)", + "type": "Library", + "artifact": { + "size": 3076920, + "MD5": "7d89e952f2d5c74577310cd2c28e3f20", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/scala-compiler-2.11.1.jar.pack.xz" + } + }, + { + "id": "org.scala-lang:scala-actors-migration_2.11:1.1.0@jar.pack.xz", + "name": "Minecraft Forge (scala-actors-migration)", + "type": "Library", + "artifact": { + "size": 21324, + "MD5": "04e3428b2600ace33c7ae2bf1f6c0a4c", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/scala-actors-migration_2.11-1.1.0.jar.pack.xz" + } + }, + { + "id": "org.scala-lang.plugins:scala-continuations-library_2.11:1.0.2@jar.pack.xz", + "name": "Minecraft Forge (scala-continuations-library)", + "type": "Library", + "artifact": { + "size": 7956, + "MD5": "ed9b1d27aba8ac4090a3749c4dfc895a", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/scala-continuations-library_2.11-1.0.2.jar.pack.xz" + } + }, + { + "id": "org.scala-lang.plugins:scala-continuations-plugin_2.11.1:1.0.2@jar.pack.xz", + "name": "Minecraft Forge (scala-continuations-plugin)", + "type": "Library", + "artifact": { + "size": 46140, + "MD5": "a8232db22a72a981de6b1399eb86dff7", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/scala-continuations-plugin_2.11.1-1.0.2.jar.pack.xz" + } + }, + { + "id": "org.scala-lang:scala-parser-combinators_2.11:1.0.1@jar.pack.xz", + "name": "Minecraft Forge (scala-parser-combinators)", + "type": "Library", + "artifact": { + "size": 85568, + "MD5": "2e50a7df17680daadacca69f07f8a16d", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/scala-parser-combinators_2.11-1.0.1.jar.pack.xz" + } + }, + { + "id": "org.scala-lang:scala-reflect:2.11.1@jar.pack.xz", + "name": "Minecraft Forge (scala-reflect)", + "type": "Library", + "artifact": { + "size": 1070312, + "MD5": "84e5dc81c10e2bd74c579c9d0332fdd9", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/scala-reflect-2.11.1.jar.pack.xz" + } + }, + { + "id": "org.scala-lang:scala-swing_2.11:1.0.1", + "name": "Minecraft Forge (scala-swing)", + "type": "Library", + "artifact": { + "size": 736795, + "MD5": "1d360289e697022a3f57abaad344b28f", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/scala-swing_2.11-1.0.1.jar" + } + }, + { + "id": "org.scala-lang:scala-xml_2.11:1.0.2@jar.pack.xz", + "name": "Minecraft Forge (scala-xml)", + "type": "Library", + "artifact": { + "size": 217812, + "MD5": "cc891b094a4c32dedc56bfefe9b072ff", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/scala-xml_2.11-1.0.2.jar.pack.xz" + } + }, + { + "id": "com.typesafe.akka:akka-actor_2.11:2.3.3@jar.pack.xz", + "name": "Minecraft Forge (akka-actor)", + "type": "Library", + "artifact": { + "size": 746612, + "MD5": "25cb22c3078e9fb3f7a861c912924862", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/akka-actor_2.11-2.3.3.jar.pack.xz" + } + }, + { + "id": "com.typesafe:config:1.2.1@jar.pack.xz", + "name": "Minecraft Forge (typesafe-config)", + "type": "Library", + "artifact": { + "size": 56636, + "MD5": "10ec4ccabc4e68aac9cf87165ead5d7d", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/config-1.2.1.jar.pack.xz" + } + }, + { + "id": "lzma:lzma:0.0.1", + "name": "Mojang (LZMA)", + "type": "Library", + "artifact": { + "size": 5762, + "MD5": "a3e3c3186e41c4a1a3027ba2bb23cdc6", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/lzma-0.0.1.jar" + } + }, + { + "id": "net.sf.trove4j:trove4j:3.0.3", + "name": "Trove4J", + "type": "Library", + "artifact": { + "size": 2523218, + "MD5": "8fc4d4e0129244f9fd39650c5f30feb2", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/trove4j-3.0.3.jar" + } + }, + { + "id": "java3d:vecmath:1.5.2", + "name": "Vecmath", + "type": "Library", + "artifact": { + "size": 318956, + "MD5": "e5d2b7f46c4800a32f62ce75676a5710", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/vecmath-1.5.2.jar" + } + }, + { + "id": "net.sf.jopt-simple:jopt-simple:5.0.3", + "name": "Jopt-simple", + "type": "Library", + "artifact": { + "size": 78175, + "MD5": "0a5ec84e23df9d7cfb4063bc55f2744c", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/jopt-simple-5.0.3.jar" + } + }, + { + "id": "org.apache.maven:maven-artifact:3.5.3", + "name": "maven-artifact", + "type": "Library", + "artifact": { + "size": 54961, + "MD5": "7741ebf29690ee7d9dde9cf4376347fc", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/maven-artifact-3.5.3.jar" + } + }, + { + "id": "net.minecraftforge:MercuriusUpdater:1.12.2", + "name": "MercuriusUpdater", + "type": "Library", + "artifact": { + "size": 15098, + "MD5": "6eb9e61097bee3103a2fdc42746b76a4", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/MercuriusUpdater-1.12.2.jar" + } + } + ] +} diff --git a/temp_forge_libs.json b/temp_forge_libs.json new file mode 100644 index 0000000..cbc55b7 --- /dev/null +++ b/temp_forge_libs.json @@ -0,0 +1,203 @@ +[ + { + "id": "net.minecraft:launchwrapper:1.12", + "name": "Mojang (LaunchWrapper)", + "type": "Library", + "artifact": { + "size": 32999, + "MD5": "934b2d91c7c5be4a49577c9e6b40e8da", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/launchwrapper-1.12.jar" + } + }, + { + "id": "org.ow2.asm:asm-all:5.2", + "name": "Mojang (ASM)", + "type": "Library", + "artifact": { + "size": 247787, + "MD5": "f5ad16c7f0338b541978b0430d51dc83", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/asm-all-5.2.jar" + } + }, + { + "id": "jline:jline:2.13", + "name": "Mojang (jline)", + "type": "Library", + "artifact": { + "size": 248566, + "MD5": "f251ba666cccb260ff7215b2cbeee8d4", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/jline-2.13.jar" + } + }, + { + "id": "org.scala-lang:scala-library:2.11.1@jar.pack.xz", + "name": "Minecraft Forge (scala-library)", + "type": "Library", + "artifact": { + "size": 1474672, + "MD5": "379c15c4f724421c6d5d7aecedaf87a6", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/scala-library-2.11.1.jar.pack.xz" + } + }, + { + "id": "org.scala-lang:scala-compiler:2.11.1@jar.pack.xz", + "name": "Minecraft Forge (scala-compiler)", + "type": "Library", + "artifact": { + "size": 3076920, + "MD5": "7d89e952f2d5c74577310cd2c28e3f20", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/scala-compiler-2.11.1.jar.pack.xz" + } + }, + { + "id": "org.scala-lang:scala-actors-migration_2.11:1.1.0@jar.pack.xz", + "name": "Minecraft Forge (scala-actors-migration)", + "type": "Library", + "artifact": { + "size": 21324, + "MD5": "04e3428b2600ace33c7ae2bf1f6c0a4c", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/scala-actors-migration_2.11-1.1.0.jar.pack.xz" + } + }, + { + "id": "org.scala-lang.plugins:scala-continuations-library_2.11:1.0.2@jar.pack.xz", + "name": "Minecraft Forge (scala-continuations-library)", + "type": "Library", + "artifact": { + "size": 7956, + "MD5": "ed9b1d27aba8ac4090a3749c4dfc895a", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/scala-continuations-library_2.11-1.0.2.jar.pack.xz" + } + }, + { + "id": "org.scala-lang.plugins:scala-continuations-plugin_2.11.1:1.0.2@jar.pack.xz", + "name": "Minecraft Forge (scala-continuations-plugin)", + "type": "Library", + "artifact": { + "size": 46140, + "MD5": "a8232db22a72a981de6b1399eb86dff7", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/scala-continuations-plugin_2.11.1-1.0.2.jar.pack.xz" + } + }, + { + "id": "org.scala-lang:scala-parser-combinators_2.11:1.0.1@jar.pack.xz", + "name": "Minecraft Forge (scala-parser-combinators)", + "type": "Library", + "artifact": { + "size": 85568, + "MD5": "2e50a7df17680daadacca69f07f8a16d", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/scala-parser-combinators_2.11-1.0.1.jar.pack.xz" + } + }, + { + "id": "org.scala-lang:scala-reflect:2.11.1@jar.pack.xz", + "name": "Minecraft Forge (scala-reflect)", + "type": "Library", + "artifact": { + "size": 1070312, + "MD5": "84e5dc81c10e2bd74c579c9d0332fdd9", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/scala-reflect-2.11.1.jar.pack.xz" + } + }, + { + "id": "org.scala-lang:scala-swing_2.11:1.0.1", + "name": "Minecraft Forge (scala-swing)", + "type": "Library", + "artifact": { + "size": 736795, + "MD5": "1d360289e697022a3f57abaad344b28f", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/scala-swing_2.11-1.0.1.jar" + } + }, + { + "id": "org.scala-lang:scala-xml_2.11:1.0.2@jar.pack.xz", + "name": "Minecraft Forge (scala-xml)", + "type": "Library", + "artifact": { + "size": 217812, + "MD5": "cc891b094a4c32dedc56bfefe9b072ff", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/scala-xml_2.11-1.0.2.jar.pack.xz" + } + }, + { + "id": "com.typesafe.akka:akka-actor_2.11:2.3.3@jar.pack.xz", + "name": "Minecraft Forge (akka-actor)", + "type": "Library", + "artifact": { + "size": 746612, + "MD5": "25cb22c3078e9fb3f7a861c912924862", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/akka-actor_2.11-2.3.3.jar.pack.xz" + } + }, + { + "id": "com.typesafe:config:1.2.1@jar.pack.xz", + "name": "Minecraft Forge (typesafe-config)", + "type": "Library", + "artifact": { + "size": 56636, + "MD5": "10ec4ccabc4e68aac9cf87165ead5d7d", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/config-1.2.1.jar.pack.xz" + } + }, + { + "id": "lzma:lzma:0.0.1", + "name": "Mojang (LZMA)", + "type": "Library", + "artifact": { + "size": 5762, + "MD5": "a3e3c3186e41c4a1a3027ba2bb23cdc6", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/lzma-0.0.1.jar" + } + }, + { + "id": "net.sf.trove4j:trove4j:3.0.3", + "name": "Trove4J", + "type": "Library", + "artifact": { + "size": 2523218, + "MD5": "8fc4d4e0129244f9fd39650c5f30feb2", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/trove4j-3.0.3.jar" + } + }, + { + "id": "java3d:vecmath:1.5.2", + "name": "Vecmath", + "type": "Library", + "artifact": { + "size": 318956, + "MD5": "e5d2b7f46c4800a32f62ce75676a5710", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/vecmath-1.5.2.jar" + } + }, + { + "id": "net.sf.jopt-simple:jopt-simple:5.0.3", + "name": "Jopt-simple", + "type": "Library", + "artifact": { + "size": 78175, + "MD5": "0a5ec84e23df9d7cfb4063bc55f2744c", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/jopt-simple-5.0.3.jar" + } + }, + { + "id": "org.apache.maven:maven-artifact:3.5.3", + "name": "maven-artifact", + "type": "Library", + "artifact": { + "size": 54961, + "MD5": "7741ebf29690ee7d9dde9cf4376347fc", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/maven-artifact-3.5.3.jar" + } + }, + { + "id": "net.minecraftforge:MercuriusUpdater:1.12.2", + "name": "MercuriusUpdater", + "type": "Library", + "artifact": { + "size": 15098, + "MD5": "6eb9e61097bee3103a2fdc42746b76a4", + "url": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/1.12.2/MercuriusUpdater-1.12.2.jar" + } + } + ] + diff --git a/test.json b/test.json new file mode 100644 index 0000000..18a48f2 --- /dev/null +++ b/test.json @@ -0,0 +1,241 @@ +{ + "version": "1.0.0", + "discord": { + "clientId": "1.0.0", + "smallImageText": "WesterosCraft", + "smallImageKey": "seal-circle" + }, + "java": { + "oracle": "http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html" + }, + "rss": "heh.mda", + "servers": [ + { + "id": "SkirdaTesting-1.12.2", + "name": "Skirda Test Server", + "description": "Сплошные баги блять", + "icon": "http://mc.westeroscraft.com/WesterosCraftLauncher/files/server-prod.png", + "version": "4.6.5", + "address": "192.168.88.228:35012", + "minecraftVersion": "1.12.2", + "discord_shortId": "Skirda Minecraft Server", + "discord_largeImageText": "Skirda 1.12.2 Minecraft Server", + "discord_largeImageKey": "skirda-testing", + "mainServer": "false", + "autoconnect": "true", + "_path": "./srv_1", + "_download_url": "https://skirda.gregbrzezinski.com/mods/", + "modules": [ + { + "id": "none:bspkrsCore:7.6.0.1", + "name": "bspkrsCore", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 100, + "MD5": "c916e0be02b2522054c22016faed7ed8", + "url": "https://skirda.gregbrzezinski.com/mods/none:bspkrsCore:7.6.0.1_bspkrsCore" + } + }, + { + "id": "none:gentleharvest:b1", + "name": "Gentle harves", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 101, + "MD5": "0ac6a8a1c6ff6e1cd2e3b63c8cbb28f6", + "url": "https://skirda.gregbrzezinski.com/mods/none:gentleharvest:b1_Gentle-harves" + } + }, + { + "id": "none:ChickenASM:1.0.2.7", + "name": "Chicken ASM", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 101, + "MD5": "6afc6ad00fd6bacd0c5b35d8342f0f79", + "url": "https://skirda.gregbrzezinski.com/mods/none:ChickenASM:1.0.2.7_Chicken-ASM" + } + }, + { + "id": "none:TreeCapitator:1.43.0", + "name": "Tree Capitator", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 106, + "MD5": "08f5d4cf4987e8b099623052196d8f79", + "url": "https://skirda.gregbrzezinski.com/mods/none:TreeCapitator:1.43.0_Tree-Capitator" + } + }, + { + "id": "none:SereneSeasons:1.2.18", + "name": "Serene Seasons", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 106, + "MD5": "ef89fab62d1914ea0e25d2c31b453695", + "url": "https://skirda.gregbrzezinski.com/mods/none:SereneSeasons:1.2.18_Serene-Seasons" + } + }, + { + "id": "none:CodeChickenLib:3.2.3.358", + "name": "Code Chicken Lib", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 112, + "MD5": "3b5e44db5ac96fb23a439590b6731a31", + "url": "https://skirda.gregbrzezinski.com/mods/none:CodeChickenLib:3.2.3.358_Code-Chicken-Lib" + } + }, + { + "id": "none:architecturecraft:3.98", + "name": "Architecture Craft", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 112, + "MD5": "cc964d41fad4832a0850cf9da45d0414", + "url": "https://skirda.gregbrzezinski.com/mods/none:architecturecraft:3.98_Architecture-Craft" + } + }, + { + "id": "none:RTG:6.1.0.0", + "name": "RTG", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 86, + "MD5": "08de37000d2c97ffc9c6da61f3cd6aaa", + "url": "https://skirda.gregbrzezinski.com/mods/none:RTG:6.1.0.0_RTG" + } + }, + { + "id": "none:GoldenAirportPack:3.2.6", + "name": "Golden Airport Pack", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 114, + "MD5": "c7057e541f6bdbe9981a513277e1ba02", + "url": "https://skirda.gregbrzezinski.com/mods/none:GoldenAirportPack:3.2.6_Golden-Airport-Pack" + } + }, + { + "id": "none:GeographiCraft:0.8.9b", + "name": "Geographic Craft", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 109, + "MD5": "0b2165b05a7b3851273691e4126b2e4e", + "url": "https://skirda.gregbrzezinski.com/mods/none:GeographiCraft:0.8.9b_Geographic-Craft" + } + }, + { + "id": "none:openComputers:1.7.5.192", + "name": "Open Computers", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 109, + "MD5": "1da9dd8478ba6d682f2787746776e18a", + "url": "https://skirda.gregbrzezinski.com/mods/none:openComputers:1.7.5.192_Open-Computers" + } + }, + { + "id": "none:industrialcraft:2-2.8.221", + "name": "Industrial Craft", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 113, + "MD5": "73f8b72d24d1a7458da1daa969e6e75a", + "url": "https://skirda.gregbrzezinski.com/mods/none:industrialcraft:2-2.8.221_Industrial-Craft" + } + }, + { + "id": "none:mtsOffPack:22", + "name": "MTS Official Pack", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 102, + "MD5": "47602dd6744fe9a9760968b3a0f62d06", + "url": "https://skirda.gregbrzezinski.com/mods/none:mtsOffPack:22_MTS-Official-Pack" + } + }, + { + "id": "none:Computronics:1.6.6", + "name": "Computronics", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 102, + "MD5": "5e88b6e4939690a2067bf31f870a5577", + "url": "https://skirda.gregbrzezinski.com/mods/none:Computronics:1.6.6_Computronics" + } + }, + { + "id": "none:railcraft:0.0.0", + "name": "Rail Craft", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 97, + "MD5": "b6f0592e8f5c24d07fe065f1c97c8fda", + "url": "https://skirda.gregbrzezinski.com/mods/none:railcraft:0.0.0_Rail-Craft" + } + }, + { + "id": "none:buildcraft:7.99.24.8", + "name": "Buildcraft", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 102, + "MD5": "df73e94d29b8c6bde42c451ff6018761", + "url": "https://skirda.gregbrzezinski.com/mods/none:buildcraft:7.99.24.8_Buildcraft" + } + }, + { + "id": "none:immersiveVehicles:20.2.0", + "name": "Immersive Vehicles", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 114, + "MD5": "a0ffdf29eaa2681ca6ca18faa5f446fd", + "url": "https://skirda.gregbrzezinski.com/mods/none:immersiveVehicles:20.2.0_Immersive-Vehicles" + } + }, + { + "id": "none:simpleplanes:3.0.1.7", + "name": "Simple Planes", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 105, + "MD5": "8b10e7941dff2705b41e2f218ea3b5b4", + "url": "https://skirda.gregbrzezinski.com/mods/none:simpleplanes:3.0.1.7_Simple-Planes" + } + }, + { + "id": "none:BiomesOPlenty:7.0.1.2444", + "name": "BiomesOPlenty", + "type": "ForgeMod", + "required": true, + "artifact": { + "size": 109, + "MD5": "4c1d23b8a58b6aaa9a5204fae3f18393", + "url": "https://skirda.gregbrzezinski.com/mods/none:BiomesOPlenty:7.0.1.2444_BiomesOPlenty" + } + } + ] + } + ] +} \ No newline at end of file