I've actually done the code already and this actually works:
Server Script
local debounce = true
local rs = game:GetService("ReplicatedStorage")
local SampleRemoteEvent = rs:FindFirstChild("SampleRemoteEvent")
script.Parent.Touched:Connect(function(hit)
if hit.Parent:FindFirstChild("Humanoid") then
if not debounce then
return
end
debounce = false
--Firing a remote event to the client so that the local script can clone the tool into the workspace
local player = game.Players:GetPlayerFromCharacter(hit.Parent)
SampleRemoteEvent:FireClient(player)
end
end)
Local Script
local rs = game:GetService("ReplicatedStorage")
local SampleRemoteEvent = rs:FindFirstChild("SampleRemoteEvent")
local ToolToClone = rs:FindFirstChild("Egg")
SampleRemoteEvent.OnClientEvent:Connect(function()
ToolToClone:Clone().Parent = game.Workspace
end)
What works: All my code works. Once a player has touched a brick, I want to have a tool spawn on the ground so the player can pick up the tool. This tool should ONLY be seen by this player hence why I need to use the client side of things.
The issue: The tool is not able to be picked up. It isn't accessible by even the client. The good thing is, it can be seen only by the player, but they cant be picked up which is the issue.
If anyone can point me in the right direction or give me an explanation as to why this is the case.
Feel free to test it in studio, ive done many tests. It's most likely a simple concept error on my part.

2 comments
I don't think the issue here is with the LocalScript and ServerScript since they have done their job. Their job is: when a player hit the brick, fires RemoteEvent, LocalScript receives it and clone the tool. So I think the problem is with the script of your tool, maybe there's something wrong with the "pick up" script, Im not sure, you can check it
There's no pick up script. I literally tried cloning it with the server script and it picked up perfectly. Therefore Im not sure if what im trying to do is even possible