@ -67,12 +67,12 @@ function follow(entity, dynamic = true, distance = 3) {
console . assert ( entity )
const { GoalFollow } = require ( 'mineflayer-pathfinder' ) . goals
cfg . quiet && console . log ( entity )
|| bot . chat (
` following ${ entity . type
} : $ { entity . username || entity . displayName
} $ { dynamic ? "" : " once" } `
)
// console.log(entity)
cfg . quiet || bot . chat (
` following ${ entity . type
} : $ { entity . username || entity . displayName
} $ { dynamic ? "" : " once" } `
)
entity = entity . entity ? entity . entity : entity
@ -82,6 +82,38 @@ function follow(entity, dynamic = true, distance = 3) {
bot . pathfinder . setGoal ( new GoalFollow ( entity , distance ) , dynamic )
}
function ride ( entity ) {
entity = entity ? . entity || entity
const ridableMobs = [ "Horse" , "Donkey" , "Pig" , "Strider" ]
const vehicle = entity && typeof entity !== "string" ? entity : bot . nearestEntity ( e => {
if ( typeof entity === "string" ) return e . name === entity
const maybeRidableMob = e . mobType ? . split ( " " )
return e . kind == "Vehicles"
|| ridableMobs . includes ( e . mobType )
|| maybeRidableMob && ridableMobs . includes ( maybeRidableMob [ maybeRidableMob . length - 1 ] )
} )
if ( ! vehicle ) {
return cfg . quiet || bot . chat ( ` nothing to ride! ` )
} else if ( ( dist = bot . entity . position . distanceSquared ( vehicle . position ) ) > 36 ) {
bot . lookAt ( vehicle . position )
follow ( vehicle , false )
bot . once ( 'goal_reached' , ride )
return cfg . quiet || bot . chat ( ` ${ vehicle . name } bit far ` )
}
console . log ( "vehicle:" , vehicle )
bot . mount ( vehicle )
}
function moveOrRide ( turn = false , reverse = - 1 , directionLabel , message _parts2 ) {
// bot.once("attach", state = "vehiccel")
if ( bot . vehicle ) {
const amount = parseInt ( message _parts2 [ 0 ] ) || 10 * - reverse
bot . moveVehicle ( turn && amount || 0 , ! turn && amount || 0 )
} else {
command ( [ directionLabel ] . concat ( message _parts2 ) )
}
}
function hit ( blockOrEntity ) {
bot . chat ( ` hitting ${ entity . name || entity . type } ` )
}
@ -194,21 +226,25 @@ function command(message_parts, player) {
break
}
break
case "ride" :
case "mount" :
ride ( message _parts2 [ 0 ] )
break
case "w" :
case "f" :
command ( [ "forward" ] . concat ( message _parts . slice ( 1 ) ) )
moveOrRide ( 0 , - 1 , "forward" , message _parts2 )
break
case "s" :
case "b" :
command ( [ "back" ] . concat ( message _parts . slice ( 1 ) ) )
moveOrRide ( 0 , 1 , "back" , message _parts2 )
break
case "a" :
case "l" :
command ( [ "right" ] . concat ( message _parts . slice ( 1 ) ) )
moveOrRide ( 1 , - 1 , "right" , message _parts2 )
break
case "d" :
case "r" :
command ( [ "left" ] . concat ( message _parts . slice ( 1 ) ) )
moveOrRide ( 1 , 1 , "left" , message _parts2 )
break
case "back" :
case "forward" :
@ -220,7 +256,7 @@ function command(message_parts, player) {
console . info ( bot . controlState [ message _parts [ 0 ] ] , bot . entity . position . floored ( ) )
bot . setControlState ( message _parts [ 0 ] , true )
console . info ( bot . controlState [ message _parts [ 0 ] ] )
setTimeout ( bot . setControlState , 2 00 * ( message _parts [ 1 ] || 1 ) , message _parts [ 0 ] , false )
setTimeout ( bot . setControlState , 1 00 * ( message _parts [ 1 ] || 2 ) , message _parts [ 0 ] , false )
setTimeout ( console . info , 5000 , bot . controlState [ message _parts [ 0 ] ] , bot . entity . position . floored ( ) )
break
case "stop" :
@ -256,4 +292,9 @@ const unload = () => {
bot . off ( 'goal_reached' , goalReached )
}
module . exports = { load , unload , command , stop , initMoves , moveNear , moveXZ , moveY , follow }
module . exports = {
load , unload , command ,
stop , initMoves ,
moveNear , moveXZ , moveY , follow ,
ride
}