@nxg-org/mineflayer-tracker
Version:
Provides functionality for more accurate entity and projectile tracking.
84 lines (72 loc) • 2.71 kB
text/typescript
import { Bot, createBot, EquipmentDestination } from "mineflayer";
import utilPlugin from "@nxg-org/mineflayer-util-plugin";
import tracker from "../src/index";
import { Vec3 } from "vec3";
const bot = createBot({
username: "tracker-test",
host: "localhost",
port: 25565,
});
bot.on("spawn", () => {
bot.physics.yawSpeed = 50;
})
bot.loadPlugin(utilPlugin);
bot.loadPlugin(tracker);
function fetchEntity(bot: Bot, wanted: string, author: string) {
return (
bot.nearestEntity((e) => (!!e.username && e.username === wanted) || e.name === wanted) ??
bot.nearestEntity((e) => e.username === author)
);
}
bot.on("chat", async (u, m) => {
console.log(m)
if (u === bot.entity.username) return;
const msg = m.split(" ");
let target = fetchEntity(bot, msg[1], u);
switch (msg[0]) {
case "jump":
for (let i = 0; i < 12; i++) {
bot.setControlState("jump", true);
await bot.waitForTicks(1)
console.log(bot.entity.position, bot.entity.velocity)
}
break;
case "selftrack": {
bot.on('physicsTick', () => {
console.log("tick", bot.entity.position, bot.entity.velocity)
})
bot.setControlState('forward', true)
bot.setControlState('sprint', true)
break;
}
case "track":
if (!target) return bot.chat("No target found.");
bot.tracker.trackEntity(target)
let lastPos = new Vec3(0, 0, 0);
while (true) {
// bot.tracker.getEntitySpeed(target)
console.log(target.position, bot.tracker.getEntitySpeed(target), target.position.minus(lastPos));
await bot.waitForTicks(1);
lastPos = target.position.clone();
}
// bot.inputReader.trackEntity(target)
// while (true) {
// console.log(await bot.inputReader.getCorrectMovement(target))
// // await bot.inputReader.getCorrectMovement(target)
// await bot.waitForTicks(1);
// }
break;
case "stop":
break;
}
});
// bot.prependListener("physicsTick", async () => {
// let target = bot.nearestEntity((e) => e.username === "Generel_Schwerz");
// if (!target) return;
// bot.tracker.trackEntity(target);
// console.log(bot.tracker.getEntitySpeed(target))
// const { x, y, z } = target.position.plus(bot.tracker.getEntitySpeed(target)!);
// bot.chat(`/summon zombie ${x} ${y} ${z}`);
// await bot.util.sleep(200);
// bot.chat("/kill @e[type=!player]");
// });