From your question, you want to find every cube that a ray passes through, and enumerate them.
The direction he's looking in will be signified by $(d_x,d_y,d_z)\newcommand{\sgn}{\operatorname{sgn}}$, note that I assume that the direction is a vector starting at the center of the coordinate system, and not from the player.
We can simply enumerate coordinates on the ray with some interval, and discard duplicates, we just have to make sure that the interval is small enough such that we miss no blocks.
If we want this interval to be small enough such that it always ends up in the current or an adjacent block, we want $e$ to be the minumum distance to one of the lines in the grid between the boxes. (If the point is on a line, we discard that one) So let $e$ be that distance then we simply need to normalize the vector to have that size.
Finding $e$ is tricky, we need to find the distance from the point to many lines in a grid. For the following I assume that $q$ is the side length between the boxes, and that $x,y,z$ is the coordinate of the point.
We will perform an algorithm 3 times, one for each dimension. Each time we perform it, we are given a number, totaling at $3$ numbers. $e$ is the smallest of those $3$ numbers. The first time we will have $h=x,p=y$, the second time $h=x,p=z$ and the third time will have $h=y,p=z$.
The algorithm is as follows:
Let $\lfloor x\rfloor_q$ be $x$ rounded down with resolution $q$, and let $[x]_q$ be defined as the smallest of the following two numbers: $(x-\lfloor x\rfloor_q)^2$ and $(q-x+\lfloor x\rfloor_q)^2$
If $[h]_q=[p]_q=0$ then the number returned by the algorithm is $q$.
Otherwise the number returned by the algorithm is $\sqrt{[h]_q+[p]_q}$
Let $s=\dfrac1e\sqrt{(d_x)^2+(d_y)^2+(d_z)^2}$, and define:
$$
\begin{align}
\delta_x&=\frac{d_x}s\\
\delta_y&=\frac{d_y}s\\
\delta_z&=\frac{d_z}s
\end{align}
$$
Now simply given a point, calculate the next point with the given formula:
$$
\begin{align}
\text{next $x$}&=x+\delta_x\\
\text{next $y$}&=y+\delta_y\\
\text{next $z$}&=z+\delta_z
\end{align}
$$
Where $x,y,z$ are the coordinates of the previous point. Each of these points will be inside a box on the ray, and you wont miss any because we normalized the direction. Note that we might get the same box several times in a row, so if that's a problem you have to check for duplicates. The starting point is of course the players position.
If the object moves with velocity $\vec v_0$ the ball with velocity $\vec v$ and the normal at the impact point is $\vec n$ then we have:
$$
\vec v = \vec v_{\vec n}+\vec v_{\Pi}\\
\vec v_{\Pi} = \vec v - \vec v_{\vec n_1} \\
\vec v_r = (\vec v-\vec v_0)_{\Pi}-(\vec v-\vec v_0)_{\vec n}\\
\vec v_r = (\vec v-\vec v_0) -2((\vec v-\vec v_0).\vec v_{\vec n})\vec v_{\vec n}
$$
with
$$
\vec v_{\vec n} = \left(\vec v\cdot\left(\frac{\vec n}{||\vec n||}\right)\right)\frac{\vec n}{||\vec n||}
$$
where $\vec v_r$ represents the reflected ball velocity after collision
NOTE
Here $\Pi$ represents the plane passing by the impact point with normal $\vec n$
Attached three cases. Here
$$
\begin{cases}
\vec v \ \ \mbox{red}\\
\vec v_0 \ \ \mbox{green}\\
\vec n \ \ \mbox{black}\\
\Pi \ \ \ \mbox{dashed cyan}\\
\vec v_r \ \ \mbox{blue}
\end{cases}
$$
Best Answer
Let's say you have a vector $\vec P = [P_1, P_2, P_3]$ that represents the point's location in space. Another vector, $\vec B = [B_1, B_2, B_3]$ represents the ball's (or bullet's or whatever) position in space.
The vector $\vec {BP}$ between the two is: $$\vec{BP} = \vec P - \vec B = [P_1 - B_1, P_2- B_2, P_3-B_3]$$
So, if you want the ball to move all the way to the player, you would say: $$\vec B_{new} = \vec B + \vec{BP}$$
Or, if you want the ball to move only $1/100$th of the way to the player, you would say: $$\vec B_{new} = \vec B + \frac{1}{100}\vec{BP}$$
In general, to move some small $\epsilon$ to the player: $$\vec B_{new} = \vec B + \epsilon\vec{BP}$$