let cfg
let bot
let mcData
const v = require ( 'vec3' )
function block ( pos ) {
const block = pos ? bot . blockAt ( v ( pos ) ) : bot . blockAtCursor ( )
console . log ( block , block && block . getProperties ( ) )
if ( ! block ) {
cfg . quiet || bot . chat ( "empty block" )
return block
}
let info = [ block . type , block . name ]
if ( block . metadata ) info . push ( Object . entries ( block . getProperties ( ) ) )
cfg . quiet || bot . chat ( info . join ( ": " ) )
}
function item (
// hand
loc = bot . quickBarSlot
) {
const item = bot . inventory . slots [ loc + bot . QUICK _BAR _START ]
console . log ( item )
if ( ! item ) {
cfg . quiet || bot . chat ( "no item" )
return item
}
let info = [ item . type , item . name ]
if ( item . metadata ) info . push ( item . metadata )
cfg . quiet || bot . chat ( info . join ( ": " ) )
}
function entity ( name ) {
const entity = bot . nearestEntity ( ( entity ) => {
return name && entity . name ? entity . name == name : true
} )
console . log ( entity )
if ( ! entity ) {
cfg . quiet || bot . chat ( "no entity" )
return entity
}
let info = [ entity . type , entity . name ]
if ( entity . metadata ) info . push ( "len: " + entity . metadata . length )
cfg . quiet || bot . chat ( info . join ( "; " ) )
}
function command ( message _parts ) {
switch ( message _parts . length ) {
case 0 :
// TODO most recent command?
block ( )
break ;
case 1 :
switch ( message _parts [ 0 ] ) {
case "item" :
item ( )
break
case "entity" :
entity ( )
break
case "block" :
default :
block ( )
break ;
}
break ;
case 4 :
switch ( message _parts [ 0 ] ) {
case "block" :
default :
block ( message _parts . slice ( 1 ) )
break ;
}
break ;
default :
break ;
}
}
const load = ( config ) => {
cfg = config
bot = cfg . bot
cfg . info = {
quiet : cfg . quiet ,
}
mcData = bot . mcData || ( bot . mcData = require ( 'minecraft-data' ) ( bot . version ) )
}
const unload = ( ) => { }
module . exports = { load , unload , command , block , item , entity }