mirror of
https://github.com/artegoser/pimi-launcher-core.git
synced 2024-11-22 12:16:21 +03:00
Merge pull request #63 from KevSlashNull/Split-large-MCLCore-launch-into-multiple-methods
Split large MCLCore#launch into multiple methods
This commit is contained in:
commit
5ebe15c7e9
2 changed files with 61 additions and 28 deletions
|
@ -31,9 +31,8 @@ class MCLCore extends EventEmitter {
|
||||||
|
|
||||||
this.handler = new Handler(this)
|
this.handler = new Handler(this)
|
||||||
|
|
||||||
if (fs.existsSync(path.join(__dirname, '..', 'package.json'))) {
|
this.printVersion()
|
||||||
this.emit('debug', `[MCLC]: MCLC version ${JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'package.json'), { encoding: 'utf8' })).version}`)
|
|
||||||
} else { this.emit('debug', '[MCLC]: Package JSON not found, skipping MCLC version check.') }
|
|
||||||
const java = await this.handler.checkJava(this.options.javaPath || 'java')
|
const java = await this.handler.checkJava(this.options.javaPath || 'java')
|
||||||
if (!java.run) {
|
if (!java.run) {
|
||||||
this.emit('debug', `[MCLC]: Couldn't start Minecraft due to: ${java.message}`)
|
this.emit('debug', `[MCLC]: Couldn't start Minecraft due to: ${java.message}`)
|
||||||
|
@ -41,22 +40,10 @@ class MCLCore extends EventEmitter {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!fs.existsSync(this.options.root)) {
|
this.createRootDirectory()
|
||||||
this.emit('debug', '[MCLC]: Attempting to create root folder')
|
this.createGameDirectory()
|
||||||
fs.mkdirSync(this.options.root)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.options.overrides.gameDirectory) {
|
await this.extractPackage()
|
||||||
this.options.overrides.gameDirectory = path.resolve(this.options.overrides.gameDirectory)
|
|
||||||
if (!fs.existsSync(this.options.overrides.gameDirectory)) {
|
|
||||||
fs.mkdirSync(this.options.overrides.gameDirectory, { recursive: true })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.options.clientPackage) {
|
|
||||||
this.emit('debug', `[MCLC]: Extracting client package to ${this.options.root}`)
|
|
||||||
await this.handler.extractPackage()
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.options.installer) {
|
if (this.options.installer) {
|
||||||
// So installers that create a profile in launcher_profiles.json can run without breaking.
|
// So installers that create a profile in launcher_profiles.json can run without breaking.
|
||||||
|
@ -80,15 +67,7 @@ class MCLCore extends EventEmitter {
|
||||||
await this.handler.getJar()
|
await this.handler.getJar()
|
||||||
}
|
}
|
||||||
|
|
||||||
let modifyJson = null
|
const modifyJson = await this.getModifyJson()
|
||||||
if (this.options.forge) {
|
|
||||||
this.options.forge = path.resolve(this.options.forge)
|
|
||||||
this.emit('debug', '[MCLC]: Detected Forge in options, getting dependencies')
|
|
||||||
modifyJson = await this.handler.getForgedWrapped()
|
|
||||||
} else if (this.options.version.custom) {
|
|
||||||
this.emit('debug', '[MCLC]: Detected custom in options, setting custom version file')
|
|
||||||
modifyJson = modifyJson || JSON.parse(fs.readFileSync(path.join(this.options.root, 'versions', this.options.version.custom, `${this.options.version.custom}.json`), { encoding: 'utf8' }))
|
|
||||||
}
|
|
||||||
|
|
||||||
const args = []
|
const args = []
|
||||||
|
|
||||||
|
@ -130,12 +109,60 @@ class MCLCore extends EventEmitter {
|
||||||
this.emit('arguments', launchArguments)
|
this.emit('arguments', launchArguments)
|
||||||
this.emit('debug', `[MCLC]: Launching with arguments ${launchArguments.join(' ')}`)
|
this.emit('debug', `[MCLC]: Launching with arguments ${launchArguments.join(' ')}`)
|
||||||
|
|
||||||
|
return this.startMinecraft(launchArguments)
|
||||||
|
}
|
||||||
|
|
||||||
|
printVersion () {
|
||||||
|
if (fs.existsSync(path.join(__dirname, '..', 'package.json'))) {
|
||||||
|
const { version } = require('../package.json')
|
||||||
|
this.emit('debug', `[MCLC]: MCLC version ${version}`)
|
||||||
|
} else { this.emit('debug', '[MCLC]: Package JSON not found, skipping MCLC version check.') }
|
||||||
|
}
|
||||||
|
|
||||||
|
createRootDirectory () {
|
||||||
|
if (!fs.existsSync(this.options.root)) {
|
||||||
|
this.emit('debug', '[MCLC]: Attempting to create root folder')
|
||||||
|
fs.mkdirSync(this.options.root)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
createGameDirectory () {
|
||||||
|
if (this.options.overrides.gameDirectory) {
|
||||||
|
this.options.overrides.gameDirectory = path.resolve(this.options.overrides.gameDirectory)
|
||||||
|
if (!fs.existsSync(this.options.overrides.gameDirectory)) {
|
||||||
|
fs.mkdirSync(this.options.overrides.gameDirectory, { recursive: true })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async extractPackage () {
|
||||||
|
if (this.options.clientPackage) {
|
||||||
|
this.emit('debug', `[MCLC]: Extracting client package to ${this.options.root}`)
|
||||||
|
await this.handler.extractPackage()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async getModifyJson () {
|
||||||
|
let modifyJson = null
|
||||||
|
|
||||||
|
if (this.options.forge) {
|
||||||
|
this.options.forge = path.resolve(this.options.forge)
|
||||||
|
this.emit('debug', '[MCLC]: Detected Forge in options, getting dependencies')
|
||||||
|
modifyJson = await this.handler.getForgedWrapped()
|
||||||
|
} else if (this.options.version.custom) {
|
||||||
|
this.emit('debug', '[MCLC]: Detected custom in options, setting custom version file')
|
||||||
|
modifyJson = modifyJson || JSON.parse(fs.readFileSync(path.join(this.options.root, 'versions', this.options.version.custom, `${this.options.version.custom}.json`), { encoding: 'utf8' }))
|
||||||
|
}
|
||||||
|
|
||||||
|
return modifyJson
|
||||||
|
}
|
||||||
|
|
||||||
|
startMinecraft (launchArguments) {
|
||||||
const minecraft = child.spawn(this.options.javaPath ? this.options.javaPath : 'java', launchArguments,
|
const minecraft = child.spawn(this.options.javaPath ? this.options.javaPath : 'java', launchArguments,
|
||||||
{ cwd: this.options.overrides.cwd || this.options.root, detached: this.options.overrides.detached })
|
{ cwd: this.options.overrides.cwd || this.options.root, detached: this.options.overrides.detached })
|
||||||
minecraft.stdout.on('data', (data) => this.emit('data', data.toString('utf-8')))
|
minecraft.stdout.on('data', (data) => this.emit('data', data.toString('utf-8')))
|
||||||
minecraft.stderr.on('data', (data) => this.emit('data', data.toString('utf-8')))
|
minecraft.stderr.on('data', (data) => this.emit('data', data.toString('utf-8')))
|
||||||
minecraft.on('close', (code) => this.emit('close', code))
|
minecraft.on('close', (code) => this.emit('close', code))
|
||||||
|
|
||||||
return minecraft
|
return minecraft
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
6
index.d.ts
vendored
6
index.d.ts
vendored
|
@ -206,6 +206,12 @@ declare module "minecraft-launcher-core" {
|
||||||
|
|
||||||
export class Client extends EventEmitter {
|
export class Client extends EventEmitter {
|
||||||
launch(options: ILauncherOptions): Promise<ChildProcessWithoutNullStreams | null>;
|
launch(options: ILauncherOptions): Promise<ChildProcessWithoutNullStreams | null>;
|
||||||
|
protected printVersion(): void;
|
||||||
|
protected createRootDirectory(): void;
|
||||||
|
protected createGameDirectory(): void;
|
||||||
|
protected async extractPackage(): void;
|
||||||
|
protected async getModifyJson(): any;
|
||||||
|
protected startMinecraft(launchArguments: string[]): Promise<ChildProcessWithoutNullStreams>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const Authenticator: IAuthenticator;
|
export const Authenticator: IAuthenticator;
|
||||||
|
|
Loading…
Add table
Reference in a new issue