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

Fabric MC 1.20.4:玩家死亡及击杀来源检测Mixin未生效求助

Mixin未触发玩家死亡检测的排查与修复
  • 检查Mixin注册配置
    Fabric模组必须在fabric.mod.json的mixins字段声明Mixin类,否则加载器不会处理。示例配置:

    {
      "mixins": [
        "pvpoverhaul.mixins.json"
      ]
    }
    

    同时在resources目录创建对应pvpoverhaul.mixins.json,确保包含你的GearKeeper类:

    {
      "required": true,
      "package": "net.spamta.pvpoverhaul.mixin",
      "compatibilityLevel": "JAVA_17",
      "mixins": [
        "GearKeeper"
      ],
      "client": [],
      "injectors": {
        "defaultRequire": 1
      }
    }
    

    注意package要和Mixin类所在包完全一致。

  • 验证方法签名匹配度
    确认onDeath方法签名和原版代码完全匹配。Minecraft 1.19+中PlayerEntity.onDeath继承自LivingEntity,签名为public void onDeath(DamageSource source),你当前的Mixin注入参数DamageSource damageSource, CallbackInfo info是正确的,但要确保@Inject的method参数拼写无误(你当前写的method="onDeath"没问题)。

  • 确保Mixin在服务器端生效
    玩家死亡逻辑由服务器端处理,若Mixin被标记为仅客户端加载则不会触发。检查mixins.json,不要将GearKeeper放入client数组,确保它在mixins数组中(默认服务端、客户端均加载)。

  • 排查日志初始化问题
    确认PvPOverhaul.LOGGER正确初始化,比如使用SLF4J标准方式:

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    public class PvPOverhaul {
        public static final Logger LOGGER = LoggerFactory.getLogger("pvpoverhaul");
    }
    

    日志对象未正确创建的话,即使Mixin运行也看不到输出。

  • 修正击杀来源获取逻辑
    你当前用damageSource.getName()只能拿到伤害源类型(如player、mob),要获取具体击杀实体需用damageSource.getAttacker(),示例:

    if (damageSource.getAttacker() instanceof LivingEntity attacker) {
        PvPOverhaul.LOGGER.info("{} 被 {} 击杀", player.getName().getString(), attacker.getName().getString());
    } else {
        PvPOverhaul.LOGGER.info("{} 死于 {}", player.getName().getString(), damageSource.getName());
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 11:17:31