由 鬼哭 造成的永久性生命值损失
根据代码判断 需要被攻击玩家不处于创造模式或被攻击 生物
target.isEntityInvulnerable(DamageSource.ANVIL);
当此攻击生效时
有以下相关代码生效
public static final UUID soulDamageUUID = UUID.fromString("2CCDC290-A885-473A-973F-CDC5C918773B");
IAttributeInstance a = target.getAttributeMap().getAttributeInstanceByName(SharedMonsterAttributes.MAX_HEALTH.getName());
AttributeModifier attr = a.getModifier(soulDamageUUID);
if (attr != null) {
l = attr.getAmount();
if (l == -1) return;
}
l -= 1 / 39F;
if (l < -1) l = -1;
Multimap<String, AttributeModifier> multimap = HashMultimap.create();
multimap.put(SharedMonsterAttributes.MAX_HEALTH.getName(), new AttributeModifier(soulDamageUUID, "Soul Damage", l, 2));
target.getAttributeMap().applyAttributeModifiers(multimap);
if (l <= -1) {
target.attackEntityFrom(DamageSource.OUT_OF_WORLD, Float.MAX_VALUE);
}
可得知 优先获取玩家血量l
l 等于l减去1/39f
然后判定l是否小于-1
如果是 l=-1
然后扣除-1/39*2的生命上限(基于属性修饰符的原理)
如果l小于等于-1
将发起一次无来源的Float.Max_VAULE伤害值的虚空伤害