diff --git a/GlowstoneBlock.py b/GlowstoneBlock.py index 044ccd4..1a2b63f 100644 --- a/GlowstoneBlock.py +++ b/GlowstoneBlock.py @@ -2,25 +2,47 @@ import zipfile import json import os import sys +import logging def get_mod_info(target_file): with zipfile.ZipFile(target_file) as z: - return json.loads(z.read('mcmod.info'))[0] + info_files = [f for f in z.filelist if not f.is_dir() and '.info' in f.filename.lower()] + return json.loads(z.read(info_files[0]))[0] def get_modpack_info(target_dir): for f in os.scandir(target_dir): if f.is_file(): if '.jar' in f.name.lower(): - yield get_mod_info(f.path) + try: + yield get_mod_info(f.path) + except (KeyError, IndexError) as e: + logging.warning(f'There is no .info in the file {f.name}!') + logging.debug(f"{e}") + except json.decoder.JSONDecodeError as e: + logging.warning(f"The file {f.name} has a corrupted or malformed .info file - skipping!") + except BaseException as e: + logging.fatal(f"While parsing file {f.name}, encountered the following error: {e}") + raise e def main(directory='.'): modpack_info = list(get_modpack_info(directory)) - print(json.dumps(modpack_info, indent=2)) + root_mods = [mp for mp in modpack_info if not mp.get('dependencies')] + # print(json.dumps(modpack_info, indent=2)) + # print(json.dumps(root_mods, indent=4)) + dependant_mods = [mp for mp in modpack_info if mp.get('dependencies')] + + mod_tree = [] + for root_mod in root_mods: + mod_tree.append({ + root_mod['modid']: [mod['modid'] for mod in dependant_mods if root_mod['modid'] in mod['dependencies']] + }) + + print(json.dumps(mod_tree, indent=4)) if __name__ == "__main__": args = {arg.lower(): val for arg, val in (a[2:].split('=') for a in sys.argv if '--' in a.lower())} - main(args.get('modpack_path', '.')) + main(r"C:\Users\VY Canis Majoris\OneDrive\Games\Minecraft\Modded Packs\1.12\1.12.2\Sinkhole")