From 3c9d62441f8d723ed3eb12f97c6fc3807ca52226 Mon Sep 17 00:00:00 2001 From: jay Date: Tue, 11 May 2021 10:39:53 +0500 Subject: [PATCH] feat(informer): :sparkles: add block info based on player's relative position Relative position includes simple words like "feet", "standing", "head", etc --- lib/plugins/informer.js | 59 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 56 insertions(+), 3 deletions(-) diff --git a/lib/plugins/informer.js b/lib/plugins/informer.js index c1f157e..da8b5e7 100644 --- a/lib/plugins/informer.js +++ b/lib/plugins/informer.js @@ -14,6 +14,54 @@ let cfg = { bot: bot } +var RelativePosEnum +(function (RelativePosEnum) { + RelativePosEnum[RelativePosEnum["feet"] = 0] = "feet" + RelativePosEnum[RelativePosEnum["standing"] = 1] = "standing" + RelativePosEnum[RelativePosEnum["head"] = 2] = "head" + RelativePosEnum[RelativePosEnum["looking"] = 3] = "looking" + RelativePosEnum[RelativePosEnum["infront"] = 4] = "infront" + RelativePosEnum[RelativePosEnum["behind"] = 5] = "behind" +})(RelativePosEnum || (RelativePosEnum = {})) + +function relPosToBlock(entity, relPos) { + let pos + if (!(relPos in RelativePosEnum)) return console.warn("info: not a relative position:", relPos) + relPos = typeof relPos === "number" ? RelativePosEnum[relPos] : relPos + switch (relPos) { + case "feet": + pos = entity.position; + break + case "standing": + pos = entity.position.offset(0, -1, 0) + break + // todo use CARDINAL directions api from pathfinder + // case "behind": + // entity.yaw + // pos = entity.position + // break + // case "front": + // case "infront": + // pos = entity.position + // break + case "head": + pos = entity.position.offset(0, 1.85, 0) + break + case "looking": + if (entity === bot.entity) { + return bot.blockAtCursor() + // return bot.blockInSight(128, 128) + } + default: + quiet || bot.chat(`info: pos '${relPos}' not implemented`) + break + } + if (pos) { + // nearest block + return bot.blockAt(pos) + } +} + function isVec3(vec) { return vec?.length === 3 || vec.x && vec.y && vec.z } @@ -21,7 +69,7 @@ function isVec3(vec) { function block(entity = bot.entity, pos = entity?.position?.offset(0, -1, 0)) { console.assert(pos || entity) const block = isVec3(pos) ? bot.blockAt(v(pos)) - : pos + : typeof pos === "string" ? relPosToBlock(entity, RelativePosEnum[pos]) : pos console.log(block, block?.getProperties && block.getProperties()) if (!block) { quiet || bot.chat("empty block") @@ -146,8 +194,13 @@ function command(message_parts, player) { block(player) break default: - console.log(bot.players[message_parts[1]]) - quiet || bot.chat("info: not yet implemented") + if (message_parts[1] in RelativePosEnum) { + block(undefined, message_parts[1]) + } else { + // or entity(message_parts[1]).position + console.log(bot.players[message_parts[1]]) + quiet || bot.chat("info: not yet implemented") + } } break case "e":