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

Bukkit插件开发:玩家使用不死图腾后无法添加药水效果问题排查

解决Bukkit插件中使用图腾复活后无法施加药水效果的问题

问题核心:在EntityResurrectEvent中直接给实体添加药水效果时,由于事件触发时机处于复活流程中,后续游戏的复活处理逻辑会覆盖或清除刚添加的效果,导致效果不生效——但消息能正常发送,因为消息不受状态重置影响。

解决方法:通过延迟任务等待复活流程完成后再施加药水效果,同时增加实体类型判断确保只对玩家生效:

@EventHandler
public void onUseTotem(EntityResurrectEvent event) {
    Entity entity = event.getEntity();
    // 仅处理玩家实体
    if (!(entity instanceof Player player)) {
        return;
    }

    Bukkit.getLogger().info("TOTEM USED");
    player.sendMessage("TOTEM HAS BEEN USED");
    player.sendMessage("Activate");

    // 延迟1tick执行,等待复活流程完成
    Bukkit.getScheduler().runTaskLater(yourPluginInstance, () -> {
        player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 200, 10), true);
    }, 1L);
}

说明:

  • yourPluginInstance需要替换成你插件的主类实例,比如主类是MyPlugin,可使用MyPlugin.getInstance()或在事件类中持有主类引用
  • 延迟1tick足以让游戏完成复活后的状态重置,确保药水效果不会被覆盖
  • 添加instanceof Player判断,避免对非玩家实体执行无效操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 02:58:07