@ -7,49 +7,75 @@ let bot = {}
let inv
// cfg.autosleep = false
function sleep ( quiet ) {
quiet = quiet !== undefined ? quiet : cfg . sleep . quiet
function sleep ( quiet = cfg . sleep . quiet ) {
if ( bot . game . dimension !== "minecraft:overworld" || cfg . sleep . force ) {
! 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 bedstatus = bed && bot . parseBedMetadata ( bed ) . occupied ? "n unoccupied" : ""
if ( bed && bedstatus == "n unoccupied" ) {
let bed _occupied = bed && bot . parseBedMetadata ( bed ) . occupied
if ( bed && bed _occupied ) {
bot . lookAt ( bed . position )
bed = bot . findBlock ( {
matching : block => bot . isABed ( block ) && ! bot . parseBedMetadata ( block ) . occupied
} ) || bed
bedstatus = bot . parseBedMetadata ( bed ) . occupied ? "n unoccupied" : ""
bed _occupied = bot . parseBedMetadata ( bed ) . occupied
}
if ( bed && bedstatus == "" ) {
if ( bed && ! bed _occupied ) {
bot . lookAt ( bed . position )
bot . waitForChunksToLoad ( ( ) => {
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
// bot.isSleeping = bot.isSleeping ? bot.isSleeping : true
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(
// new ObtainItem("bed"), (err) => {
// if (err) {
// !quiet && bot.chat(`need a${bedstatus} bed: may not see if just placed`)
! quiet && bot . chat ( ` need a ${ bed _occupied ? "n unoccupied" : "" } bed: may not see if just placed ` )
// }
// }
// )
@ -72,7 +98,7 @@ function autoSleep() {
if ( ! bot . time . isDay && ! cfg . sleep . timeoutFn && cfg . sleep . auto && ! bot . isSleeping ) {
sleep ( )
cfg . sleep . timeoutFn = setTimeout ( ( ) => { cfg . sleep . timeoutFn = null } , cfg . sleep . timeout )
console . log ( "sleeping?" , bot . isSleeping , bot . time )
console . log ( "sleeping?" , bot . isSleeping , bot . time . isDay , bot . time . timeOfDay )
}
}