diff --git a/lib/plugins/sleeper.js b/lib/plugins/sleeper.js index 82a21e0..a01c3ec 100644 --- a/lib/plugins/sleeper.js +++ b/lib/plugins/sleeper.js @@ -12,11 +12,15 @@ function sleep(quiet = cfg.sleep.quiet) { !quiet && bot.chat("can't sleep, not in overworld now") return } + if (bot.isSleeping && !cfg.sleep.force) { + !quiet && bot.chat("already in bed!") + return + } let bed = bot.findBlock({ matching: block => bot.isABed(block) }) let bed_occupied = bed && bot.parseBedMetadata(bed).occupied - if (bed && !bed_occupied) { + if (bed && bed_occupied) { bot.lookAt(bed.position) bed = bot.findBlock({ matching: block => bot.isABed(block) && !bot.parseBedMetadata(block).occupied @@ -26,23 +30,46 @@ function sleep(quiet = cfg.sleep.quiet) { if (bed && !bed_occupied) { bot.lookAt(bed.position) bot.waitForChunksToLoad(() => { - cfg.plugins.mover && cfg.plugins.mover.moveNear(bed.position) - bot.sleep(bed, (err) => { - if (err) { - !quiet && bot.chat(`can't sleep: ${err.message}`) - } else { - !quiet && bot.chat("zzz") - console.log("sleeping? ", bot.isSleeping) - // hack until this is fixed - // TODO confirm this is fixed - // bot.isSleeping = true - } + cfg.plugins.mover && cfg.plugins.mover.moveNear(bed.position, 2) + bot.once('goal_reached', (goal) => { + console.info(goal) + bot.sleep(bed, (err) => { + if (err) { + !quiet && bot.chat(`can't sleep: ${err.message}`) + } else { + !quiet && bot.chat("zzz") + console.log("sleeping? ", bot.isSleeping) + // hack until this is fixed + // TODO confirm this is fixed + // bot.isSleeping = true + } + }) }) }) - } else if (inv && inv.equipItem("red_bed", "hand", true)) { - // doesn't work fortunately - // FIXME: DONT IMPLEMENT until it is detected as NOT NETHER - // bot.placeBlock() + } else if (bed = bot.inventory.items().filter(bot.isABed)[0]) { + const v = require('vec3') + bot.equip(bed, "hand", (err) => { if (err) console.error(err) }) + bot.waitForChunksToLoad(() => { + let refBlock = + // FIXME hack to get around findBlock returning null + bot.blockAt(bot.entity.position.offset(1, 0, 1), false) + // bot.findBlock({ + // matching: (block) => { + // // if (block && block.type !== 0 && block.position) { + // if (block && block.position) { + // console.info("found", block) + // const blockAbove = bot.blockAt(block.position.offset(0, 1, 0)) + // return !blockAbove || blockAbove.type === 0 + // } + // // console.info("not found", block) + // return false + // } + // , maxDistance: 10 + // }) + console.log(refBlock) + bot.placeBlock(refBlock, new v.Vec3(0, 1, 0), console.error) + setTimeout(sleep, 3000, true) + }) } else { // TODO: use mover // bot.gameplay.solveFor(