| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- const mojang = require('mojang')
- const uuidV4 = require('uuid/v4')
- const path = require('path')
- const child_process = require('child_process')
- const library = require('./library.js')
- const fs = require('fs')
- const unzip = require('unzip')
- const mkpath = require('mkdirp');
- exports.launchMinecraft = function(versionData, basePath){
- const authPromise = mojang.auth('EMAIL', 'PASS', uuidV4(), {
- name: 'Minecraft',
- version: 1
- })
- authPromise.then(function(data){
- const hardcodedargs = ''
- const args = finalizeArguments(versionData, data, basePath)
- //console.log(args)
- //TODO make this dynamic
- const child = child_process.spawn('C:\\Program Files\\Java\\jre1.8.0_131\\bin\\javaw.exe', args)
- })
- }
- finalizeArguments = function(versionData, authData, basePath){
- const mcArgs = versionData['minecraftArguments']
- const regex = new RegExp('\\${*(.*)}')
- const argArr = mcArgs.split(' ')
- argArr.unshift('net.minecraft.client.main.Main')
- argArr.unshift(classpathArg(versionData, basePath))
- argArr.unshift('-cp')
- argArr.unshift('-Djava.library.path=' + path.join(basePath, 'natives'))
- argArr.unshift('-Xmn128M')
- argArr.unshift('-XX:-UseAdaptiveSizePolicy')
- argArr.unshift('-XX:+CMSIncrementalMode')
- argArr.unshift('-XX:+UseConcMarkSweepGC')
- argArr.unshift('-Xmx1G')
- for(let i=0; i<argArr.length; i++){
- if(regex.test(argArr[i])){
- const identifier = argArr[i].match(regex)[1]
- //console.log(argArr[i].match(regex)[1])
- let newVal = argArr[i]
- switch(identifier){
- case 'auth_player_name':
- //TODO make this DYNAMIC
- newVal = 'iPepsiHD'
- break
- case 'version_name':
- newVal = versionData['id']
- break
- case 'game_directory':
- newVal = basePath
- break
- case 'assets_root':
- newVal = path.join(basePath, 'assets')
- break
- case 'assets_index_name':
- newVal = versionData['assets']
- break
- case 'auth_uuid':
- //TODO make this DYNAMIC
- newVal = '48f0a3d02ae14ca4aa0011bb8bc4f39e'
- break
- case 'auth_access_token':
- newVal = authData['accessToken']
- break
- case 'user_type':
- //TODO make this DYNAMIC
- newVal = 'MOJANG'
- break
- case 'version_type':
- newVal = versionData['type']
- break
- }
- argArr[i] = newVal
- }
- }
- return argArr
- }
- classpathArg = function(versionData, basePath){
- const libArr = versionData['libraries']
- const libPath = path.join(basePath, 'libraries')
- const nativePath = path.join(basePath, 'natives')
- //TODO make this dynamic
- const cpArgs = ['C:\\Users\\Asus\\Desktop\\LauncherElectron\\mcfiles\\versions\\1.11.2\\1.11.2.jar']
- libArr.forEach(function(lib){
- if(library.validateRules(lib['rules'])){
- if(lib['natives'] == null){
- const dlInfo = lib['downloads']
- const artifact = dlInfo['artifact']
- const to = path.join(libPath, artifact['path'])
- cpArgs.push(to)
- } else {
- //Now we need to extract natives.
- const natives = lib['natives']
- const extractInst = lib['extract']
- const exclusionArr = extractInst['exclude']
- const opSys = library.mojangFriendlyOS()
- const indexId = natives[opSys]
- const dlInfo = lib['downloads']
- const classifiers = dlInfo['classifiers']
- const artifact = classifiers[indexId]
- const to = path.join(libPath, artifact['path'])
- fs.createReadStream(to).pipe(unzip.Parse()).on('entry', function(entry){
- const fileName = entry.path
- const type = entry.type
- const size = entry.size
- console.log(fileName)
- let shouldExclude = false
- exclusionArr.forEach(function(exclusion){
- if(exclusion.indexOf(fileName) > -1){
- shouldExclude = true
- }
- })
- if(shouldExclude){
- entry.autodrain()
- }
- else {
- mkpath.sync(path.join(nativePath, fileName, '..'))
- entry.pipe(fs.createWriteStream(path.join(nativePath, fileName)))
- }
- })
- cpArgs.push(to)
- }
- }
- })
- return cpArgs.join(';')
- }
|