Como comentó Fabian Röling, ese comando funcionaría así:
/execute as @e at @s positioned over world_surface if entity @s[distance=..1] run
Sin embargo, la distancia
es bastante importante.
Si la entidad está en un bloque completo y puede ver el sol, distance=..0
funciona genial. Pero en mis pruebas, usé bloques de miel para mantener quietas a las entidades, y esas entidades no se vieron afectadas.
Usar distance=..0.5
funcionó, al igual que cuando la entidad estaba en una losa.
Pero si la entidad está en medio de un salto y más lejos de la superficie que 0.5, entonces no será detectada.
Si aumentas la distancia a algo más alto es posible que detectes el techo en su lugar, como descubrí que si hay un bloque encima de la cabeza de la entidad y la distancia es 3, aún será afectada.
El bloque más pequeño en el que se encuentre la entidad, mayor será la distancia que necesitas, si la entidad está en una alfombra o una capa de nieve de 1, necesitas al menos una distancia de 0.94.
Por lo tanto, recomendaría usar distance=..1
ya que debería funcionar para todas las medias losas. Para una entidad en medio de un salto, encontré que 1.3 funciona bien, pero esas pruebas no son perfectas.