LookAtMySuitBot/js/node_modules/mineflayer/lib/loader.js

131 lines
4.8 KiB
JavaScript

const mc = require('minecraft-protocol')
const { EventEmitter } = require('events')
const pluginLoader = require('./plugin_loader')
const plugins = {
bed: require('./plugins/bed'),
title: require('./plugins/title'),
block_actions: require('./plugins/block_actions'),
blocks: require('./plugins/blocks'),
book: require('./plugins/book'),
boss_bar: require('./plugins/boss_bar'),
breath: require('./plugins/breath'),
chat: require('./plugins/chat'),
chest: require('./plugins/chest'),
command_block: require('./plugins/command_block'),
craft: require('./plugins/craft'),
creative: require('./plugins/creative'),
digging: require('./plugins/digging'),
enchantment_table: require('./plugins/enchantment_table'),
entities: require('./plugins/entities'),
experience: require('./plugins/experience'),
explosion: require('./plugins/explosion'),
fishing: require('./plugins/fishing'),
furnace: require('./plugins/furnace'),
game: require('./plugins/game'),
health: require('./plugins/health'),
inventory: require('./plugins/inventory'),
kick: require('./plugins/kick'),
physics: require('./plugins/physics'),
place_block: require('./plugins/place_block'),
rain: require('./plugins/rain'),
ray_trace: require('./plugins/ray_trace'),
resource_pack: require('./plugins/resource_pack'),
scoreboard: require('./plugins/scoreboard'),
team: require('./plugins/team'),
settings: require('./plugins/settings'),
simple_inventory: require('./plugins/simple_inventory'),
sound: require('./plugins/sound'),
spawn_point: require('./plugins/spawn_point'),
tablist: require('./plugins/tablist'),
time: require('./plugins/time'),
villager: require('./plugins/villager'),
anvil: require('./plugins/anvil'),
place_entity: require('./plugins/place_entity'),
generic_place: require('./plugins/generic_place'),
particle: require('./plugins/particle')
}
const supportedVersions = require('./version').supportedVersions
const testedVersions = require('./version').testedVersions
module.exports = {
createBot,
Location: require('./location'),
Painting: require('./painting'),
ScoreBoard: require('./scoreboard'),
BossBar: require('./bossbar'),
Particle: require('./particle'),
supportedVersions,
testedVersions,
supportFeature: (feature, version) => require('prismarine-registry')(version).supportFeature(feature)
}
function createBot (options = {}) {
options.username = options.username ?? 'Player'
options.version = options.version ?? false
options.plugins = options.plugins ?? {}
options.hideErrors = options.hideErrors ?? false
options.logErrors = options.logErrors ?? true
options.loadInternalPlugins = options.loadInternalPlugins ?? true
options.client = options.client ?? null
options.brand = options.brand ?? 'vanilla'
options.respawn = options.respawn ?? true
const bot = new EventEmitter()
bot._client = options.client
bot.end = (reason) => bot._client.end(reason)
if (options.logErrors) {
bot.on('error', err => {
if (!options.hideErrors) {
console.log(err)
}
})
}
pluginLoader(bot, options)
const internalPlugins = Object.keys(plugins)
.filter(key => {
if (typeof options.plugins[key] === 'function') return false
if (options.plugins[key] === false) return false
return options.plugins[key] || options.loadInternalPlugins
}).map(key => plugins[key])
const externalPlugins = Object.keys(options.plugins)
.filter(key => {
return typeof options.plugins[key] === 'function'
}).map(key => options.plugins[key])
bot.loadPlugins([...internalPlugins, ...externalPlugins])
bot._client = bot._client ?? mc.createClient(options)
bot._client.on('connect', () => {
bot.emit('connect')
})
bot._client.on('error', (err) => {
bot.emit('error', err)
})
bot._client.on('end', (reason) => {
bot.emit('end', reason)
})
if (!bot._client.wait_connect) next()
else bot._client.once('connect_allowed', next)
function next () {
bot.registry = require('prismarine-registry')(bot._client.version)
const version = bot.registry.version
if (supportedVersions.indexOf(version.majorVersion) === -1) {
throw new Error(`Version ${version.minecraftVersion} is not supported.`)
}
const latestTestedVersion = testedVersions[testedVersions.length - 1]
const latestProtocolVersion = require('prismarine-registry')(latestTestedVersion).protocolVersion
if (version.protocolVersion > latestProtocolVersion) {
throw new Error(`Version ${version.minecraftVersion} is not supported. Latest supported version is ${latestTestedVersion}.`)
}
bot.protocolVersion = version.version
bot.majorVersion = version.majorVersion
bot.version = version.minecraftVersion
options.version = version.minecraftVersion
bot.supportFeature = bot.registry.supportFeature
setTimeout(() => bot.emit('inject_allowed'), 0)
}
return bot
}