That function detects if there are any players, so call it every time it hits the ground. Otherwise you'll be doing two checks for players rather than one.
However, since you'll be using a projectile, you're gonna wanna use YourDatablock::onCollision. The downside about this is that I don't think it'll trigger that if the grenade hits the ground, only if it hits a brick, player, vehicle, or other object. I got around this with onImpact earlier, but that only works for players and vehicles. You could theoretically make the player throw a vehicle, then after a certain amount of time have that vehicle explode as if it were a grenade, but right now I'm a little too lazy to explain the whole process. Basically, you'd parent YourWeapon::onFire and create a new vehicle at the player's getMuzzlePoint(0) rotated to their getWords(%player.getTransform(), 3, 5) with a velocity of whatever the player's getMuzzleVector(0) is multiplied by whatever the initialVelocity of the projectile was supposed to be (and optionally add the player's getVelocity() to that), then set the vehicle explosion parameters on the vehicle and right after you create it call %vehicle.schedule(delay, "explode"); on it.