I'm working on a heal power up that heals a player to max health, rests for thirty seconds, and then it reenables itself to be used again. I'm using the method that Urist McSpark implemented in one of his Hour of Code videos, where the script is finding the parent of whatever part touched it. If the parent is a player, then it finds its "Humanoid" and resets the health back to max. The problem that I ran into while testing this is that the mesh of the hat keeps touching the power up first, and its parent is the hat itself (Which is obviously not a player). Below I'll put the code I've written:

local medkit = script.Parent
local da = medkit.DecalA
local db = medkit.DecalB
local cooldown = 30
local isOn = true


local function turnoff()
	medkit.Transparency = .7
	da.Transparency = .7
	db.Transparency = .7
	isOn = false
end

local function turnOn()
	medkit.Transparency = 0
	da.Transparency = 0
	db.Transparency = 0
	isOn = true
end

local function heal(part)
	if (isOn == false) then return end
	if (isOn == true) then
	local parent = part.Parent
	local health = parent.Humanoid.Health
		if game.Players:GetPlayerFromCharacter(parent)then
			parent.Humanoid.Health = parent.Humanoid.MaxHealth
			turnoff()
		end
	end
end

medkit.Touched:connect(heal)

while true do
	wait(cooldown)
	if (isOn == false) then turnOn() end
end

As I asked in the title, how can I detect players in a better way? I apologize if it's an obvious question, as I've just picked up scripting last week. I feel like the answer is obvious, but I'm not picking up on it. Thanks in advance.