1.2.0 • Published 11 months ago

@ffgflash/mcserver.js v1.2.0

Weekly downloads
-
License
MIT
Repository
github
Last release
11 months ago

MCServerJS

MCServerJS is your javascript solution to minecraft servers, this package allows for easy server manipulation using javascript!

Examples

Server Example

The following example will make a fully functional server that can accept terminal input for executing commands and accepting the EULA

const { Server } = require('@ffgflash/mcserver.js')
const { createInterface } = require('readline/promises')

const version = '1.19.4'
const options = {
  minMemory: 512,
  softMaxMemory: 1024,
  maxMemory: 2048,
  javaPath: 'some/path/to/java/bin',
  path: 'some/path/to/my/server'
}
const server = new Server(version, options)
const rl = createInterface({ input: process.stdin, output: process.stdout })
let eula = false

function prompt() {
  rl.question('')
    .then(input => {
      if (!eula) {
        if (!server.canStop) return rl.close()
        const args = input.split(' ')
        const cmd = args.shift()?.toLowerCase()
        if (cmd === 'setprop') {
          server.log(`Setting property ${args[0]} to ${args[1]}`)
          return server.properties
            .setProperty(args[0], args[1])
            .then(() => server.execute('reload'))
        } else if (cmd === 'getprop') {
          return server.properties.getProperty(args[0]).then(prop => {
            if (!prop)
              server.warn(`Couldn't find a property by the name '${args[0]}'`)
            else server.log(`${prop.name} is ${prop.value}`)
            return
          })
        }
        return server.execute(input)
      }
      eula = false
      return server
        .acceptEula(input.toLowerCase() === 'y')
        .then(accept => (accept ? server.start() : rl.close()))
    })
    .catch(() => {})
    .finally(prompt)
}

rl.on('close', () => process.exit(0))

server.on('download', (file, current, total) => {
  const percent = ((current / total) * 100).toFixed(2)
  const currentMB = (current / 1048576).toFixed(2)
  const totalMB = (total / 1048576).toFixed(2)
  server.log(`Downloading file: ${percent}% (${currentMB}mb / ${totalMB}mb)`)
})

server.on('message', message => console.log(message.content))

server.on('stateUpdate', state => {
  if (state === 'CRASHED') console.log('Press Enter to Continue...')
  else if (state === 'STOPPED') {
    if (eula) return console.log('Do you accept the EULA? (Y/[N])')
    setTimeout(() => rl.close(), 1000)
  }
})

server.on('eula', () => (eula = true))

server.start().then(() => prompt())

Command Line

While MCServer.JS allows for you to control the server through code, it also comes with some nice features like downloading the server.jar and allowing you to accept the EULA without closing the terminal and opening a text editor. So for those who don't want to write a single line of code can use the command line.

mcserver.js [-versions] [--v <version>] [--mn <minMemory>] [--mx <maxMemory>] [--smx <softMaxMemory>] [--java <javaPath>] [--path <path>] [path]

To-Do

1.2.0

11 months ago

1.1.1

11 months ago

1.1.0

11 months ago

1.1.2

11 months ago

1.0.0

12 months ago