Почти каждый человек, играющий в Minecraft, мечтал, чтобы ресурсы в игре были бесконечными или за него их добывал кто-то другой. С помощью библиотеки Mineflayer и Node.js , можно создать бота.
Mineflayer
Mineflayer — высокоуровневое API написанное на Node. js. Официальная документация.
Часть 1 (Установка и настройка)
Скачиваем Node.js с официального сайта и прописывайте npm install mineflayer в консоль, чтобы установить API .
Далее необходимо создать mybot.js файл, где и будет храниться код для нашего бота.
Редактировать данный файл можно в любой среде разработке, но я рекомендую воспользоваться WebStorm.
Заходим в Minecraft , создаём новый мир и открываем его для сети. В чате появилось сообщение с нашим портом. Запоминаем его, так как он нам пригодится.
Часть 2 (Подключение бота к серверу)
Первым делом необходимо подключить библиотеку.
const mineflayer = require("mineflayer");
У бота существует множество параметров. К примеру: host, port, username, password,version и auth. Мы будет пользоваться: host, port, username и version. host, отвечает за IP, на который будет заходить бот. В нашем случае это localhost. Параметр port, мы с вами узнали выше. Каждый раз, когда заходите на сервер port меняется. Username отвечает за то, какой никнейм будет у бота. В version, поставим 1.18.2. При установленном значении false , версия будет выбрана автоматически.
const mineflayer = require("mineflayer")
const bot = mineflayer.createBot({
host: "localhost",
port: "4201",
version: "1.18.2",
username: "MyBot" });
Для того , чтобы бот зашёл на сервер в Терминале пишем команду: node mybot.js.
Часть 3 (Первые функции)
Научим нашего бота говорить. При появлении в мире, в чате появится сообщение : «Привет мир».
bot.once('spawn', function () {
bot.chat('Привет мир!');
});
При вызове ивента 'spawn', вызывается метод chat и бот выводит сообщение в чат. Список ивентов и методов.
Часть 4 (Общение с ботом в чате)
Научим нашего бота отвечать на наши сообщения в чате.
bot.on('chat', function Hi (username,message) {
if(username === "MyBot") return;
if (message === "Ты бот?" && username === "Sergey") {
setTimeout(() => bot.chat(username + " , нет я не бот"), 5000);
} else {
if(message !== "Ты бот?") return;
setTimeout(() => bot.chat(username + " , я тебя не знаю"), 5000);
}});
В данном случае используется ивент, но уже с двумя параметрами: username и message. Когда мы пишем в чат «Ты бот?» , бот проверяет сообщение и выводит текст «username (ник игрока) , я не бот». Отвечать бот на сообщения будет каждые 5 сек. Сделать это можно с помощью планирования вызова setTimeout().
Часть 5 (Следим за сервером от лица бота)
Чтобы следить за сервером от лица нам поможет библиотека: prismarine-viewer.
Устанавливаем её const mineflayerViewer = require('prismarine-viewer').mineflayer
Далее добавляем запуск Viewer на порте 3007. В дальнейшем мы будем подключаться именно через этот порт.
bot.once('spawn',() =>{
mineflayerViewer(bot,{
port:3007,
firstPerson:true,
viewDistance: "25"})
})
После того , как бот подключится к серверу, мы переходим в браузер и пишем localhost:3007. Готово!
Часть 6 (Взаимодействие с кроватью)
bot.on('chat',(username,message)=>{
if(username === bot.username) return
switch (message){
case 'Спать':
goToSleep()
break
case 'Вставай':
wakeUp()
break
}
});
bot.on('sleep',()=>{
bot.chat('Спокойной ночи')});
bot.on('wake',()=>{
bot.chat('Доброе утро')});
async function goToSleep(){
const bed = bot.findBlock({
matching: block => bot.isABed(block)})
if (bed) {
try {
await bot.sleep(bed)
bot.chat("Я сплю") } catch (err) {
bot.chat(`Я не могу уснуть: ${err.message}`) }
} else {
bot.chat('По близости нет кровати') } }
async function wakeUp() {
try {
await bot.wake() } catch (err) {
bot.chat(`Я не могу проснуться: ${err.message}`)
}}
По команде в чате «Спать», будет вызываться метод goToSleep(), бот ляжет на кровать и выведет в чат «Спокойной ночи». Если кровати не будет рядом, выводится сообщение «Поблизости нет кровати», а если рядом будут враждебные мобы , то «Я не могу уснуть: (причина)».
По команде в чате «Вставай», будет вызываться метод wakeUp и бот соответственно встанет с кровати и в чат выводится сообщение «Доброе утро».
Часть 7 (Выход бота с сервера)
Реализовать выход бота с сервера довольно просто. В этом нам поможет метод quit().
Приписываем к коду выше ещё один case и команду 'Выйди'. После того, как мы напишем в чат данное слово, бот сразу выйдет с сервера.
case 'Выйди':
bot.quit()
break
Часть 8 (Забираем предметы у бота из инвентаря)
По команде в чате «Drop», бот будет скидывать предметы, находящиеся в инвентаре. Если скидывать нечего, то в терминал выводится сообщение «У меня пусто»
bot.on('chat',function (username,message){
if(username === "MyBot") return;
if (message === "Drop" && username === "Sergey"){
function tossNext(){
if(bot.inventory.items().length === 0) {
console.log("У меня пусто")
} else {
const item = bot.inventory.items()[0]
bot.tossStack(item,tossNext)}
}
tossNext()}
});
Часть 9 (Autoclicker)
Для начала, подключаем библиотеку : npm install --save mineflayer-autoclicker. Используем уже известный нами ивент 'chat'. По команде «Start» запустится метод bot.autoclicker.start(), а по команде «Stop» bot.autoclicker.stop().
bot.on('spawn', function (){
bot.loadPlugin(require("mineflayer-autoclicker"))
})
bot.on('chat', function (usrername, message){
if(message === "Start"){
bot.autoclicker.start()}
if(message === "Stop"){
bot.autoclicker.stop()}});
Cторонние плагины:
Mineflayer поддерживает сторонние плагины. С помощью них Вы можете добавить новые методы API:
pathfinder - Поиск пути с помощью координат
prismarine-viewer - Простой web клиент для отслеживания активного чанка
web-inventory - Веб клиент для взаимодействия с инвентарем
statemachine - API с более сложной структурой для ботов
Armor Manager - Автоматическое взаимодействие с экипировкой
Collect Block - Простой способ для подбора блоков
Dashboard - Панель управления для бота
Комментарии (8)
makapohmgn
25.10.2022 20:49А почему бы вместо всего этого не включить творческий режим?
SergeyFedorenko Автор
25.10.2022 21:32Бота можно подключать к серверам , где у игроков нет творческого режима
rutexd
26.10.2022 11:56+1На самом деле вещь очень интересная. При желании и силах можно много интересного сделать. Особенно учитывая что это самостоятельная реализация протокола которая работает на многих серверах и версиях и при желании можно подружить с многими модами, хоть и не идеально.
Если будешь писать продолжение - повышай градус.
SergeyFedorenko Автор
26.10.2022 11:57Продолжение уроков будет . Согласен с тобой , что библиотека позволяет сделать много всего интересного )
fugasio
Переносы отвалились
SergeyFedorenko Автор
С отображением кода исправлю ошибку