How would I make this movement look normal?

I have made a movement module that replaces that Roblox default. It works but really weirdly the jumping is really weird and also the movement feels weird.

The module code is


local MovementClient = {}
MovementClient.__index = MovementClient

local UserInputService = game:GetService("UserInputService")

function Lerp(a, b, t)
	return a + (b - a) * t
end

function MovementClient.new(Player, Character)
	local newClient = {}
	setmetatable(newClient, MovementClient)
	
	newClient.Player = Player
	newClient.Character = Character
	
	newClient.MoveVector = Vector3.new(0, 0, 0)
	newClient.CameraTurn = 0
	
	-- Disable roblox default movement system
	
	local Humanoid = Character:WaitForChild("Humanoid")
	
	Humanoid.BreakJointsOnDeath = false
	Humanoid.MaxHealth = 0
	Humanoid.Health = 0
	Humanoid.WalkSpeed = 0
	
	local Attch = Instance.new("Attachment")
	Attch.Name = "MainAttch"
	Attch.Parent = Character.HumanoidRootPart
	
	local AlignPosition = Instance.new("AlignPosition")
	AlignPosition.Mode = Enum.PositionAlignmentMode.OneAttachment
	AlignPosition.Attachment0 = Attch
	AlignPosition.Position = Character.HumanoidRootPart.Position
	AlignPosition.Parent = Character.HumanoidRootPart
	
	newClient.AlignPosition = AlignPosition
	
	UserInputService.JumpRequest:Connect(function()
		if Humanoid.FloorMaterial ~= Enum.Material.Air then
			newClient.MoveVector = newClient.MoveVector + Vector3.new(0, 8, 0) 
		end
	end)
	
	return newClient
end

function MovementClient:CalculateCharacterTotalMass()
	local totalMass = 0
	for i,v in pairs(self.Character:GetDescendants()) do
		if not v:IsA("BasePart") then continue end
		totalMass += v.Mass
	end
	return totalMass
end


function MovementClient:Update(deltaTime) -- This function is called on RenderStepped
	local Humanoid = self.Character:WaitForChild("Humanoid")
	
	self.MoveVector = Humanoid.MoveDirection
	
	local newPos = self.AlignPosition.Position + self.MoveVector
	newPos = Vector3.new(newPos.X, self.Character.HumanoidRootPart.Position.Y / workspace.Gravity, newPos.Z)
	
	self.AlignPosition.Position = newPos
	
	local MouseDelta = UserInputService:GetMouseDelta()
	
	self.CameraTurn = Lerp(self.CameraTurn, math.clamp(MouseDelta.X, -3, 3), (15 * deltaTime))
	
	workspace.CurrentCamera.CFrame = workspace.CurrentCamera.CFrame * CFrame.Angles(0, 0, math.rad(self.CameraTurn))
end

return MovementClient

If anyone could help it would be appreciated

Haven’t dealt with custom movements at all, so take what I say with a grain of salt (may also be completely irrelevant to the issue - if so, I apologize for wasting your time).

It may just be that the jump doesn’t have enough power behind it. It seems to go up then down really quickly, making it seem like there is an extremely strong gravity.
If you change the value of

newClient.MoveVector = newClient.MoveVector + Vector3.new(0, 8, 0) 

to something larger

newClient.MoveVector += Vector3.new(0, 16, 0)  -- e.g. 16

does it make it look any better?

It did not change anything which is strange

is this line affecting it at all?

newClient.MoveVector = Vector3.new(0, 0, 0)

(same disclaimer as my previous post)

It doesn’t effect it, which is weird so something might be cancelling it.
It looks like roblox default is responsible for that weird jumping.

Possibly this line here, namely:

self.Character.HumanoidRootPart.Position.Y / workspace.Gravity

(Again, same disclaimer as my original post)

I have changed the code so when he requests to jump it will set variable to true and in the update function if the variable is true it will add to the Y pos some number. Doesn’t seem to affect it too

UserInputService.JumpRequest:Connect(function()
		if Humanoid.FloorMaterial ~= Enum.Material.Air then
			newClient.queueJump = true
		end
	end)
local Humanoid = self.Character:WaitForChild("Humanoid")
	
	self.MoveVector = Humanoid.MoveDirection
	
	local newPos = self.AlignPosition.Position + self.MoveVector
	newPos = Vector3.new(newPos.X, newPos.Y / workspace.Gravity, newPos.Z)
	
	if self.queueJump then
		newPos = Vector3.new(newPos.X, newPos.Y + 10, newPos.Z)
		self.queueJump = false
	end
	
	self.AlignPosition.Position = newPos
	
	local MouseDelta = UserInputService:GetMouseDelta()
	
	self.CameraTurn = Lerp(self.CameraTurn, math.clamp(MouseDelta.X, -3, 3), (15 * deltaTime))
	
	workspace.CurrentCamera.CFrame = workspace.CurrentCamera.CFrame * CFrame.Angles(0, 0, math.rad(self.CameraTurn))

When multiplied by gravity
newPos = Vector3.new(newPos.X, newPos.Y + (20 * workspace.Gravity), newPos.Z)

it does have effect, but the characters goes up too quickly and then go down like if he had parachute