Здравствуйте, уважаемые читатели Хабра! Продолжаем писать бота для Minecraft(1.8 - 1.18) с помощью библиотеки mineflayer. С прошлыми уроками можете ознакомиться ТУТ.

Часть 10 (Взаимодействие с коровами)

Создаём асинхронную функцию async function startMilking(). После чего нашему объекту присваиваем фильтр. С помощью фильтра, определяем является ли корова взрослой. Если будет детёнышем, то бот молоко собрать не сможет. А также ставим дистанцию с которой бот будет собирать молоко, ставим < 5 блоков: e.position.distanceTo(bot.entity.position) < 5

bot.on('spawn', async function () {

    await startMilking()

        async function startMilking() {

            setTimeout(async function () {

                let nearbyCows = Object.values(bot.entities).filter(e => e.name == 'cow' && e.position.distanceTo(bot.entity.position) < 5 && !e.metadata[16]);
                let cow = nearbyCows[Math.floor(Math.random() * nearbyCows.length)];
                await bot.lookAt(cow.position, false)

                let empty_bucket = bot.inventory.items().filter(item => item.name == 'bucket')[0];

                // Необязательный вывод в консоль

                if (!empty_bucket) {
                    console.log('[Предупреждение] В моем инвентаре нет пустого ведра');
                    return startMilking();
                    await startMilking();
                }, 2000)

            }
        });

Часть 11 (Значения еды, здоровья, опыта, уровня)

Введя в чат: Здоровье, Еда, Опыт, Уровень , будет выведено соответствующее сообщение.

bot.on('chat', function (username, message) {

    if (message === "Здоровье") {

        bot.chat('У меня ' + bot.health.toFixed(0) + ' здоровье')
    }

    if (message === "Еда") {

        bot.chat(`У меня ` + bot.food + ` еды`)
    }

    if (message === "Опыт") {

        bot.chat("У меня " + bot.experience.points.toFixed(0) + " опыта")
    }

    if (message === "Уровень") {

        bot.chat('У меня ' + bot.experience.level.toFixed(0) + ' уровень')
    }
});

Часть 12 (Автоматическая экипировка тотема)

Для начала необходимо установить плагин командой : npm i mineflayer-auto-totem --save.

Весь код:

bot.loadPlugin(autototem)

bot.on("physicsTick",async() =>{bot.autototem.equip()})

Возможно у вас возник вопрос, как данный плагин работает? Если у бота значение здоровья будет равняться 0 , то выполнится метод equip() и тотем автоматически появится в руке бота. Так будет до тех пор, пока все тотемы не закончатся.

Часть 13 (Радар)

Красным маркером отмечен бот, а зелёным игрок.

Напишем следующий код:

const radarPlugin = require('mineflayer-radar')(mineflayer);

radarPlugin(bot, options);

После чего нажимаем ПКМ на 'mineflayer-radar', и выбираем первый пункт, чтобы установить плагин. Запустим нашего бота и в консоль будет выведен порт для подключения, запоминаем его. В моём случае это 22355.

Переходим в браузер и пишем localhost:22355. Радар успешно работает.

Часть 14 (Web-инвентарь)

Для начала скачаем плагин, впишем в терминал npm install mineflayer-web-inventory.

const inventoryViewer = require('mineflayer-web-inventory')

inventoryViewer(bot)

После запуска бота пишем в браузере localhost:3000 и наблюдаем за инвентарём. Также можно изменить параметры плагина, используя следующий код.

let options = { port: PORT,webPath: PATH,express: EXPRESS,app: APP, http: HTTP,io: IO,startOnLoad: BOOLEAN,windowUpdateDebounceTime: INT} 

inventoryViewer(bot, options)

Комментарии (0)