11const { join } = require ( "path" )
22const { existsSync, statSync, rmSync } = require ( "fs" )
3- const { downloadFiles } = require ( "./downloader" )
4- const { spawnSync } = require ( "child_process" )
3+ const { downloadFilesAsync } = require ( "./downloader" )
4+ const { spawn } = require ( "child_process" )
55const { getDirectory, getMinecraftDir } = require ( "../util" )
66const { getJavaPath } = require ( "./javadownloader" )
7- const { env } = require ( "process" )
87
98const log = ( ...data ) => console . log ( '[Fabric Download] ' + data )
109
11- const downloadFabric = async ( version , meta ) => {
10+ function downloadJar ( version , meta , callback ) {
11+ const fabric = `fabric-loader-${ version . fabric_version } -${ version . minecraft_version } `
12+ const jar = join ( getMinecraftDir ( ) , 'versions' , fabric , `${ fabric } .jar` )
13+ if ( existsSync ( jar ) && statSync ( jar ) . size == 0 ) rmSync ( jar )
14+ if ( ! existsSync ( jar ) ) downloadFilesAsync ( [ [ meta . downloads . client . url , jar ] ] , undefined , log , callback )
15+ else callback ( true )
16+ }
17+
18+ const downloadFabric = ( version , meta , callback ) => {
1219 const fabric = `fabric-loader-${ version . fabric_version } -${ version . minecraft_version } `
1320 const fabricDir = join ( getMinecraftDir ( ) , 'versions' , fabric )
14- if ( ! existsSync ( join ( fabricDir , `${ fabric } .json` ) ) ) {
15- const fabricInstallerResponse = await fetch ( 'https://meta.fabricmc.net/v2/versions/installer' )
16- if ( ! fabricInstallerResponse ) return false
17- const fabricInstallerJson = await fabricInstallerResponse . json ( )
18- const fabricInstallerFile = join ( getDirectory ( ) , 'versions' , version . id , `fabric-installer-${ fabricInstallerJson [ 0 ] . version } .jar` )
19- if ( ! downloadFiles ( [ [ fabricInstallerJson [ 0 ] . url , fabricInstallerFile ] ] , undefined , log ) ) return false
20- log ( 'Executing Fabric installer...' )
21- const args = [ '-jar' , fabricInstallerFile , 'client' , '-dir' , getMinecraftDir ( ) , '-mcversion' , version . minecraft_version , '-loader' , version . fabric_version , '-noprofile' ]
22- if ( spawnSync ( join ( getJavaPath ( meta . javaVersion . component ) , 'bin' , 'javaw' ) , args , {
23- cwd : getDirectory ( )
24- } ) . signal != 0 ) return false
25- log ( 'Successfully installed Fabric Loader' )
21+ if ( existsSync ( join ( fabricDir , `${ fabric } .json` ) ) ) downloadJar ( version , meta , callback )
22+ else {
23+ fetch ( 'https://meta.fabricmc.net/v2/versions/installer' ) . then ( fabricInstallerResponse => {
24+ if ( fabricInstallerResponse ) {
25+ fabricInstallerResponse . json ( ) . then ( fabricInstallerJson => {
26+ const fabricInstallerFile = join ( getDirectory ( ) , 'versions' , version . id , `fabric-installer-${ fabricInstallerJson [ 0 ] . version } .jar` )
27+ downloadFilesAsync ( [ [ fabricInstallerJson [ 0 ] . url , fabricInstallerFile ] ] , undefined , log , succes => {
28+ if ( succes ) {
29+ log ( 'Executing Fabric installer...' )
30+ const args = [ '-jar' , fabricInstallerFile , 'client' , '-dir' , getMinecraftDir ( ) , '-mcversion' , version . minecraft_version , '-loader' , version . fabric_version , '-noprofile' ]
31+ spawn ( join ( getJavaPath ( meta . javaVersion . component ) , 'bin' , 'javaw' ) , args , {
32+ cwd : getDirectory ( )
33+ } ) . on ( 'exit' , ( code , signal ) => {
34+ if ( code == 0 ) {
35+ log ( 'Successfully installed Fabric Loader' )
36+ downloadJar ( version , meta , callback )
37+ } else callback ( false )
38+ } )
39+ } else callback ( false )
40+ } )
41+ } )
42+ } else callback ( false )
43+ } )
2644 }
27- if ( statSync ( join ( fabricDir , `${ fabric } .jar` ) ) . size == 0 ) rmSync ( join ( fabricDir , `${ fabric } .jar` ) )
28- if ( ! existsSync ( join ( fabricDir , `${ fabric } .jar` ) ) ) {
29- return await downloadFiles ( [ [ meta . downloads . client . url , join ( fabricDir , `${ fabric } .jar` ) ] ] , undefined , log )
30- } else return true
3145}
3246
3347module . exports = { downloadFabric}
0 commit comments