| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- /**
- * File is officially deprecated in favor of processbuilder.js,
- * will be removed once the new module is 100% complete and this
- * is no longer needed for reference.
- */
- const mojang = require('mojang')
- const uuidV4 = require('uuid/v4')
- const path = require('path')
- const child_process = require('child_process')
- const ag = require('./assetguard.js')
- const AdmZip = require('adm-zip')
- const fs = require('fs')
- const mkpath = require('mkdirp');
- function launchMinecraft(versionData, forgeData, basePath){
- const authPromise = mojang.auth('email', 'pass', uuidV4(), {
- name: 'Minecraft',
- version: 1
- })
- authPromise.then(function(data){
- console.log(data)
- const args = finalizeArgumentsForge(versionData, forgeData, data, basePath)
- //BRUTEFORCE for testing
- //args.push('-mods modstore\\chatbubbles\\chatbubbles\\1.0.1_for_1.11.2\\mod_chatBubbles-1.0.1_for_1.11.2.litemod,modstore\\com\\westeroscraft\\westerosblocks\\3.0.0-beta-71\\westerosblocks-3.0.0-beta-71.jar,modstore\\mezz\\jei\\1.11.2-4.3.5.277\\jei-1.11.2-4.3.5.277.jar,modstore\\net\\optifine\\optifine\\1.11.2_HD_U_B9\\optifine-1.11.2_HD_U_B9.jar')
- //args.push('--modListFile absolute:C:\\Users\\Asus\\Desktop\\LauncherElectron\\app\\assets\\WesterosCraft-1.11.2.json')
- //TODO make this dynamic
- const child = child_process.spawn('C:\\Program Files\\Java\\jdk1.8.0_152\\bin\\javaw.exe', args)
- child.stdout.on('data', (data) => {
- console.log('Minecraft:', data.toString('utf8'))
- })
- child.stderr.on('data', (data) => {
- console.log('Minecraft:', data.toString('utf8'))
- })
- child.on('close', (code, signal) => {
- console.log('Exited with code', code)
- })
- })
- }
- function finalizeArgumentsForge(versionData, forgeData, authData, basePath){
- const mcArgs = forgeData['minecraftArguments']
- const gameProfile = authData['selectedProfile']
- const regex = new RegExp('\\${*(.*)}')
- const argArr = mcArgs.split(' ')
- const staticArgs = ['-Xmx4G',
- '-XX:+UseConcMarkSweepGC',
- '-XX:+CMSIncrementalMode',
- '-XX:-UseAdaptiveSizePolicy',
- '-Xmn128M',
- '-Djava.library.path=' + path.join(basePath, 'natives'),
- '-cp',
- classpathArg(versionData, basePath).concat(forgeClasspathArg(forgeData, basePath)).join(';'),
- forgeData.mainClass]
- for(let i=0; i<argArr.length; i++){
- if(regex.test(argArr[i])){
- const identifier = argArr[i].match(regex)[1]
- let newVal = argArr[i]
- switch(identifier){
- case 'auth_player_name':
- newVal = gameProfile['name']
- break
- case 'version_name':
- //newVal = versionData['id']
- newVal = 'WesterosCraft-1.11.2'
- 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':
- newVal = gameProfile['id']
- break
- case 'auth_access_token':
- newVal = authData['accessToken']
- break
- case 'user_type':
- newVal = 'MOJANG'
- break
- case 'version_type':
- newVal = versionData['type']
- break
- }
- argArr[i] = newVal
- }
- }
- return staticArgs.concat(argArr)
- }
- function finalizeArguments(versionData, authData, basePath){
- const mcArgs = versionData['minecraftArguments']
- const gameProfile = authData['selectedProfile']
- const regex = new RegExp('\\${*(.*)}')
- const argArr = mcArgs.split(' ')
- const staticArgs = ['-Xmx1G',
- '-XX:+UseConcMarkSweepGC',
- '-XX:+CMSIncrementalMode',
- '-XX:-UseAdaptiveSizePolicy',
- '-Xmn128M',
- '-Djava.library.path=' + path.join(basePath, 'natives'),
- '-cp',
- classpathArg(versionData, basePath).join(';'),
- versionData.mainClass]
- for(let i=0; i<argArr.length; i++){
- if(regex.test(argArr[i])){
- const identifier = argArr[i].match(regex)[1]
- let newVal = argArr[i]
- switch(identifier){
- case 'auth_player_name':
- newVal = gameProfile['name']
- 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':
- newVal = gameProfile['id']
- break
- case 'auth_access_token':
- newVal = authData['accessToken']
- break
- case 'user_type':
- newVal = 'MOJANG'
- break
- case 'version_type':
- newVal = versionData['type']
- break
- }
- argArr[i] = newVal
- }
- }
- return staticArgs.concat(argArr)
- }
- function forgeClasspathArg(forgeData, basePath){
- const libArr = forgeData['libraries']
- const libPath = path.join(basePath, 'libraries')
- const cpArgs = []
- for(let i=0; i<libArr.length; i++){
- const lib = libArr[i]
- const to = path.join(libPath, ag._resolvePath(lib.name, '.jar'))
- cpArgs.push(to)
- }
- return cpArgs
- }
- function classpathArg(versionData, basePath){
- const libArr = versionData['libraries']
- const libPath = path.join(basePath, 'libraries')
- const nativePath = path.join(basePath, 'natives')
- const version = versionData['id']
- const cpArgs = [path.join(basePath, 'versions', version, version + '.jar')]
- libArr.forEach(function(lib){
- if(ag.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 = ag.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'])
- let zip = new AdmZip(to)
- let zipEntries = zip.getEntries()
- for(let i=0; i<zipEntries.length; i++){
- const fileName = zipEntries[i].entryName
- let shouldExclude = false
- exclusionArr.forEach(function(exclusion){
- if(exclusion.indexOf(fileName) > -1){
- shouldExclude = true
- }
- })
- if(!shouldExclude){
- mkpath.sync(path.join(nativePath, fileName, '..'))
- fs.writeFile(path.join(nativePath, fileName), zipEntries[i].getData())
- }
- }
- cpArgs.push(to)
- }
- }
- })
- //BRUTEFORCE LIB INJECTION
- //FOR TESTING ONLY
- cpArgs.push(path.join(libPath, 'com', 'mumfrey', 'liteloader', '1.11.2-SNAPSHOT', 'liteloader-1.11.2-SNAPSHOT.jar'))
- return cpArgs
- }
- module.exports = {
- launchMinecraft
- }
|