The scripts work perfectly fine, but because the game is filtering enabled I can't just have the script in the local script - I have to use a remote event. However, when I do this method the head moving is extremely rusty and is so slow moving due to it being in a server script - I really would like to know how to fix this, thanks! Note: The 'Head' is a model inside the player and the 'head' is a mesh part so i can do custom materials.
So I have 1 server script in the character model and 1 local script in the character model; this is the server script
game.ReplicatedStorage.essential.remotes.createJoint.OnServerEvent:Connect(function(player,Character,Head)
Head.head.CFrame = Character.Head.CFrame
end)
then this is the local script
game:GetService("RunService").RenderStepped:Connect(function()
remotes.createJoint:FireServer(Character,head)
end)

3 comments
Can you tell me what your main goal is. Are you trying to make the players head move based of the camera etc.
Why didn't you run HeartBeat on the server instead of sending a remote event to the server on RenderStepped?
You could lerp the head to the cframe