const fs = require('fs') if (!fs.readdirSync('.').includes('settings.json')) { console.log('Settings file is missing, using defaults.') fs.copyFileSync('settings_example.json', 'settings.json') } if (!fs.readdirSync('.').includes('secret.json')) { console.log('Secrets file is missing, using defaults.') fs.copyFileSync('secret_example.json', 'secret.json') console.log('Please change the hashing keys in the secrets file.') } const m = require('minecraft-protocol') const generateUser = require('./util/usergen.js') const EventEmitter = require('node:events') const settings = require('./settings.json') module.exports.bot = [] const botplug = [] const bpl = fs.readdirSync('plugins') for (const plugin of bpl) { if (!plugin.endsWith('.js')) { continue } try { botplug.push(require(`./plugins/${plugin}`)) } catch (e) { console.log(e) } } const loadplug = (botno) => { botplug.forEach((plug) => { try { if (plug.load) { plug.load(module.exports.bot[botno]) } } catch (e) { console.log(e) } }) } const createBot = function createBot (host, oldId) { if (host.options.disabled) { return } const bot = new EventEmitter() bot._client = m.createClient({ host: host.host, port: host.port ? host.port : 25565, username: generateUser(host.options.legalName), version: host.version ? host.version : settings.version_mc }) if (typeof oldId !== 'undefined') { for (const i in module.exports.bot[oldId].interval) { clearInterval(module.exports.bot[oldId].interval[i]) } delete module.exports.bot[oldId] bot.id = oldId module.exports.bot[oldId] = bot } else { bot.id = module.exports.bot.length module.exports.bot.push(bot) } bot.host = host bot.interval = {} bot.info = (msg) => { console.log(`[${bot.id}] [info] ${msg}`) } bot.displayChat = (type, msg) => { console.log(`[${bot.id}] [${type}] ${msg}`) } loadplug(bot.id) bot._client.on('error', (err) => { console.log(err) }) } for (const server of settings.servers) { createBot(server) } module.exports.createBot = createBot