If it hits the body instead of the blockpart first, something is probably wrong with your raycast.
I would check what’s going on with the rays but if you don’t feel like so, you can wait with damaging the player and then check if the attack was blocked.
local lastBlock = {}
hitbox.OnHit:Connect(function(hit)
if hit.Name == 'Body' then
task.wait(.2)
if lastBlock[attacker] and tick() - lastBlock[attacker] < .4 then return end
-- damage handling
elseif hit.Name == 'Blockpart' then
lastBlock[attacker] = tick()
end
end
Remember about initializing lastBlock in PlayerAdded and removing player key in PlayerRemoving.