7050a1621b
Uses `username` when `entity.name` is missing; should check other cases
108 lines
2.6 KiB
JavaScript
108 lines
2.6 KiB
JavaScript
let cfg
|
|
let bot
|
|
let mcData
|
|
const v = require('vec3')
|
|
|
|
function block(pos) {
|
|
const block = pos ? bot.blockAt(v(pos)) : bot.blockAtCursor()
|
|
console.log(block, block && block.getProperties())
|
|
if (!block) {
|
|
cfg.quiet || bot.chat("empty block")
|
|
return block
|
|
}
|
|
let info = [block.type, block.name]
|
|
if (block.metadata) info.push(Object.entries(block.getProperties()))
|
|
cfg.quiet || bot.chat(info.join(": "))
|
|
}
|
|
|
|
function item(
|
|
// hand
|
|
loc = bot.quickBarSlot
|
|
) {
|
|
const item = bot.inventory.slots[loc + bot.QUICK_BAR_START]
|
|
console.log(item)
|
|
if (!item) {
|
|
cfg.quiet || bot.chat("no item")
|
|
return item
|
|
}
|
|
let info = [item.type, item.name]
|
|
if (item.metadata) info.push(item.metadata)
|
|
cfg.quiet || bot.chat(info.join(": "))
|
|
}
|
|
|
|
function entity(name) {
|
|
const entity = bot.nearestEntity((entity) => {
|
|
const ename = entity.name || entity.username
|
|
return name && ename ? ename == name : true
|
|
})
|
|
console.log(entity)
|
|
if (!entity) {
|
|
cfg.quiet || bot.chat("no entity")
|
|
return entity
|
|
}
|
|
let info = [entity.type, entity.name || entity.username]
|
|
if (entity.metadata) info.push("len: " + entity.metadata.length)
|
|
cfg.quiet || bot.chat(info.join("; "))
|
|
}
|
|
|
|
function command(message_parts) {
|
|
switch (message_parts.length) {
|
|
case 0:
|
|
// TODO most recent command?
|
|
block()
|
|
break;
|
|
case 1:
|
|
switch (message_parts[0]) {
|
|
case "item":
|
|
item()
|
|
break
|
|
case "entity":
|
|
entity()
|
|
break
|
|
case "block":
|
|
default:
|
|
block()
|
|
break;
|
|
}
|
|
|
|
break;
|
|
|
|
case 2:
|
|
switch (message_parts[0]) {
|
|
case "item":
|
|
item(message_parts[1])
|
|
break
|
|
case "entity":
|
|
default:
|
|
entity(message_parts[1])
|
|
break;
|
|
}
|
|
break
|
|
|
|
case 4:
|
|
switch (message_parts[0]) {
|
|
case "block":
|
|
default:
|
|
block(message_parts.slice(1))
|
|
break;
|
|
}
|
|
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
const load = (config) => {
|
|
cfg = config
|
|
bot = cfg.bot
|
|
cfg.info = {
|
|
quiet: cfg.quiet,
|
|
}
|
|
mcData = bot.mcData || (bot.mcData = require('minecraft-data')(bot.version))
|
|
}
|
|
|
|
const unload = () => {}
|
|
|
|
module.exports = { load, unload, command, block, item, entity } |