Throw script only showing thrown part on clientside

I’m making a script that grabs a part (specifically a boot) from replicated storage, clones it, and shoots it out of the player’s head whenever the key f is pressed. It works, however, after testing, I noticed that it only shows on the client that threw the part. How can I fix this?

Here is my script:

local player = game.Players.LocalPlayer
local mouse = player:GetMouse()


mouse.KeyDown:Connect(function(Key)
Key = Key:lower()
	if Key == 'f' then
		local model = game.ReplicatedStorage.Boot 
		local clonedModel = model:Clone() 
		clonedModel.Parent = workspace
		clonedModel:PivotTo(player.Character.Head.CFrame * CFrame.new(0,0,-1))
		clonedModel.Velocity = clonedModel.CFrame.LookVector * 75
		clonedModel.Orientation = Vector3.new(math.random(1, 360), math.random(1, 360), math.random(1, 360))
	end
end)

Since you create and throw the boot on the client, other clients have no idea that it was thrown.

What you need to do is use a remote event and pass the direction of the throw to the server.
Then, you can either perform the throw on the server, or make all the clients play the same throw.

If you decide to perform the throw on the server, players can experience laggy movement of the item but it will be synchronized across all the clients.
If you decide to play locally for all the clients, the movement will be smooth but the item position may differ between the clients.

I performed the throw on the server. The thrown part freezes for a moment, then throws itself out. Is this the “laggy movement” you were talking about? Also, how would I play across all the clients? Would I write in a server script that if a specific player presses f, fire a remote event that connects to a local script to throw a boot at that player’s position for all clients? Would this make it so that the server can’t see thrown boots?