local offset = Vector3.new() -- in your case, Vector3.new(0,0,5), or something like that
Part.CFrame = root.CFrame*CFrame.new(offset) -- should offset while keeping rotations of root.CFrame
In this example, Part is the part you want to put in front of the player, root is the humanoidrootpart, and offset is the offset from the torso.
I see that you’re using Position, which you shouldn’t do, you want to use the part’s cframe property.
You don’t want to use position.
A CFrame value is a composition of position and rotation. If you used position it would be offset because position has a safety feature on it, keeping it from being in the position you set it sometimes.
If you were to use a Vector rather than a CFrame, it won’t always spawn in front of the player as its based on the world space and contains no rotation.