I would like to use cLineBlockTracer.FirstSolidHitTrace to know what block the player is looking at. But the problem is that it returns only a boolean, which is true if there is a solid block, and false if not.

But in LineBlockTracer.h, it says :

/** Traces until the first solid block is hit (or until end, whichever comes first.
If a solid block was hit, returns true and fills a_HitCoords, a_HitBlockCoords and a_HitBlockFace.
If a_End is encountered without hitting any solid block, returns false and doesn\'t touch a_HitCoords, a_HitBlockCoords nor a_HitBlockFace.
a_HitCoords is the exact coords of the hit,
a_HitBlockCoords are the coords of the solid block that was hit,
a_HitBlockFace is the face of the solid block that was hit. */
static bool FirstSolidHitTrace(
cWorld & a_World,
const Vector3d & a_Start, const Vector3d & a_End,
Vector3d & a_HitCoords,
Vector3i & a_HitBlockCoords,
eBlockFace & a_HitBlockFace
);

You shouldn't look at the C++ code for Lua code parameters, they sometimes do differ, especially when the C++ code uses references as out-params - Lua can return multiple return values, so the API is reflecting that. Have a look at the API docs: https://api.cuberite.org/cLineBlockTracer.html

The function FirstSolidHitTrace() takes only 3 parameters, and returns 4 values, so the proper way to use it is: