Tool.Grip direction vectors wrong probably

Hello. I am trying to make an FPS type game, and I want to display the current tool like the way Minecraft does. To achieve that, I made the tool offsetted from the player’s camera instead of their right arm, and the server sees the tool offested from the player’s arm.

But the issue I am having is offsetting the tool CFrame using its Grip property. I tried doing it using this code:

handle.CFrame = camera.CFrame * cf * CFrame.fromMatrix(tool.GripPos, tool.GripRight, tool.GripUp, -tool.GripForward)
--variable cf is the offset where the "right hand" is located

But when I do this, the tool is oriented wrong.
client


And it’s not the grip properties itself because
server

And if I negate tool.GripForward…

handle.CFrame = camera.CFrame * cf * CFrame.fromMatrix(tool.GripPos, tool.GripRight, tool.GripUp, tool.GripForward)

(thus being

handle.CFrame = camera.CFrame * cf * tool.Grip

), then the tool becomes inside-out.

Nevermind. Problem solved. After several days, I found out the solution myself.

cf = CFrame.new(1.3, -3, -2, 1, 0, -0, 0, 0, 1, 0, -1, -0) * CFrame.Angles(math.pi / 2, 0, 0)
--The CFrame.new is the character's RightGrip.C0, which always stays the same value.
handle.CFrame = CFrame.fromMatrix(camera.CFrame.p, camera.CFrame.RightVector, camera.CFrame.UpVector, -camera.CFrame.LookVector) * cf * tool.Grip:inverse()

This is why I shouldn’t ask for help. Though I do wonder about better what to invert the camera’s LookVector.