11const { join } = require ( "path" )
22const { downloadFilesAsync } = require ( "./downloader" )
33const { getMinecraftDir } = require ( "../util" )
4+ const { platform } = require ( "os" )
5+ const { getJavaPath } = require ( "./javadownloader" )
6+ const { spawn } = require ( "child_process" )
7+ const { env, stdout, stderr } = require ( "process" )
8+ const { existsSync, mkdirSync } = require ( "fs" )
49
510const log = ( ...data ) => console . log ( '[Library Download] ' + data )
611
7- const downloadLibraries = ( meta , callback ) => {
12+ const collectLibraries = ( meta , checkRule ) => {
813 const dir = join ( getMinecraftDir ( ) , 'libraries' )
9- const libraries = meta . libraries . map ( library => [ library . downloads . artifact . url , join ( dir , library . downloads . artifact . path ) ] )
10- downloadFilesAsync ( libraries , undefined , log , callback )
14+ const allowedLibraries = meta . libraries . filter ( library => library . rules ? library . rules . every ( checkRule ) : true )
15+ const libraries = [ ]
16+ allowedLibraries . forEach ( library => {
17+ if ( library . downloads . classifiers ) {
18+ const classifier = library . natives [ platform ( ) == 'win32' ? 'windows' : 'linux' ]
19+ const download = library . downloads . classifiers [ classifier ]
20+ libraries . push ( [ download . url , join ( dir , download . path ) ] )
21+ } else if ( library . downloads . artifact ) libraries . push ( [ library . downloads . artifact . url , join ( dir , library . downloads . artifact . path ) ] )
22+ } )
23+ return libraries
1124}
1225
13- module . exports = { downloadLibraries}
26+ const collectNatives = ( meta , checkRule ) => {
27+ const dir = join ( getMinecraftDir ( ) , 'libraries' )
28+ const allowedLibraries = meta . libraries . filter ( library => library . rules ? library . rules . every ( checkRule ) : true )
29+ const natives = [ ]
30+ allowedLibraries . forEach ( library => {
31+ if ( library . downloads . classifiers ) {
32+ const classifier = library . natives [ platform ( ) == 'win32' ? 'windows' : 'linux' ]
33+ const download = library . downloads . classifiers [ classifier ]
34+ natives . push ( join ( dir , download . path ) )
35+ }
36+ } )
37+ return natives
38+ }
39+
40+ const extractNatives = ( meta , natives , nativesDirectory , separator , callback ) => {
41+ if ( ! existsSync ( nativesDirectory ) ) mkdirSync ( nativesDirectory , { recursive : true } )
42+ if ( natives . length == 0 ) callback ( true )
43+ else {
44+ const native = natives . shift ( )
45+ spawn ( join ( getJavaPath ( meta . javaVersion . component ) , 'bin' , 'jar' ) , [ 'xf' , native ] , {
46+ cwd : nativesDirectory ,
47+ env : { PATH : env . PATH + separator + getJavaPath ( meta . javaVersion . component ) }
48+ } ) . on ( 'exit' , status => {
49+ if ( status == 0 ) extractNatives ( meta , natives , nativesDirectory , separator , callback )
50+ else callback ( false )
51+ } )
52+ }
53+ }
54+
55+ module . exports = { collectLibraries, collectNatives, extractNatives}
0 commit comments