feat(mover): ✨ add an action to move / run away from an entity or goal
based on `pathfinder` goal `GoalInvert`; behaves slightly strange
This commit is contained in:
parent
b453b7d6bd
commit
c42a3a2304
|
@ -82,6 +82,66 @@ function follow(entity, dynamic = true, distance = 3) {
|
|||
bot.pathfinder.setGoal(new GoalFollow(entity, distance), dynamic)
|
||||
}
|
||||
|
||||
function away(entity = bot.nearestEntity(), invertInvert = true, dynamic = true, distance = 10) {
|
||||
const currentGoal = bot.pathfinder.goal
|
||||
console.assert(currentGoal || entity)
|
||||
const { GoalInvert } = require('mineflayer-pathfinder').goals
|
||||
|
||||
bot.pathfinder.setMovements(movements.defaultMove)
|
||||
|
||||
if (!currentGoal) {
|
||||
const { GoalFollow } = require('mineflayer-pathfinder').goals
|
||||
|
||||
if (entity.entity) {
|
||||
console.log("go away entity:", entity, entity.entity)
|
||||
entity = entity.entity
|
||||
}
|
||||
|
||||
cfg.quiet || bot.chat(
|
||||
`going away from ${entity?.type
|
||||
}: ${entity?.username || entity?.displayName
|
||||
}${dynamic ? "" : " once"}`
|
||||
)
|
||||
// alternative implementation
|
||||
// follow(entity, dynamic, distance)
|
||||
// bot.pathfinder.setGoal(new GoalInvert(bot.pathfinder.goal), dynamic)
|
||||
return bot.pathfinder.setGoal(new GoalInvert(
|
||||
new GoalFollow(entity, distance)
|
||||
), dynamic)
|
||||
}
|
||||
|
||||
if (currentGoal instanceof GoalInvert) {
|
||||
const currEntity = currentGoal.goal.entity
|
||||
console.log("go away inverse goal:", currentGoal.goal)
|
||||
if (invertInvert) {
|
||||
cfg.quiet || bot.chat(
|
||||
`switching towards ${currentGoal.goal?.constructor.name
|
||||
}: ${currEntity?.type
|
||||
}: ${currEntity?.username || currEntity?.displayName
|
||||
}${dynamic ? "" : " once"}`
|
||||
)
|
||||
bot.pathfinder.setGoal(currentGoal.goal, dynamic)
|
||||
} else {
|
||||
cfg.quiet || bot.chat(
|
||||
`already going away from ${currentGoal.goal?.constructor.name
|
||||
}; not switching`
|
||||
)
|
||||
}
|
||||
} else {
|
||||
const currEntity = currentGoal.entity
|
||||
console.log("go away goal:", currentGoal)
|
||||
cfg.quiet || bot.chat(
|
||||
`going away from ${currentGoal?.constructor.name
|
||||
}: ${currEntity?.type
|
||||
}: ${currEntity?.username || currEntity?.displayName
|
||||
}${dynamic ? "" : " once"}`
|
||||
)
|
||||
bot.pathfinder.setGoal(new GoalInvert(currentGoal), dynamic)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
function ride(entity) {
|
||||
entity = entity?.entity || entity
|
||||
const ridableMobs = ["Horse", "Donkey", "Pig", "Strider"]
|
||||
|
@ -230,6 +290,11 @@ function command(message_parts, player) {
|
|||
case "mount":
|
||||
ride(message_parts2[0])
|
||||
break
|
||||
case "away":
|
||||
case "run":
|
||||
case "runaway":
|
||||
away()
|
||||
break
|
||||
case "w":
|
||||
case "f":
|
||||
moveOrRide(0, -1, "forward", message_parts2)
|
||||
|
|
Loading…
Reference in New Issue
Block a user