Replicated event only work 1 time

I made something that can change the character appearance when clicked, but the problem is it only work 1 time, i tried adding a print() at the end but it says its fired

local script, detects what button is clicked:

local re = game.ReplicatedStorage:WaitForChild("CharacterRE")

for _, des in pairs(script.Parent:GetDescendants()) do
	if des:IsA("TextButton") then
		des.MouseButton1Click:Connect(function()
			print(des.Parent.Name)
			re:FireServer(des.Parent.Name)
		end)
	end
end

server script that changes the character

local chars = game.ReplicatedStorage:WaitForChild("Characters")

local classNames = {"Accessory", "Shirt", "Pants", "ShirtGraphic", "BodyColors"}

game.ReplicatedStorage.CharacterRE.OnServerEvent:Connect(function(plr, character)

	if not chars:FindFirstChild(character) then return end
	
	for _, child in pairs(chars:GetChildren()) do
		child.Parent = plr.OwnedCharacters
	end

	if plr.OwnedCharacters:FindFirstChild(character) and plr.Character and plr.Character:FindFirstChild("Humanoid") then

		for i, descendant in pairs(plr.Character:GetDescendants()) do

			if table.find(classNames, descendant.ClassName) or descendant:IsA("Decal") and descendant.Parent.Name == "Head" then

				descendant:Destroy()
			end
		end

		for i, descendant in pairs(plr.OwnedCharacters[character]:GetDescendants()) do

			if table.find(classNames, descendant.ClassName) then

				descendant:Clone().Parent = plr.Character

			elseif descendant:IsA("Decal") and descendant.Parent.Name == "Head" then
				descendant:Clone().Parent = plr.Character.Head
			end
		end
	end
end)

try replacing that with

for _, child in pairs(chars:GetChildren()) do
        if not plr.OwnedCharacters:FindFirstChild(child.Name) then
		local Clone = child:Clone()
        Clone.Parent = plr.OwnedCharacters
        end
	end

Try a bindable function with the same code but send and return a argument/parameter.