Одним из способов было бы проверить, например, находится ли прямо рядом или, как в этом примере, ниже игрока дубовая доска.
/execute as @a at @s run execute if block ~ ~-0.1 ~ oak_planks at @s run say Hello, oak!
Поэтому вам придется выполнять отдельные команды для каждого возможного блока, который находится рядом с игроком.
Я не удивлюсь, если есть гораздо более простое решение, но это то, что пришло мне в голову.