Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Minecraft бот на js

Creeper Mutant Mutant Ученик (142), на голосовании 1 год назад
Помогите пожайлуста, мне нужно создать майнкрафт бота для своего сервера который будет атаковать всех кого видит. Бот нормально работает но если он не может достать до моба (Слишком большое расстояние между ботом и мобом, но он его видит) то он просто бьёт воздух, а мне надо чтобы он перемещался к мобу и убивал его также как и игрок. Для создания бота использую mineflayer и node.js

Код бота:
 const mineflayer = require('mineflayer') 
const { pathfinder, Movements, goals: { GoalNear } } = require('mineflayer-pathfinder')
const pvp = require('mineflayer-pvp').plugin
const bot = mineflayer.createBot({
host: "localhost",
port: "8013",
username: 'TestBotMinecraft' })
bot.loadPlugin(pvp)
bot.loadPlugin(pathfinder)
bot.once('spawn', function () {
bot.chat('/login 12345TESTbot')
let target = null
setInterval(() => {
entity = bot.nearestEntity()
if (entity) {
bot.attack(entity, true)
} else {
bot.chat('no nearby entities')
}
})
})
Дополнен 1 год назад
Всё, бот сделан, но его кикает и пишет в WebStorm'e во это:

Error: write ECONNABORTED
at afterWriteDispatched (node:internal/stream_base_commons:160:15)
at writeGeneric (node:internal/stream_base_commons:151:3)
at Socket._writeGeneric (node:net:930:11)
at Socket._write (node:net:942:8)
at writeOrBuffer (node:internal/streams/writable:392:12)
at _write (node:internal/streams/writable:333:10)
at Writable.write (node:internal/streams/writable:337:10)
at Framer.ondata (C:\Users\Максим\Desktop\MinecraftBot\bot\node_modules\readable-stream\lib\internal\streams\readable.js:662:22)
at Framer.emit (node:events:513:28)
at addChunk (C:\Users\Максим\Desktop\MinecraftBot\bot\node_modules\readable-stream\lib\internal\streams\readable.js:278:12) {
errno: -4079,
code: 'ECONNABORTED',
syscall: 'write'
}


Помогите пожайлуста это исправить
Голосование за лучший ответ
Петр Алексеевич Оракул (82068) 1 год назад
 const mineflayer = require('mineflayer')  
const { pathfinder, Movements, goals: { GoalNear } } = require('mineflayer-pathfinder')
const pvp = require('mineflayer-pvp').plugin
const bot = mineflayer.createBot({
host: "localhost",
port: "8013",
username: 'TestBotMinecraft' })
bot.loadPlugin(pvp)
bot.loadPlugin(pathfinder)
let target = null

bot.once('spawn', function () {
bot.chat('/login 12345TESTbot')
setInterval(() => {
entity = bot.nearestEntity()
if (entity && entity.type === 'mob') {
const dist = bot.entity.position.distanceTo(entity.position)
if (dist > 3.0) { // если расстояние больше 3 блоков
target = entity
const mcData = require('minecraft-data')(bot.version)
const movements = new Movements(bot, mcData)
movements.scafoldingBlocks = []
bot.pathfinder.setMovements(movements)
bot.pathfinder.setGoal(new GoalNear(entity.position.x, entity.position.y, entity.position.z, 1))
} else if (dist < 3.0) { // если расстояние меньше 3 блоков
target = null
bot.attack(entity, true)
}
} else {
target = null
bot.chat('no nearby entities')
}
})
})
Creeper Mutant MutantУченик (142) 1 год назад
Спасибо, теперь всё работает, но мне нужно чтобы он таковал всё живое и игроков тоже. Можно как-то дополнить код чтобы он игроков тоже атаковал?
Петр Алексеевич Оракул (82068) Creeper Mutant Mutant, убрать " && entity.type === 'mob' "
Creeper Mutant MutantУченик (142) 1 год назад
Можно пожайлуста код на подбор предметов с пола, когда рядом с ботом лежит предмет бот выходит из сервера
Петр Алексеевич Оракул (82068) Creeper Mutant Mutant,
 bot.on('physicTick', () => { // обработчик события физического тика 
    const items = bot.findItems({ // поиск предметов на земле 
        radius: 3, // радиус поиска 
        count: 1 // максимальное количество предметов для подбора 
    }) 
    if (items.length) { // если найден хотя бы один предмет 
        bot.pickup(items[0]) // подбор первого найденного предмета 
    } 
})   
Этот код добавляет обработчик события физического тика, который ищет предметы на земле в радиусе 3 блоков от бота и подбирает первый найденный предмет. Если рядом с ботом лежит предмет, то бот автоматически подберет его, а не выйдет из сервера.
Creeper Mutant MutantУченик (142) 1 год назад
Можно пожайлуста сделать чтобы бот переключался между оружием - если моб/игрок на расстоянии больше 5 блоков то бот берёт лук/арбалет и стреляет в моба/игрока, если 5 блоков или меньши то берёт меч и нападает (как в прошлом коде) и чтобы бот следил за собой - если шкала еды 3 или меньше то бот начинает есть (если есть еда), если здоровье 10 или меньше то он пьёт зелье исцеления/регенерации или ест золотое яблоко/зачарованное золотое яблоко (если есть) и если у него 5 здоровья или меньше то он берёт в левую руку тотем бессмертия (если есть) и ещё чтобы бот умел закрыватся щитом
Похожие вопросы