예제 #1
0
파일: Kombat.cs 프로젝트: Kurtchekov/Kombat
        private static void DidDamageExtended(ItemSlot slot, DamageSource source, EntityAgent target)
        {
            if (target.World.Side == EnumAppSide.Client)
            {
                return;
            }
            Vec3d vec3d = (target.SidedPos.XYZ - (source.SourceEntity == null ? source.SourcePos : source.SourceEntity.SidedPos.XYZ)).Normalize();

            vec3d.Y = 0.1;
            float force = (slot?.Itemstack?.Item is IDynamicAttackKnockback) ?
                          ((IDynamicAttackKnockback)slot.Itemstack.Item).GetDynamicAttackKnockback(slot.Itemstack, source, target) : 1f;
            float single = GameMath.Clamp((force - target.Properties.KnockbackResistance) / 10f, 0f, 2f);

            target.SidedPos.Motion.Add(vec3d.X * (double)single, vec3d.Y * (double)single, vec3d.Z * (double)single);
            target.DidAttack(source, (EntityAgent)source.SourceEntity);
        }