const mineflayer = require('mineflayer')
if (process.argv.length < 4 || process.argv.length > 6) {
console.log('Usage : node graffiti.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] : 'graffiti',
password: process.argv[5]
})
bot.on('chat', (username, message) => {
if (username === bot.username) return
switch (true) {
case /^watch$/.test(message):
watchPaintingOrSign()
break
case /^write .+$/.test(message):
updateSign(message)
break
}
})
function watchPaintingOrSign () {
const paintingBlock = bot.findBlock({
matching (block) {
return !!block.painting
}
})
const signBlock = bot.findBlock({
matching: ['painting', 'sign'].map(name => bot.registry.blocksByName[name].id)
})
if (signBlock) {
bot.chat(`The sign says: ${signBlock.signText}`)
} else if (paintingBlock) {
bot.chat(`The painting is: ${paintingBlock.painting.name}`)
} else {
bot.chat('There are no signs or paintings near me')
}
}
function updateSign (message) {
const signBlock = bot.findBlock({
matching: ['painting', 'sign'].map(name => bot.registry.blocksByName[name].id)
})
if (signBlock) {
bot.updateSign(signBlock, message.split(' ').slice(1).join(' '))
bot.chat('Sign updated')
} else {
bot.chat('There are no signs near me')
}
}