From 85ed5326c2d79728acdae13c3d1df212a6eebffa Mon Sep 17 00:00:00 2001 From: Fierelier Date: Mon, 29 Mar 2021 07:51:39 +0200 Subject: [PATCH] Download libraries and natives --- offline-minecraft-launcher.py | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/offline-minecraft-launcher.py b/offline-minecraft-launcher.py index b831834..d9754c5 100644 --- a/offline-minecraft-launcher.py +++ b/offline-minecraft-launcher.py @@ -118,10 +118,21 @@ def processVersion(versionsPath,libraryPath,nativePath,version): for library in clientJson["libraries"]: if "downloads" in library: + # Libraries if "artifact" in library["downloads"]: library["downloads"]["artifact"]["path"] = library["downloads"]["artifact"]["path"].replace("/",os.path.sep) libraries.append(p(libraryPath,library["downloads"]["artifact"]["path"])) + if "url" in library["downloads"]["artifact"] and library["downloads"]["artifact"]["url"] != "": + downloadLibraries[p(libraryPath,library["downloads"]["artifact"]["path"])] = library["downloads"]["artifact"]["url"] + + # Natives if "classifiers" in library["downloads"]: + for classifier in library["downloads"]["classifiers"]: + native = library["downloads"]["classifiers"][classifier] + native["path"] = native["path"].replace("/",os.path.sep) + if "url" in native and native["url"] != "": + downloadLibraries[p(nativePath,native["path"])] = native["url"] + native = False if "natives-" +lv["osName"] in library["downloads"]["classifiers"]: native = library["downloads"]["classifiers"]["natives-" +lv["osName"]] @@ -130,10 +141,9 @@ def processVersion(versionsPath,libraryPath,nativePath,version): native = library["downloads"]["classifiers"]["natives-osx"] if native != False: - native["path"] = native["path"].replace("/",os.path.sep) natives.append(p(nativePath,native["path"])) elif "name" in library: - #net.fabricmc:sponge-mixin:0.9.2+mixin.0.8.2 + # Stupid libraries libSplit = library["name"].rsplit(":",1) libVersion = libSplit[1] libName = libSplit[0].rsplit(":",1)[1] @@ -147,7 +157,7 @@ def processVersion(versionsPath,libraryPath,nativePath,version): fullUrl = fullUrl + "/" + libPath downloadLibraries[p(libraryPath,library["path"])] = fullUrl - libraries.append(p(versionPath,version + ".jar")) + if os.path.isfile(p(versionPath,version + ".jar")): libraries.append(p(versionPath,version + ".jar")) if "arguments" in clientJson: for arg in clientJson["arguments"]["game"]: @@ -215,11 +225,18 @@ def main(): if lv["osName"] != "windows": separator = ":" libraryList = separator.join(libraries) - print("Downloading libraries...") + print("\nLibraries:") + for library in libraries: + print("- " +library) + + print("\nDownloading libraries...") for library in downloadLibraries: fileDl(downloadLibraries[library],library,read = False) - print("Extracting natives...") + for library in libraries: + if not os.path.isfile(library): print("Warning, missing lib: " +library) + + print("\nExtracting natives...") if not os.path.isdir(nativesOutPath): os.makedirs(nativesOutPath) for native in natives: subprocess.run(["7z","x",native,"-o" +nativesOutPath,"-aos"],check=True,stdout=subprocess.DEVNULL) @@ -250,7 +267,7 @@ def main(): arg = arg.replace("${" +var+ "}",launcherVariables[var]) args.append(arg) - print("Launching Minecraft...") + print("\nLaunching Minecraft...") if lv["console"] == "1": subprocess.run([lv["java"]] + args,check = True) else: