You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
190 lines
4.7 KiB
190 lines
4.7 KiB
const mineflayer = require('mineflayer') |
|
const pathfinder = require('mineflayer-pathfinder').pathfinder |
|
const { |
|
gameplay, |
|
MoveTo, |
|
BreakBlock, |
|
ObtainItems, |
|
ObtainItem, |
|
GiveTo, |
|
Craft |
|
} = require('prismarine-gameplay') |
|
// const { Gameplay } = require('prismarine-gameplay/lib/gameplay') |
|
// const { Vec3 } = require('vec3') |
|
let mcData = require('minecraft-data') |
|
|
|
let cfg = {} |
|
let bot = {} |
|
|
|
// if (process.argv.length < 4 || process.argv.length > 6) { |
|
// console.log('Usage : node miner.js <host> <port> [<name>] [<password>]') |
|
// process.exit(1) |
|
// } |
|
|
|
// const bot = mineflayer.createBot({ |
|
// host: process.argv[2], |
|
// port: parseInt(process.argv[3]), |
|
// username: process.argv[4] ? process.argv[4] : 'collect_items', |
|
// // password: process.argv[5] |
|
// }) |
|
|
|
|
|
// bot.on('spawn', () => bot.gameplay.debugText = true) |
|
|
|
// bot.on('chat', (username, message) => mine(username, message)) |
|
|
|
function checkBlockExists(name){ |
|
if (mcData.blocksByName[name] === undefined) { |
|
bot.chat(`${name} is not a block name`) |
|
return false |
|
} else { |
|
return true |
|
} |
|
} |
|
|
|
function miner(username, message) { |
|
const player = bot.players[username] ? bot.players[username].entity : null |
|
|
|
const command = message.split(' ') |
|
switch (true) { |
|
// case /^echo .*/.test(message): |
|
// bot.chat(command.slice(1).join(" ")) |
|
// break |
|
|
|
// case /^zz+/.test(message): |
|
// bot.chat("/afk") |
|
// break |
|
case /^debug$/.test(message): |
|
bot.gameplay.debugText = !!!bot.gameplay.debugText |
|
break |
|
|
|
case /^moveto -?[0-9]+ -?[0-9]+$/.test(message): |
|
bot.gameplay.solveFor( |
|
new MoveTo({ |
|
x: parseInt(command[1]), |
|
z: parseInt(command[2]) |
|
}), logError) |
|
break |
|
|
|
case /^moveto -?[0-9]+ -?[0-9]+ -?[0-9]+$/.test(message): |
|
bot.gameplay.solveFor( |
|
new MoveTo({ |
|
x: parseInt(command[1]), |
|
y: parseInt(command[2]), |
|
z: parseInt(command[3]) |
|
}), logError) |
|
break |
|
|
|
case /^moveto \w+$/.test(message): |
|
const player2 = bot.players[command[1]] ? bot.players[command[1]].entity : null |
|
if (!player2) { |
|
bot.chat(`can't see ${command[1]}..`) |
|
} else { |
|
bot.gameplay.solveFor( |
|
new MoveTo({ |
|
x: player2.position.x, |
|
y: player2.position.y, |
|
z: player2.position.z |
|
}) |
|
) |
|
} |
|
break |
|
|
|
case /^comehere$/.test(message): |
|
if (!player) { |
|
bot.chat("can't see you..") |
|
} else { |
|
bot.gameplay.solveFor( |
|
new MoveTo({ |
|
x: player.position.x, |
|
y: player.position.y, |
|
z: player.position.z |
|
}), logError) |
|
} |
|
break |
|
|
|
case /^break -?[0-9]+ -?[0-9]+ -?[0-9]+$/.test(message): |
|
bot.gameplay.solveFor( |
|
new BreakBlock({ |
|
position: new Vec3( |
|
parseInt(command[1]), |
|
parseInt(command[2]), |
|
parseInt(command[3]) |
|
) |
|
}), logError) |
|
break |
|
|
|
case /^collect [0-9]+ [a-zA-Z_]+$/.test(message): |
|
if(!checkBlockExists(command[2])) {return false} |
|
bot.gameplay.solveFor( |
|
new ObtainItems({ |
|
itemType: command[2], |
|
count: parseInt(command[1]) |
|
}), logError) |
|
break |
|
|
|
case /^collect [a-zA-Z_]+$/.test(message): |
|
if(!checkBlockExists(command[2])) {return false} |
|
bot.gameplay.solveFor( |
|
new ObtainItem({ |
|
itemType: command[1] |
|
}), logError) |
|
break |
|
|
|
case /^bringme [0-9]+ [a-zA-Z_]+$/.test(message): |
|
if(!checkBlockExists(command[2])) {return false} |
|
bot.gameplay.solveFor( |
|
new GiveTo({ |
|
itemType: command[2], |
|
count: parseInt(command[1]), |
|
entity: player |
|
}), logError) |
|
break |
|
|
|
case /^craft [0-9]+ [a-zA-Z_]+$/.test(message): |
|
if(!checkBlockExists(command[2])) {return false} |
|
bot.gameplay.solveFor( |
|
new Craft({ |
|
itemType: command[2], |
|
count: parseInt(command[1]), |
|
entity: player |
|
}), logError) |
|
break |
|
|
|
case /^stop$/.test(message): |
|
bot.chat("♪♪ can't stop me now!! ♪♪") |
|
// player = bot.player.entity |
|
if (player) { |
|
bot.gameplay.solveFor( |
|
new MoveTo({ |
|
x: player.position.x, |
|
y: player.position.y, |
|
z: player.position.z |
|
}), logError) |
|
} |
|
break |
|
} |
|
} |
|
|
|
function logError(err) { |
|
if (err) |
|
bot.chat(`Failed task: ${err.message}`) |
|
} |
|
|
|
|
|
const load = (config) => { |
|
cfg = config |
|
bot = cfg.bot |
|
|
|
mcData = mcData(bot.version) |
|
bot.loadPlugin(pathfinder) |
|
bot.loadPlugin(gameplay) |
|
bot.on("chat", miner) |
|
} |
|
|
|
const unload = () => { |
|
// bot.gameplay |
|
bot.off("chat", miner) |
|
} |
|
|
|
module.exports = { load, unload } |