Este documento sobre preguntas frecuentes es para ayudar la gente en cosas básicas
Escribe hideErrors: true
en las opciones de createBot
También puedes usar estos eventos:
client.on('error', () => {})
client.on('end', () => {})
Los servidores spigot, en particular algunos plugins, usan formatos personalizados de chat, tienes que analizarlos con un regex personalizado. Lee y modifica chat_parsing.js para que funcione con tu plugin de chat particular. Lee también http://prismarinejs.github.io/mineflayer/#/tutorial?id=custom-chat
La mayoría de servidores de minecraft tienen plugins, que mandan mensajes al chat cuando ocurre algo. Si es algo sencillo, se puede utilizar la solución anterior, pero si tiene mucha información en un solo mensaje, la otra opción sería usar el evento "messagestr"
que te permite analizar los mensajes fácilmente.
Ejemplo:
El mensaje podría ser así:
(!) U9G has won the /jackpot and received
$26,418,402,450! They purchased 2,350,000 (76.32%) ticket(s) out of the
3,079,185 ticket(s) sold!
const regex = {
first: /\(!\) (.+) has won the \/jackpot and received +/,
second: /\$(.+)! They purchased (.+) \((.+)%\) ticket\(s\) out of the /,
third: /(.+) ticket\(s\) sold!/
}
let jackpot = {}
bot.on('messagestr', msg => {
if (regex.first.test(msg)) {
const username = msg.match(regex.first)[1]
jackpot.username = username
} else if (regex.second.test(msg)) {
const [, moneyWon, boughtTickets, winPercent] = msg.match(regex.second)
jackpot.moneyWon = parseInt(moneyWon.replace(/,/g, ''))
jackpot.boughtTickets = parseInt(boughtTickets.replace(/,/g, ''))
jackpot.winPercent = parseFloat(winPercent)
} else if (regex.third.test(msg)) {
const totalTickets = msg.match(regex.third)[1]
jackpot.totalTickets = parseInt(totalTickets.replace(/,/g, ''))
onDone(jackpot)
jackpot = {}
}
})
Usando bot.chat()
.
Ejemplo:
bot.chat('/give @p diamond')
Crea diferentes bots con createBot y haz diferentes cosas para cada uno, echa un vistazo a multiple.js
bot.inventory.items() te proporciona un array de los ítems del bot. Puedes usar una función recursiva para tirar cada ítem usando bot.toss(). Haz click aquí para ver un ejemplo
Activa el modo de depuración https://github.com/PrismarineJS/mineflayer/blob/master/docs/es/README_ES.md#depuraci%C3%B3n
Una forma de hacerlo es aumentar el valor en la opción checkTimeoutInterval (por ejemplo 300*1000
que es 5 minutos en vez del valor predeterminado, que es 30 segundos). Si con eso todavía te desconecta del servidor, puedes reconectarte automáticamente con este ejemplo https://github.com/PrismarineJS/mineflayer/blob/master/examples/reconnector.js
Puedes usar la propiedad item.nbt
. Está recomendado usar la librería prismarine-nbt
. El método nbt.simplify() podría ser útil.
Ejemplo:
function getLore (item) {
let message = ''
if (item.nbt == null) return message
const nbt = require('prismarine-nbt')
const ChatMessage = require('prismarine-chat')(bot.version)
const data = nbt.simplify(item.nbt)
const display = data.display
if (display == null) return message
const lore = display.Lore
if (lore == null) return message
for (const line of lore) {
message += new ChatMessage(line).toString()
message += '\n'
}
return message
}
Puedes usar una librería como repl
para leer lo que escribes en la consola y usar bot.chat()
para mandarlo al servidor. Puedes encontrar un ejemplo aquí
En la función inject()
the tu plugin, puedes ejecutar la función bot.loadPlugin()
para cargar ese plugin. Si el plugin ya estaba cargado de antes, no pasará nada.
Nota: el orden en el cual los plugins son cargados es dinámico, nunca deberías llamar otro plugin en tu función inject()
.
En las opciones de mineflayer.createBot(opciones)
, quita tu host
de las opciones y pon las cosas que se necesite en estas variables PROXY_IP
, PROXY_PORT
, PROXY_USERNAME
, PROXY_PASSWORD
, MC_SERVER_IP
, MC_SERVER_PORT
, y añade esto a tus opciones:
connect: (client) => {
socks.createConnection({
proxy: {
host: PROXY_IP,
port: PROXY_PORT,
type: 5,
userId: PROXY_USERNAME,
password: PROXY_PASSWORD
},
command: 'connect',
destination: {
host: MC_SERVER_IP,
port: MC_SERVER_PORT
}
}, (err, info) => {
if (err) {
console.log(err)
return
}
client.setSocket(info.socket)
client.emit('connect')
})
}
Esto pasa cuando proporcionas una versión equivocada a mineflayer o mineflayer detecta la versión equivocada
Podrías estar intentando usar una propiedad del bot que todavía no existe, intenta usar la propiedad despues del evento spawn
Actualiza la versión de tu node
Comprueba que la protección de spawn no está impidiendo el bot de realizar la acción
Esta documentación no está mantenida oficialmente, si quiere ver las últimas novedades, por favor dirijase a la documentación original: FAQ