54 lines
1.5 KiB
JavaScript
54 lines
1.5 KiB
JavaScript
/**
|
|
* A quick and easy implementation of the collect block plugin. (Requires mineflayer-pathfinder and mineflayer-collectblock)
|
|
*/
|
|
const mineflayer = require('mineflayer')
|
|
const pathfinder = require('mineflayer-pathfinder').pathfinder
|
|
const collectBlock = require('mineflayer-collectblock').plugin
|
|
|
|
if (process.argv.length < 4 || process.argv.length > 6) {
|
|
console.log('Usage : node collectblock.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] : 'collector',
|
|
password: process.argv[5]
|
|
})
|
|
|
|
// Load pathfinder and collect block plugins
|
|
bot.loadPlugin(pathfinder)
|
|
bot.loadPlugin(collectBlock)
|
|
|
|
// Listen for when a player says "collect [something]" in chat
|
|
bot.on('chat', (username, message) => {
|
|
const args = message.split(' ')
|
|
if (args[0] !== 'collect') return
|
|
|
|
// Get the correct block type
|
|
const blockType = bot.registry.blocksByName[args[1]]
|
|
if (!blockType) {
|
|
bot.chat("I don't know any blocks with that name.")
|
|
return
|
|
}
|
|
|
|
bot.chat('Collecting the nearest ' + blockType.name)
|
|
|
|
// Try and find that block type in the world
|
|
const block = bot.findBlock({
|
|
matching: blockType.id,
|
|
maxDistance: 64
|
|
})
|
|
|
|
if (!block) {
|
|
bot.chat("I don't see that block nearby.")
|
|
return
|
|
}
|
|
|
|
// Collect the block if we found one
|
|
bot.collectBlock.collect(block, err => {
|
|
if (err) bot.chat(err.message)
|
|
})
|
|
})
|