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
相关产品推荐
相关产品推荐

