fix(eater): 🥅 catch async error on full food

Attempt to fix async error returned by `bot.consume`.
Fixed by wrapping in a `try{}` block and using `.catch`.
Still don't know why or how this works 🤷.
master
jay 3 years ago
parent 1e82045221
commit 1597acca72
  1. 32
      lib/plugins/eater.js

@ -2,11 +2,7 @@ let cfg = {}
let bot = {}
let isEating = false
function callbackHandle(err) {
if (err) console.error(err)
}
function eat(callback) {
function eat(callback = e => e && console.error(e)) {
isEating = true
const foodNames = require('minecraft-data')(bot.version).foodsArray.map((item) => item.name)
@ -37,23 +33,23 @@ function eat(callback) {
bot.equip(best_food, 'hand', function (error) {
if (error) {
console.error(error)
console.warn(error, best_food)
isEating = false
bot.emit('eat_stop')
} else {
bot.consume(function (err) {
if (err) {
console.error(err)
isEating = false
bot.emit('eat_stop')
return callback(err)
} else {
try {
bot.consume().catch(error => {
if (error.message === "Food is full") {
console.warn(error, best_food)
} else {
return callback({ error, best_food })
}
}).finally(() => {
isEating = false
bot.emit('eat_stop')
callback(null)
if (!bot.food === 20) eat(callbackHandle)
}
})
})
} catch { }
if (bot.food !== 20) eat(callback)
}
})
}
@ -76,7 +72,7 @@ function checkFood() {
// TODO implement better idle state
) || true // idle most likely
) {
eat(callbackHandle)
eat()
}
}
}

Loading…
Cancel
Save