|
|
|
@ -11,17 +11,16 @@ let movements = [] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function initMoves(bot = bot, mcData = bot.mcData) { |
|
|
|
|
console.info(movements) |
|
|
|
|
if (movements.length > 0) { |
|
|
|
|
bot.pathfinder.setMovements(movements.defaultMove) |
|
|
|
|
return console.warn("movements already initialized!") |
|
|
|
|
return console.warn("go init: movements already initialized!", movements) |
|
|
|
|
} |
|
|
|
|
let defaultMove = new Movements(bot, mcData) |
|
|
|
|
defaultMove.canDig = false |
|
|
|
|
defaultMove.scafoldingBlocks.push(mcData.blocksByName.slime_block.id) |
|
|
|
|
defaultMove.blocksCantBreak.add(mcData.blocksByName.glass.id) |
|
|
|
|
defaultMove.blocksToAvoid.add(mcData.blocksByName.magma_block.id) |
|
|
|
|
movements.push(defaultMove) |
|
|
|
|
const normalMove = new Movements(bot, mcData) |
|
|
|
|
normalMove.canDig = false |
|
|
|
|
normalMove.scafoldingBlocks.push(mcData.blocksByName.slime_block.id) |
|
|
|
|
normalMove.blocksCantBreak.add(mcData.blocksByName.glass.id) |
|
|
|
|
normalMove.blocksToAvoid.add(mcData.blocksByName.magma_block.id) |
|
|
|
|
movements.push(normalMove) |
|
|
|
|
movements.defaultMove = movements[0] |
|
|
|
|
|
|
|
|
|
bot.pathfinder.setMovements(defaultMove) |
|
|
|
@ -82,6 +81,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"] |
|
|
|
@ -107,7 +166,8 @@ function ride(entity) { |
|
|
|
|
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 |
|
|
|
|
// FIXME moveVehicle should be +-1 or 0?
|
|
|
|
|
const amount = Math.sign(parseInt(message_parts2[0]) || -reverse) |
|
|
|
|
bot.moveVehicle(turn && amount || 0, !turn && amount || 0) |
|
|
|
|
} else { |
|
|
|
|
command([directionLabel].concat(message_parts2)) |
|
|
|
@ -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) |
|
|
|
@ -246,6 +311,11 @@ function command(message_parts, player) { |
|
|
|
|
case "r": |
|
|
|
|
moveOrRide(1, 1, "left", message_parts2) |
|
|
|
|
break |
|
|
|
|
case "up": |
|
|
|
|
case "u": |
|
|
|
|
case "j": |
|
|
|
|
moveOrRide(1, 1, "left", message_parts2) |
|
|
|
|
break |
|
|
|
|
case "back": |
|
|
|
|
case "forward": |
|
|
|
|
case "jump": |
|
|
|
|