y'a deux moyen de faire ça, soit tu check les blocks un par un depuis le joueur jusqu'a la couche 256, avec un armor stand qui set tp ou autre, mais c'est plutôt long et compliqué a faire, sinon, tu peut juste faire comme ça:
Code (cpp):
execute as @a[] at @s if blocks 0 ~ 0 0 255 0 ~ ~ ~ all run effect give @s minecraft:poison
la commande après le run sera exécuté uniquement si les blocks de 0 ~ 0 a 0 255 0 sont les même que ceux du joueurs, le problème c'est que cette technique demande une colonne complètement vide et toujours chargé, mais en 1.13.1, c'est pas trop un problème avec le /forceload . Cette méthode a un autre inconvénient, c'est qu'on ne peut pas détecter autre chose que de l'air (de l'herbe ou autre, il pleut quand même à travers), alors qu'avec la première, on peut tester n'importe quels blocks grâce au tags(nouveauté de la 1.13 pour faire des "liste" de blocks réutilisable pour les /fill par exemple)