Why isn't the event running?

Hello everyone!

So I am creating this thing that is supposed to sort your tools,
and I wanted to add a drop function that is called on the server when the user presses the ‘drop’ button in their inventory.

Whenever the drop event is called it correctly creates the block, and puts it in workspace but whenever I touch it , it doesn’t run the touched event.

Why is that?

Server script:

local Remotes = game.ReplicatedStorage.Remotes
local Bindables = game.ServerStorage.Bindables
local Toolgivers = game.ServerStorage.ToolGivers
local Tools = game.ServerStorage.Tools

local SlotSetter = Remotes.SlotSetter
local DropFromInv = Remotes.DropFromInv
local RefreshVisuals = Remotes.RefreshVisuals

local AddToToolGivers = Bindables.AddToToolGivers

local CollectionService = game:GetService("CollectionService")

DropFromInv.OnServerEvent:Connect(function(plr,toolName : string)
	local Inventory = plr:FindFirstChild("Inventory")
	if not Inventory then return end
	
	local tool = Inventory:FindFirstChild(toolName)
	if not tool or not tool:IsA("Tool") then return end
	
	local CorrespondingToolGiver = Toolgivers:FindFirstChild(toolName)
	if not CorrespondingToolGiver then return end
	
	local clone = CorrespondingToolGiver:Clone()
	clone.Parent = workspace
	clone.Position = plr.Character.PrimaryPart.Position + Vector3.new(10,15,5)
	tool:Destroy()
	AddToToolGivers:Fire(CorrespondingToolGiver)
	RefreshVisuals:FireClient(plr)
end)

AddToToolGivers.Event:Connect(function(part : Part)
	print(part.Name) 
	part.Touched:Connect(function(hit)
		print("ran at all?")
		if not part.CanTouch then return end
		local plr = game.Players:GetPlayerFromCharacter(hit.Parent)
		if not plr then return end
		print("is plr")
		local Tool = Tools:FindFirstChild(part.Name)
		if not Tool then return end
		
		local Inventory = plr:FindFirstChild("Inventory")
		if not Inventory then return end
		
		Tool:Clone().Parent = Inventory
		part.CanTouch = false
		part:Destroy()
		print("end")
	end)
	part.CanTouch = true
end)

--[[
Other code that is irrelevant to this post...
...
--]]

for i,v in pairs(CollectionService:GetTagged("ToolGiver")) do
	if not workspace:IsAncestorOf(v) then return end
	AddToToolGivers:Fire(v)
end

So about the print statements, I have a test block preloaded in workspace, that gets picked up by collectionservice and a touch handler is added.
It works perfectly, it spawns the tool in my inventory and it destroys itself.

But whenever I drop the tool that got added to my inventory, (it correctly destroys the tool, spawns the toolgiver and refreshes the ui) the toolgiver doesn’t destroy itself and it does not give me the tool whenever I touch it.
For the second toolgiver I touch it only prints the name, but any print statement in the event, like “Run at all?” does not run.
The first one works fine and it prints everything correctly.

Thanks in advance!