Issues with getting position while using BodyMovers

Screenshot_219
(What happens:)
The laser beam is appearing in front of the ship while i’m moving in that direction, but when I am not moving the laser comes from exactly where it should.

Screenshot_220
(What should happen. My velocity is at 0 for this test.)

The effect is amplified with how fast i’m moving using BodyMovers.

The code I use to generate the laser:

	local origin = firePoint.Position
	local direction = target.Value.Position - origin
	
	local raycastParams = RaycastParams.new()
	raycastParams.FilterDescendantsInstances = {script.Parent}
	raycastParams.FilterType = Enum.RaycastFilterType.Blacklist
	local raycastResult = workspace:Raycast(origin, direction, raycastParams)
	
	if raycastResult then
		local hitpart = raycastResult.Instance
		if hitpart == nil then
			return
		end
		
		if hitpart:IsDescendantOf(script.Parent.Parent.Parent) then
			return
		end
		
		local damageToDeal = (config.DamagePerSecond/60)*config.ShotLength
		energy.Value = energy.Value - config.EnergyPerSecond/60
		
		if hitpart.Parent:FindFirstChild("Core") then
			local core = hitpart.Parent.Core
			damage(core, damageToDeal)
		elseif hitpart.Parent.Parent:FindFirstChild("Core")	then
			local core = hitpart.Parent.Parent.Core
			damage(core, damageToDeal)
		elseif hitpart.Parent.Parent.Parent:FindFirstChild("Core")	then
			local core = hitpart.Parent.Parent.Parent.Core
			damage(core, damageToDeal)	
		end
		
		local BeamPart = Instance.new("Part")
		BeamPart.Name = "BeamPart"
		BeamPart.Color = config.Color
		BeamPart.Material = Enum.Material.Neon
		BeamPart.Parent = workspace.FX
		
		--local BeamMesh = Instance.new("SpecialMesh")
		--BeamMesh.MeshType = "Sphere"
		--BeamMesh.Parent = BeamPart
		
		
		local v = (origin - raycastResult.Position)
		BeamPart.CFrame = CFrame.new(raycastResult.Position + 0.5*v, origin)
		BeamPart.Size = Vector3.new(config.BeamXY[1], config.BeamXY[2] ,v.Magnitude)
		
		wait(1/60)
		BeamPart:Destroy()

How do I get an accurate position of a BasePart thats moving via a BodyMover?

Update:
I switched to server side and watched to see what happened. Even more strangely, the beam appeared where it should be at maximum speed.
Screenshot_221

This is not fixed. The client side is still extremely broken.

Remember to have the client be the network owner so the server isnt managing like 30 guns at once. Think of it like a class where 1 kid is doing all the homework, its going to take longer for everybody to get their homework done but if the whole class does it it will be exponentially faster