parent
47a944fe2a
commit
8e4eb7748f
3 changed files with 234 additions and 234 deletions
@ -1,29 +1,29 @@ |
||||
{ |
||||
// Use IntelliSense to learn about possible attributes. |
||||
// Hover to view descriptions of existing attributes. |
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 |
||||
"version": "0.2.0", |
||||
"configurations": [ |
||||
{ |
||||
"type": "node", |
||||
"request": "launch", |
||||
"name": "protospace", |
||||
"skipFiles": [ |
||||
"<node_internals>/**" |
||||
], |
||||
"program": "${workspaceFolder}/lib/index.js", |
||||
"args": ["games.protospace.ca"] |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"request": "launch", |
||||
"name": "Launch Program", |
||||
"skipFiles": [ |
||||
"<node_internals>/**" |
||||
], |
||||
"program": "${workspaceFolder}/lib/index.js", |
||||
// port may need to be changed for each session |
||||
"args": ["localhost", "56901"] |
||||
} |
||||
] |
||||
{ |
||||
// Use IntelliSense to learn about possible attributes. |
||||
// Hover to view descriptions of existing attributes. |
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 |
||||
"version": "0.2.0", |
||||
"configurations": [ |
||||
{ |
||||
"type": "node", |
||||
"request": "launch", |
||||
"name": "protospace", |
||||
"skipFiles": [ |
||||
"<node_internals>/**" |
||||
], |
||||
"program": "${workspaceFolder}/lib/index.js", |
||||
"args": ["games.protospace.ca"] |
||||
}, |
||||
{ |
||||
"type": "node", |
||||
"request": "launch", |
||||
"name": "Launch Program", |
||||
"skipFiles": [ |
||||
"<node_internals>/**" |
||||
], |
||||
"program": "${workspaceFolder}/lib/index.js", |
||||
// port may need to be changed for each session |
||||
"args": ["localhost", "56901"] |
||||
} |
||||
] |
||||
} |
@ -1,113 +1,113 @@ |
||||
let cfg = {} |
||||
let bot = {} |
||||
let isEating = false |
||||
|
||||
function callbackHandle(err) { |
||||
if (err) console.error(err) |
||||
} |
||||
|
||||
function eat(callback) { |
||||
isEating = true |
||||
|
||||
const foodNames = require('minecraft-data')(bot.version).foodsArray.map((item) => item.name) |
||||
|
||||
let available_food = bot.inventory |
||||
.items() |
||||
.filter((item) => foodNames.includes(item.name)) |
||||
|
||||
if (available_food.length === 0 || !available_food) { |
||||
isEating = false |
||||
return callback(new Error('No food found.')) |
||||
} |
||||
|
||||
if (cfg.eat.bannedFood.length > 0) { |
||||
available_food = available_food.filter( |
||||
(item) => !cfg.eat.bannedFood.includes(item.name) |
||||
) |
||||
} |
||||
let priority = cfg.eat.priority |
||||
let best_food = available_food.reduce((prev, current) => (prev[priority] > current[priority]) ? prev : current) |
||||
|
||||
if (!best_food) { |
||||
isEating = false |
||||
return callback(new Error('No best food has been found.')) |
||||
} |
||||
|
||||
bot.emit('eat_start') |
||||
|
||||
bot.equip(best_food, 'hand', function (error) { |
||||
if (error) { |
||||
console.error(error) |
||||
isEating = false |
||||
bot.emit('eat_stop') |
||||
} else { |
||||
bot.consume(function (err) { |
||||
if (err) { |
||||
console.error(err) |
||||
isEating = false |
||||
bot.emit('eat_stop') |
||||
return callback(err) |
||||
} else { |
||||
isEating = false |
||||
bot.emit('eat_stop') |
||||
callback(null) |
||||
if (!bot.food === 20) eat(callbackHandle) |
||||
} |
||||
}) |
||||
} |
||||
}) |
||||
} |
||||
|
||||
function checkFood() { |
||||
console.info("eater: " |
||||
// , " status: ", !isEating
|
||||
, cfg.eat.auto && "auto" |
||||
, bot.food < cfg.eat.startAt && "hungry" |
||||
, "hunger:", bot.food |
||||
, "at:", cfg.eat.startAt) |
||||
if ( |
||||
!isEating |
||||
&& cfg.eat.auto |
||||
&& bot.food < cfg.eat.startAt |
||||
) { |
||||
if ( |
||||
(bot.pathfinder |
||||
&& !(bot.pathfinder.isMining() || bot.pathfinder.isBuilding()) |
||||
// TODO implement better idle state
|
||||
) || true // idle most likely
|
||||
) { |
||||
eat(callbackHandle) |
||||
} |
||||
} |
||||
} |
||||
|
||||
function resetEat(value) { |
||||
// to prevent the plugin from breaking if the bot gets killed while eating btw
|
||||
isEating = !!value // false
|
||||
} |
||||
|
||||
const load = (config) => { |
||||
cfg = config |
||||
bot = cfg.bot |
||||
cfg.eat = { |
||||
priority: 'saturation', //'foodPoints', //
|
||||
// startAt: 19, //anarchy
|
||||
// startAt: 18,
|
||||
startAt: 14, |
||||
bannedFood: [ |
||||
"enchanted_golden_apple", "golden_apple", "pufferfish", "chorus_fruit" |
||||
], |
||||
auto: true |
||||
} |
||||
|
||||
bot.on('health', checkFood) |
||||
bot.on('spawn', resetEat) |
||||
|
||||
} |
||||
|
||||
const unload = () => { |
||||
bot.off('health', checkFood) |
||||
bot.off('spawn', resetEat) |
||||
} |
||||
|
||||
let cfg = {} |
||||
let bot = {} |
||||
let isEating = false |
||||
|
||||
function callbackHandle(err) { |
||||
if (err) console.error(err) |
||||
} |
||||
|
||||
function eat(callback) { |
||||
isEating = true |
||||
|
||||
const foodNames = require('minecraft-data')(bot.version).foodsArray.map((item) => item.name) |
||||
|
||||
let available_food = bot.inventory |
||||
.items() |
||||
.filter((item) => foodNames.includes(item.name)) |
||||
|
||||
if (available_food.length === 0 || !available_food) { |
||||
isEating = false |
||||
return callback(new Error('No food found.')) |
||||
} |
||||
|
||||
if (cfg.eat.bannedFood.length > 0) { |
||||
available_food = available_food.filter( |
||||
(item) => !cfg.eat.bannedFood.includes(item.name) |
||||
) |
||||
} |
||||
let priority = cfg.eat.priority |
||||
let best_food = available_food.reduce((prev, current) => (prev[priority] > current[priority]) ? prev : current) |
||||
|
||||
if (!best_food) { |
||||
isEating = false |
||||
return callback(new Error('No best food has been found.')) |
||||
} |
||||
|
||||
bot.emit('eat_start') |
||||
|
||||
bot.equip(best_food, 'hand', function (error) { |
||||
if (error) { |
||||
console.error(error) |
||||
isEating = false |
||||
bot.emit('eat_stop') |
||||
} else { |
||||
bot.consume(function (err) { |
||||
if (err) { |
||||
console.error(err) |
||||
isEating = false |
||||
bot.emit('eat_stop') |
||||
return callback(err) |
||||
} else { |
||||
isEating = false |
||||
bot.emit('eat_stop') |
||||
callback(null) |
||||
if (!bot.food === 20) eat(callbackHandle) |
||||
} |
||||
}) |
||||
} |
||||
}) |
||||
} |
||||
|
||||
function checkFood() { |
||||
console.info("eater: " |
||||
// , " status: ", !isEating
|
||||
, cfg.eat.auto && "auto" |
||||
, bot.food < cfg.eat.startAt && "hungry" |
||||
, "hunger:", bot.food |
||||
, "at:", cfg.eat.startAt) |
||||
if ( |
||||
!isEating |
||||
&& cfg.eat.auto |
||||
&& bot.food < cfg.eat.startAt |
||||
) { |
||||
if ( |
||||
(bot.pathfinder |
||||
&& !(bot.pathfinder.isMining() || bot.pathfinder.isBuilding()) |
||||
// TODO implement better idle state
|
||||
) || true // idle most likely
|
||||
) { |
||||
eat(callbackHandle) |
||||
} |
||||
} |
||||
} |
||||
|
||||
function resetEat(value) { |
||||
// to prevent the plugin from breaking if the bot gets killed while eating btw
|
||||
isEating = !!value // false
|
||||
} |
||||
|
||||
const load = (config) => { |
||||
cfg = config |
||||
bot = cfg.bot |
||||
cfg.eat = { |
||||
priority: 'saturation', //'foodPoints', //
|
||||
// startAt: 19, //anarchy
|
||||
// startAt: 18,
|
||||
startAt: 14, |
||||
bannedFood: [ |
||||
"enchanted_golden_apple", "golden_apple", "pufferfish", "chorus_fruit" |
||||
], |
||||
auto: true |
||||
} |
||||
|
||||
bot.on('health', checkFood) |
||||
bot.on('spawn', resetEat) |
||||
|
||||
} |
||||
|
||||
const unload = () => { |
||||
bot.off('health', checkFood) |
||||
bot.off('spawn', resetEat) |
||||
} |
||||
|
||||
module.exports = { load, unload, eat, resetEat } |
@ -1,95 +1,95 @@ |
||||
// import { EntityFilters } from "mineflayer-statemachine"
|
||||
// import v from "vec3"
|
||||
|
||||
// import { Movements } from "mineflayer-pathfinder"
|
||||
|
||||
// const mineflayer = require('mineflayer')
|
||||
const { Movements } = require('mineflayer-pathfinder') |
||||
// const { GoalBLah } = require('mineflayer-pathfinder').goals
|
||||
const v = require('vec3') |
||||
|
||||
let cfg = {} |
||||
let bot = {} |
||||
// let moving
|
||||
let pathfinder |
||||
let movements = [] |
||||
|
||||
|
||||
function initMoves(bot = bot, mcData = require('minecraft-data')(bot.version)) { |
||||
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.id)
|
||||
movements.defaultMove = defaultMove |
||||
|
||||
bot.pathfinder.setMovements(defaultMove) |
||||
} |
||||
|
||||
|
||||
function moveNear(pos, distance = 3) { |
||||
const { GoalNear } = require('mineflayer-pathfinder').goals |
||||
cfg.quiet || bot.chat(`moving to ${pos}`) |
||||
|
||||
pos = v(pos) |
||||
bot.pathfinder.setMovements(movements.defaultMove) |
||||
bot.pathfinder.setGoal(new GoalNear(pos.x, pos.y, pos.z, distance)) |
||||
} |
||||
|
||||
function follow(entity, dynamic = true) { |
||||
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"}` |
||||
) |
||||
|
||||
entity = entity.entity ? entity.entity : entity |
||||
|
||||
// console.log(entity)
|
||||
|
||||
bot.pathfinder.setMovements(movements.defaultMove) |
||||
bot.pathfinder.setGoal(new GoalFollow(entity, 3), dynamic) |
||||
} |
||||
|
||||
function hit(blockOrEntity) { |
||||
bot.chat(`hitting ${entity.name || entity.type}`) |
||||
} |
||||
|
||||
function stop() { |
||||
bot.pathfinder.setGoal(null) |
||||
bot.stopDigging() |
||||
} |
||||
|
||||
const load = (config) => { |
||||
cfg = config |
||||
bot = cfg.bot |
||||
cfg.move = { |
||||
// auto: true,
|
||||
canDig: false, |
||||
// list: ["hello", "wassup"],
|
||||
quiet: !!cfg.quiet, |
||||
movements: [] |
||||
} |
||||
|
||||
pathfinder = bot.pathfinder || bot.loadPlugin(require('mineflayer-pathfinder').pathfinder) |
||||
|
||||
// initMoves(bot, mcData)
|
||||
setTimeout(initMoves, 500, bot) |
||||
|
||||
// bot.loadPlugin(pathfinder)
|
||||
|
||||
// bot.on('time', hello)
|
||||
|
||||
} |
||||
|
||||
const unload = () => { |
||||
// TODO stop pathfinding maybe?
|
||||
} |
||||
|
||||
// import { EntityFilters } from "mineflayer-statemachine"
|
||||
// import v from "vec3"
|
||||
|
||||
// import { Movements } from "mineflayer-pathfinder"
|
||||
|
||||
// const mineflayer = require('mineflayer')
|
||||
const { Movements } = require('mineflayer-pathfinder') |
||||
// const { GoalBLah } = require('mineflayer-pathfinder').goals
|
||||
const v = require('vec3') |
||||
|
||||
let cfg = {} |
||||
let bot = {} |
||||
// let moving
|
||||
let pathfinder |
||||
let movements = [] |
||||
|
||||
|
||||
function initMoves(bot = bot, mcData = require('minecraft-data')(bot.version)) { |
||||
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.id)
|
||||
movements.defaultMove = defaultMove |
||||
|
||||
bot.pathfinder.setMovements(defaultMove) |
||||
} |
||||
|
||||
|
||||
function moveNear(pos, distance = 3) { |
||||
const { GoalNear } = require('mineflayer-pathfinder').goals |
||||
cfg.quiet || bot.chat(`moving to ${pos}`) |
||||
|
||||
pos = v(pos) |
||||
bot.pathfinder.setMovements(movements.defaultMove) |
||||
bot.pathfinder.setGoal(new GoalNear(pos.x, pos.y, pos.z, distance)) |
||||
} |
||||
|
||||
function follow(entity, dynamic = true) { |
||||
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"}` |
||||
) |
||||
|
||||
entity = entity.entity ? entity.entity : entity |
||||
|
||||
// console.log(entity)
|
||||
|
||||
bot.pathfinder.setMovements(movements.defaultMove) |
||||
bot.pathfinder.setGoal(new GoalFollow(entity, 3), dynamic) |
||||
} |
||||
|
||||
function hit(blockOrEntity) { |
||||
bot.chat(`hitting ${entity.name || entity.type}`) |
||||
} |
||||
|
||||
function stop() { |
||||
bot.pathfinder.setGoal(null) |
||||
bot.stopDigging() |
||||
} |
||||
|
||||
const load = (config) => { |
||||
cfg = config |
||||
bot = cfg.bot |
||||
cfg.move = { |
||||
// auto: true,
|
||||
canDig: false, |
||||
// list: ["hello", "wassup"],
|
||||
quiet: !!cfg.quiet, |
||||
movements: [] |
||||
} |
||||
|
||||
pathfinder = bot.pathfinder || bot.loadPlugin(require('mineflayer-pathfinder').pathfinder) |
||||
|
||||
// initMoves(bot, mcData)
|
||||
setTimeout(initMoves, 500, bot) |
||||
|
||||
// bot.loadPlugin(pathfinder)
|
||||
|
||||
// bot.on('time', hello)
|
||||
|
||||
} |
||||
|
||||
const unload = () => { |
||||
// TODO stop pathfinding maybe?
|
||||
} |
||||
|
||||
module.exports = { load, unload, stop, initMoves, moveNear, follow } |
Loading…
Reference in new issue