@ -30,13 +30,39 @@ function initMoves(bot = bot, mcData = bot.mcData) {
function moveNear ( pos , distance = 3 ) {
const { GoalNear } = require ( 'mineflayer-pathfinder' ) . goals
cfg . quiet || bot . chat ( ` moving to ${ pos } ` )
pos = v ( pos )
cfg . quiet || bot . chat ( ` moving to ${ pos . floored ( ) } ` )
bot . pathfinder . setMovements ( movements . defaultMove )
bot . pathfinder . setGoal ( new GoalNear ( pos . x , pos . y , pos . z , distance ) )
}
function moveXZ ( pos ) {
const { GoalXZ } = require ( 'mineflayer-pathfinder' ) . goals
if ( Array . isArray ( pos ) && pos . length == 2 ) {
pos = v ( pos [ 0 ] , 0 , pos [ 1 ] )
}
pos = v ( pos )
console . log ( pos )
cfg . quiet || bot . chat ( ` moving to ${ pos . floored ( ) } ` )
bot . pathfinder . setMovements ( movements . defaultMove )
bot . pathfinder . setGoal ( new GoalXZ ( pos . x , pos . z ) )
}
function moveY ( pos ) {
const { GoalY } = require ( 'mineflayer-pathfinder' ) . goals
if ( Array . isArray ( pos ) && pos . length == 1 ) {
pos = v ( null , pos [ 0 ] , null )
}
pos = v ( pos )
console . log ( pos )
cfg . quiet || bot . chat ( ` moving to ${ pos . floored ( ) } ` )
bot . pathfinder . setMovements ( movements . defaultMove )
bot . pathfinder . setGoal ( new GoalY ( pos . y ) )
}
function follow ( entity , dynamic = true , distance = 3 ) {
console . assert ( entity )
const { GoalFollow } = require ( 'mineflayer-pathfinder' ) . goals
@ -60,11 +86,123 @@ function hit(blockOrEntity) {
bot . chat ( ` hitting ${ entity . name || entity . type } ` )
}
function goalReached ( goal ) {
console . log ( goal )
const entity = goal ? . entity
let entityInfo = ""
if ( entity ) {
entityInfo += entity . type + ": "
switch ( entity . type ) {
case "player" :
entityInfo += entity . username
break ;
default :
break ;
}
}
cfg . quiet || bot . chat ( ` goal reached: ${ entityInfo } ; pos: [x: ${ goal ? . x } , y: ${ goal ? . y } , z: ${ goal ? . z } ] ` )
}
function stop ( ) {
bot . pathfinder . setGoal ( null )
bot . stopDigging ( )
}
function command ( message _parts , player ) {
const message _parts2 = message _parts . slice ( 1 )
switch ( message _parts [ 0 ] ) {
case "init" :
initMoves ( )
break
case "near" :
switch ( message _parts2 . length ) {
case 0 :
moveNear ( bot . nearestEntity ( ) . position )
break
case 1 :
switch ( message _parts2 [ 0 ] ) {
case "me" :
if ( player ) {
moveNear ( player . position )
} else {
cfg . quiet || bot . chat ( "can't see you" )
}
break ;
default :
const aPlayer = bot . players [ message _parts2 [ 0 ] ] ? bot . players [ message _parts2 [ 0 ] ] . entity : null
if ( aPlayer ) {
moveNear ( aPlayer . position )
} else {
cfg . quiet || bot . chat ( ` can't see ${ message _parts2 [ 0 ] } ` )
}
break ;
}
break
case 2 :
//TODO this isn't near
moveXZ ( message _parts2 )
break
case 3 :
//TODO more checks
moveNear ( message _parts2 )
break
default :
break
}
break
case "follow" :
// message_parts2 = message_parts.slice(2)
switch ( message _parts2 . length ) {
case 0 :
follow ( bot . nearestEntity ( ) )
break
case 1 :
let dist = 3
switch ( message _parts2 [ 0 ] ) {
case "close" :
dist = 1
case "me" :
case "once" :
if ( player ) {
follow ( player , message _parts2 [ 0 ] === "me" , dist )
} else {
cfg . quiet || bot . chat ( "can't see you" )
}
break ;
default :
const aPlayer = bot . players [ message _parts2 [ 0 ] ] ? bot . players [ message _parts2 [ 0 ] ] . entity : null
if ( aPlayer ) {
follow ( aPlayer )
} else {
cfg . quiet || bot . chat ( ` can't see ${ message _parts2 [ 0 ] } ` )
}
break ;
}
break
// case 2:
// bot.lookAt({}) goalxz?
// break
// case 3:
//TODO more checks
// moveNear(message_parts2)
// break
default :
cfg . quiet || bot . chat ( "unknown or bad command" )
break
}
break
case "stop" :
stop ( )
break
default :
return cfg . quiet || bot . chat ( ` unknown command ${ message _parts [ 0 ] } ` )
break ;
}
}
const load = ( config ) => {
cfg = config
bot = cfg . bot
@ -81,11 +219,13 @@ const load = (config) => {
// initMoves(bot, mcData)
setTimeout ( initMoves , 500 , bot , mcData )
bot . on ( 'goal_reached' , goalReached )
}
const unload = ( ) => {
stop ( )
bot . off ( 'goal_reached' , goalReached )
}
module . exports = { load , unload , stop , initMoves , moveNear , follow }
module . exports = { load , unload , command , stop , initMoves , moveNear , moveXZ , moveY , follow }