Created
August 2, 2020 11:46
-
-
Save JoeBlakeB/2b51b8deefcf836a8ebe818a23b16fb0 to your computer and use it in GitHub Desktop.
Minecraft Assets Extractor
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/env python3 | |
| # | |
| # Minecraft Assets Extractor | |
| # by JoeBlakeB | |
| # github.com/JoeBlakeB | |
| # | |
| # Example command: | |
| # Extract.py C:\Users\<user>\AppData\Roaming\.minecraft\assets "C:\Users\<user>\Documents\Minecraft Assets" 1.16 | |
| # | |
| import json | |
| import os | |
| import sys | |
| import shutil | |
| if "help" in sys.argv or "-help" in sys.argv or "--help" in sys.argv: | |
| print("Minecraft Assets Extractor") | |
| print(" by JoeBlakeB (github.com/JoeBlakeB)") | |
| print("Interactive Mode:") | |
| print(" " + sys.argv[0]) | |
| print("CLI Mode:") | |
| print(" Current Assets Dir - " + sys.argv[0] + " [Version]") | |
| print(" Specify Assets Dir - " + sys.argv[0] + " [AssetsDir] [Version]") | |
| print(" Specify All Dirs - " + sys.argv[0] + " [AssetsDir] [ExtractDir] [Version]") | |
| exit() | |
| if len(sys.argv) >= 2: | |
| if len(sys.argv) == 2: | |
| assetsDir = "." | |
| else: | |
| assetsDir = sys.argv[1] | |
| else: | |
| assetsDir = input("Where is the assets dir? (Default: .) ") | |
| if assetsDir == "": | |
| assetsDir = "." | |
| if len(sys.argv) >= 2: | |
| if len(sys.argv) < 4: | |
| extractDir = "./Extracted/" | |
| else: | |
| extractDir = sys.argv[2] | |
| else: | |
| extractDir = input("Where do you want to extract to? (Default: ./Extracted/) ") | |
| if extractDir == "": | |
| extractDir = "./Extracted/" | |
| try: | |
| versions = os.listdir(os.path.join(assetsDir + "/indexes")) | |
| except FileNotFoundError as e: | |
| print(e) | |
| exit() | |
| if len(sys.argv) >= 2: | |
| version = sys.argv[-1] | |
| else: | |
| version = input("What version do you want to extract? ") | |
| if version[:-5] != ".json": | |
| version += ".json" | |
| if version not in versions: | |
| print("Could not find version", version) | |
| exit() | |
| indexFile = open(os.path.join(assetsDir, "indexes", version)) | |
| index = indexFile.read() | |
| indexFile.close() | |
| objects = json.loads(index)["objects"] | |
| for file in list(objects.keys()): | |
| fileHash = objects[file]["hash"] | |
| fileHash = os.path.join(assetsDir, "objects/" + fileHash[:2] + "/" + fileHash) | |
| os.makedirs(os.path.join(extractDir, *file.split("/")[:-1]), exist_ok=True) | |
| shutil.copyfile(fileHash, os.path.join(extractDir, file)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment