You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Mineflayer PvP机器人代码 实现死亡检测并修复单次攻击问题

Mineflayer PvP机器人问题修复方案

问题原因说明

你遇到的两个问题根源分别是:

  • 单次攻击:mineflayer-pvp插件的attack方法本身支持持续攻击,你当前代码大概率是调用攻击时目标实体未完全加载、或丢失了目标跟踪导致攻击中断
  • 死亡状态检测:未监听对应的实体死亡事件,无法判断目标和自身的存活状态

修复后完整代码

首先确保你已经正确安装依赖:npm install mineflayer mineflayer-pvp

const mineflayer = require('mineflayer')
const pvp = require('mineflayer-pvp').plugin

// 全局未定义sleep方法需要先加这行
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))

const bot = mineflayer.createBot({
  host: '你的服务器地址',
  port: 25565,
  username: '机器人用户名'
})

bot.loadPlugin(pvp)

// 全局变量存储当前攻击目标,用于死亡检测
let currentTarget = null

// 监听自身死亡事件
bot.on('death', () => {
  if (currentTarget) {
    bot.chat('我被击杀了,PvP结束')
    bot.pvp.stop()
    currentTarget = null
  }
})

// 监听实体死亡事件,判断是不是目标被击杀
bot.on('entityDead', (entity) => {
  if (currentTarget && entity === currentTarget) {
    bot.chat(`已击杀${currentTarget.username},PvP结束`)
    bot.pvp.stop()
    currentTarget = null
  }
})

bot.on('chat', (username, message) =>{
  if (message === 'fight me') {
    const player = bot.players[username]

    if (!player || !player.entity) {
      bot.chat("我看不到你,无法发起PvP")
      return
    }
    // 已经在PvP中就拒绝新请求
    if (currentTarget) {
      bot.chat("我正在和别人PvP,稍后再来")
      return
    }

    bot.chat("准备好,10秒后开始PvP!")
    const sword = bot.inventory.items().find(item => item.name.includes('sword'))
    if (sword) bot.equip(sword, 'hand')
    const shield = bot.inventory.items().find(item => item.name.includes('shield'))
    if (shield) bot.equip(shield, 'off-hand')
   
    // 等待10秒和提示文案匹配
    sleep(10000).then(() => {
      // 你自己实现的beeingAlive()方法可以保留在这里
      bot.chat(`/tp notbreadbutter ${username}`)
      // 延迟1秒确保传送完成后再攻击,避免实体加载失败
      setTimeout(() => {
        if (player.entity) {
          currentTarget = player.entity
          currentTarget.username = username
          bot.pvp.attack(currentTarget)
        } else {
          bot.chat("传送后丢失目标,PvP取消")
        }
      }, 1000)
    })
  }

  if (message === 'stop') {
    bot.pvp.stop()
    currentTarget = null
    bot.chat("已停止PvP")
  }
})

// 可选:增加错误监听避免程序崩溃
bot.on('error', err => console.log(err))
bot.on('end', () => console.log('机器人断开连接'))

核心修改点说明

  • 新增currentTarget全局变量跟踪当前攻击目标,避免多请求冲突
  • 新增自身death事件监听,被击杀时自动停止PvP并发送提示
  • 新增entityDead事件监听,目标被击杀时自动停止PvP并发送击杀提示
  • 优化攻击调用逻辑,传送后延迟1秒再判断目标是否存在,避免因为实体未加载导致只攻击一次的问题
  • 修复了准备时间不匹配的问题:原代码提示10秒准备但只等1.5秒,修改为等待10秒后再传送攻击
  • 新增PvP状态校验,已经在PvP时拒绝新的请求

内容的提问来源于stack exchange,提问作者Bread_butter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 17:45:06