33import shutil
44from concurrent .futures import ThreadPoolExecutor
55from pathlib import Path
6+ import platform
67from typing import Optional
78
89import httpx
2324
2425__all__ = ["install_minecraft_version" ]
2526
26-
27+ _platform = platform .system ().lower ()
28+ if _platform == "darwin" :
29+ _platform = "osx"
2730
2831
2932def _download_and_extract_native (
@@ -65,7 +68,8 @@ def install_libraries(
6568 """
6669 base_path = Path (base_path )
6770 filtered_libraries = [
68- lib_info for lib_info in libraries
71+ lib_info
72+ for lib_info in libraries
6973 if parse_rule_list (lib_info .get ("rules" , []), {})
7074 ]
7175
@@ -75,8 +79,15 @@ def install_libraries(
7579 def download_library (lib_info : ClientJsonLibrary ) -> None :
7680 # Download natives if present
7781 if "classifiers" in lib_info .get ("downloads" , {}):
78- jar_filename_native = lib_info ["downloads" ]["artifact" ]["path" ]
79- libraries_path = base_path / "libraries" / lib_info ["path" ]
82+ jar_filename_native = lib_info ["downloads" ].get ("artifact" )
83+ if jar_filename_native :
84+ jar_filename_native = jar_filename_native ["path" ]
85+ else :
86+ jar_filename_native = lib_info ["downloads" ]["classifiers" ][
87+ f"natives-{ _platform } "
88+ ]["path" ]
89+ libraries_path = base_path / "libraries" / Path (jar_filename_native ).parent
90+ libraries_path .mkdir (parents = True , exist_ok = True )
8091 check_path_inside_minecraft_directory (str (base_path ), str (libraries_path ))
8192 _download_and_extract_native (
8293 lib_info , libraries_path , jar_filename_native , version_id , base_path
@@ -203,7 +214,10 @@ def do_version_install(
203214 jobs .append (
204215 {
205216 "url" : client_info ["url" ],
206- "path" : base_path / "versions" / versiondata ["id" ] / f"{ versiondata ['id' ]} .jar" ,
217+ "path" : base_path
218+ / "versions"
219+ / versiondata ["id" ]
220+ / f"{ versiondata ['id' ]} .jar" ,
207221 "sha1" : client_info ["sha1" ],
208222 "minecraft_directory" : str (base_path ),
209223 }
@@ -279,4 +293,4 @@ def install_minecraft_version(
279293 sha1 = version .get ("sha1" ),
280294 )
281295 return
282- raise VersionNotFound (version_id )
296+ raise VersionNotFound (version_id )
0 commit comments