|
@@ -2,6 +2,10 @@ const mojang = require('mojang')
|
|
|
const uuidV4 = require('uuid/v4')
|
|
const uuidV4 = require('uuid/v4')
|
|
|
const path = require('path')
|
|
const path = require('path')
|
|
|
const child_process = require('child_process')
|
|
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){
|
|
exports.launchMinecraft = function(versionData, basePath){
|
|
|
const authPromise = mojang.auth('EMAIL', 'PASS', uuidV4(), {
|
|
const authPromise = mojang.auth('EMAIL', 'PASS', uuidV4(), {
|
|
@@ -11,8 +15,9 @@ exports.launchMinecraft = function(versionData, basePath){
|
|
|
authPromise.then(function(data){
|
|
authPromise.then(function(data){
|
|
|
const hardcodedargs = ''
|
|
const hardcodedargs = ''
|
|
|
const args = finalizeArguments(versionData, data, basePath)
|
|
const args = finalizeArguments(versionData, data, basePath)
|
|
|
- console.log(args)
|
|
|
|
|
- const child = child_process.execFile(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)
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -20,6 +25,15 @@ finalizeArguments = function(versionData, authData, basePath){
|
|
|
const mcArgs = versionData['minecraftArguments']
|
|
const mcArgs = versionData['minecraftArguments']
|
|
|
const regex = new RegExp('\\${*(.*)}')
|
|
const regex = new RegExp('\\${*(.*)}')
|
|
|
const argArr = mcArgs.split(' ')
|
|
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++){
|
|
for(let i=0; i<argArr.length; i++){
|
|
|
if(regex.test(argArr[i])){
|
|
if(regex.test(argArr[i])){
|
|
|
const identifier = argArr[i].match(regex)[1]
|
|
const identifier = argArr[i].match(regex)[1]
|
|
@@ -28,7 +42,7 @@ finalizeArguments = function(versionData, authData, basePath){
|
|
|
switch(identifier){
|
|
switch(identifier){
|
|
|
case 'auth_player_name':
|
|
case 'auth_player_name':
|
|
|
//TODO make this DYNAMIC
|
|
//TODO make this DYNAMIC
|
|
|
- newVal = 'NAME'
|
|
|
|
|
|
|
+ newVal = 'iPepsiHD'
|
|
|
break
|
|
break
|
|
|
case 'version_name':
|
|
case 'version_name':
|
|
|
newVal = versionData['id']
|
|
newVal = versionData['id']
|
|
@@ -44,7 +58,7 @@ finalizeArguments = function(versionData, authData, basePath){
|
|
|
break
|
|
break
|
|
|
case 'auth_uuid':
|
|
case 'auth_uuid':
|
|
|
//TODO make this DYNAMIC
|
|
//TODO make this DYNAMIC
|
|
|
- newVal = 'UUID'
|
|
|
|
|
|
|
+ newVal = '48f0a3d02ae14ca4aa0011bb8bc4f39e'
|
|
|
break
|
|
break
|
|
|
case 'auth_access_token':
|
|
case 'auth_access_token':
|
|
|
newVal = authData['accessToken']
|
|
newVal = authData['accessToken']
|
|
@@ -60,5 +74,64 @@ finalizeArguments = function(versionData, authData, basePath){
|
|
|
argArr[i] = newVal
|
|
argArr[i] = newVal
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- return argArr.join(' ')
|
|
|
|
|
|
|
+
|
|
|
|
|
+ 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(';')
|
|
|
}
|
|
}
|