我注册了一个名为“出血”的新效果,并创建了一个扩展MobEffect的文件“出血.java”,在其中我覆盖.applyEffectTick()和.isDurationEffectTick
此外,在该文件中使用断点的调试也非常奇怪:例如,如果我在实体上的.applyEffectTick()内部使用.hurt(),并将断点放在使用.hur()方法的行上,调试就可以正常工作,但如果我不在任何地方使用此方法,而是将断点放置在.applyEffects Tick(
“出血”应该做什么:如果玩家在蹲下时静止或移动,效果每4秒造成1点伤害;如果玩家在不蹲下的情况下移动,效果会计算玩家的水平移动速度,并根据该移动速度造成更多伤害。
这是出血.java文件:
https://paste.gg/p/anonymous/c5cba090e503413daebb838779e44ed6
实际发生的情况是,只有当玩家在冲刺和跳跃时,才会造成伤害
这些是计算水平速度的线:
double dx=pLivingEntity.getDeltaMove().x();
double dz=pLivingEntity.getDeltaMovement().z();
双倍速度=Math.sqrt(dx*dx+dz*dz);
调试表明速度计算正确,但程序的行为就像速度总是0一样,除非玩家在冲刺和跳跃