diff --git a/README.md b/README.md index 8a29f47..cc339c2 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ const { Client, Authenticator } = require('minecraft-launcher-core'); let opts = { clientPackage: null, + authorization: Authenticator.getAuth("username", "password"), root: "./minecraft", os: "windows", version: { @@ -31,16 +32,23 @@ let opts = { } } -const launcher = new Client(opts); -launcher.launch(Authenticator.getAuth(username, password)); +const launcher = new Client(); +launcher.launch(opts); launcher.on('debug', (e) => console.log(e)); launcher.on('data', (e) => console.log(e)); launcher.on('error', (e) => console.log(e)); ``` -### Usage +### Documentation -##### Client Options +#### Client Functions + +| Function | Type | Description | +|----------|---------|-----------------------------------------------------------------------------------------| +| `launch` | Promise | Launches the client with the specified `options` as a parameter | +| `getPid` | Integer | Returns the Minecraft client's PID | + +##### launch | Parameter | Type | Description | Required | |--------------------------|----------|-------------------------------------------------------------------------------------------|----------| @@ -52,6 +60,7 @@ launcher.on('error', (e) => console.log(e)); | `options.memory.max` | String | Max amount of memory being used by Minectaft. | True | | `options.memory.min` | String | Min amount of memory being used by Minectaft. | True | | `options.forge` | String | Path to Universal Forge Jar. | False | +| `options.javaPath` | String | Path to the JRE executable file, will default to `java` if not entered. | False | | `options.server.host` | String | Host url to the server, don't include the port. | False | | `options.server.port` | String | Port of the host url, will default to `25565` if not entered. | False | | `options.proxy.host` | String | Host url to the proxy, don't include the port. | False | @@ -66,19 +75,6 @@ launcher.on('error', (e) => console.log(e)); If you are loading up a client outside of vanilla Minecraft or Forge (Optifine and for an example), you'll need to download the needed files yourself if you don't provide downloads url downloads like Forge and Fabric. Still need to provide the version jar. -#### Client Functions - -| Function | Type | Description | -|----------|---------|-----------------------------------------------------------------------------------------| -| `launch` | Promise | Launches the client with the specified `options` | -| `close` | Promise | Closes current client | -| `restart`| Promise | Restarts by closing the current client then relaunching it with the specified `options` | - -##### launch -| Parameter | Type | Description | Required | -|-----------|--------|--------------------------------------------------------------|----------| -| `authentication` | Object | Result from `getAuth` or the getAuth function itself. | True | - #### Authenticator Functions ##### getAuth @@ -131,5 +127,5 @@ if you don't provide downloads url downloads like Forge and Fabric. Still need t #### What should it look like running from console? - -![gif](https://pierce.is-serious.business/7d91a7.gif) +Showing the emitted information from debug and data, also using `getPid` after the process has been created. +![gif](https://pierce.is-serious.business/3N3PMC4.gif) diff --git a/components/handler.js b/components/handler.js index 51458cf..802088c 100644 --- a/components/handler.js +++ b/components/handler.js @@ -301,7 +301,7 @@ class Handler { } getLaunchOptions(modification) { - return new Promise(resolve => { + return new Promise(async resolve => { let type = modification || this.version; let args = type.minecraftArguments ? type.minecraftArguments.split(' ') : type.arguments.game; @@ -309,6 +309,10 @@ class Handler { if(args.length < 5) args = args.concat(this.version.minecraftArguments ? this.version.minecraftArguments.split(' ') : this.version.arguments.game); + if({}.toString.call(this.options.authorization) === "[object Promise]") { + this.options.authorization = await this.options.authorization; + } + const fields = { '${auth_access_token}': this.options.authorization.access_token, '${auth_session}': this.options.authorization.access_token, @@ -364,4 +368,4 @@ class Handler { } } -module.exports = Handler; \ No newline at end of file +module.exports = Handler; diff --git a/components/launcher.js b/components/launcher.js index 00fb2b5..d53b83d 100644 --- a/components/launcher.js +++ b/components/launcher.js @@ -6,24 +6,17 @@ const fs = require('fs'); const EventEmitter = require('events').EventEmitter; class MCLCore extends EventEmitter { - constructor(options) { + constructor() { super(); - this.options = options; - this.handler = new handler(this); this.pid = null; } - async launch(authorization) { - if(!authorization) throw Error('No authorization to launch the client with!'); - - if({}.toString.call(authorization) === "[object Promise]") { - this.options.authorization = await authorization; - } else { - this.options.authorization = authorization - } - + async launch(options) { + this.options = options; this.options.root = path.resolve(this.options.root); + this.handler = new handler(this); + if(!fs.existsSync(this.options.root)) { this.emit('debug', '[MCLC]: Attempting to create root folder'); fs.mkdirSync(this.options.root); @@ -109,14 +102,9 @@ class MCLCore extends EventEmitter { this.pid = minecraft.pid; } - async close() { - child.exec(`taskkill /PID ${this.pid}`, (err, out, error) => {return {err, out, error}}) - } - - async restart() { - await this.close(); - await this.launch() + getPid() { + return this.pid; } } -module.exports = MCLCore; \ No newline at end of file +module.exports = MCLCore; diff --git a/package.json b/package.json index 59f064c..b8c83f5 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "minecraft-launcher-core", - "version": "3.3.1", - "description": "Module that downloads Minecraft assets and runs Minecraft. Also Supports Forge", + "version": "3.4.0", + "description": "Lightweight module that downloads and runs Minecraft using javascript / NodeJS", "main": "index.js", "dependencies": { "adm-zip": "^0.4.13", @@ -20,7 +20,8 @@ }, "keywords": [ "minecraft", - "minecraft-launcher-node" + "minecraft-launcher-node", + "minecraft-launcher" ], "author": "Pierce Harriz", "license": "MIT",