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

如何基于KitBattle Advanced插件API实现击杀后给玩家添加物品

问题根因

  • 触发时机错误:你配置了isAttackActivated()返回true,对应技能在玩家攻击他人的瞬间触发,此时被攻击目标尚未死亡,p.isDead()的判定永远不成立,添加物品的逻辑根本不会运行。
  • 缺少非空校验:没有判断p.getKiller()是否为null,非玩家击杀场景下会直接抛出空指针异常。
  • 无效冗余代码:判定块内调用p.getKiller()后没有接收返回值,属于无效操作。
  • 返回值设置错误:该插件的execute()方法返回true才代表技能执行生效,你固定返回false会导致背包修改被插件自带逻辑覆盖回滚。
  • 药水创建不规范:部分Spigot版本中,自定义药水需要先设置基础药水类型,否则物品属性无效无法加入背包。

修复代码

public class ChemistryAbility extends Ability{
    
    // 返回技能名称
    @Override
    public String getName() {
        return "Chemistry";
    }

    // 从配置文件加载数据
    @Override
    public void load(FileConfiguration file) {
        // 按需实现配置读取逻辑
    }

    // 获取触发技能的物品材料
    @Override
    public Material getActivationMaterial() {
        return null;
    }

    // 获取触发技能的弹射物类型
    @Override
    public EntityType getActivationProjectile() {
        return null;
    }

    // 玩家攻击他人时是否触发技能
    @Override
    public boolean isAttackActivated() {
        return true;
    }

    // 玩家被攻击时是否触发技能
    @Override
    public boolean isAttackReceiveActivated() {
        return false;
    }

    // 玩家受到伤害时是否触发技能
    @Override
    public boolean isDamageActivated() {
        return false;
    }

    // 玩家与实体交互时是否触发技能
    @Override
    public boolean isEntityInteractionActivated() {
        return false;
    }

    @Override
    public boolean execute(final Player p, final PlayerData PD, final Event e) {
        // 先判断被攻击玩家是否处于死亡状态,且存在玩家击杀者
        if (!p.isDead() || p.getKiller() == null || !(p.getKiller() instanceof Player)) {
            return false;
        }
        Player killer = p.getKiller();
        
        // 规范创建自定义药水
        ItemStack potion = new ItemStack(Material.SPLASH_POTION, 3);
        PotionMeta pmeta = (PotionMeta) potion.getItemMeta();
        // 高版本兼容:先设置基础药水类型为瞬间伤害
        pmeta.setBasePotionData(new PotionData(PotionType.INSTANT_DAMAGE));
        pmeta.addCustomEffect(new PotionEffect(PotionEffectType.HARM, 1, 2), true);
        potion.setItemMeta(pmeta);
        
        // 添加物品到击杀者背包
        killer.getInventory().addItem(potion);
        // 返回true标记技能执行成功,避免修改被回滚
        return true;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:36:06