Para hacer lo que tienes pensado hacer, lo más recomendable es montar un sistema mediante el comando stats que cuente los bloques de mineral de esmeralda que hay en un radio determinado del jugador. Ese radio vendrá determinado por las coordenadas relativas con origen en el jugador que incluyas en un fill.
Sé que suena complicado, y de hecho lo es de entender, pero sigue los pasos que te indico a continuación y lo tendrás listo antes de lo que te hubieras imaginado.
En primer lugar crea un nuevo objetivo scoreboard:scoreboard objectives add esmeralda dummy Esmeralda
Para hacer debug y comprobar su correcto funcionamiento muestra el objetivo que has creado en el lateral de la pantalla:scoreboard objectives setdisplay sidebar esmeralda
Carga en el scoreboard a todos los jugadores que van a detectar el bloque de esmeralda:scoreboard players add @a esmeralda 0
El siguiente comando stats pondrá en marcha un detector de los bloques que resultan afectados de ejecutar comandos desde la ubicación del jugador. Es decir, cualquiera de los comandos que modifiquen bloques (blockdata, clone, fill, setblock, testforblock, testforblocks) ejecutados, o bien directamente por el jugador, o mediante un execute al mismo, activarán el detector*:stats entity @a set AffectedBlocks @p[r=0] esmeralda
Utiliza en el primer selector de objetivo del comando anterior los mismos criterios que en el que le precede. Si no usaste ninguno, no modifiques nada.
*NOTA: Si deseas utilizar más de un detector de bloques simultáneamente, deberás gestionarlos utilizando diferentes valores en otro scoreboard, con el fin de que no se superpongan las detecciones de uno en los otros. Por otro lado, ya deberías estar haciéndolo, pero evita ejecutar comandos execute en el jugador que no tengan que ver con los mecanismos con stats. El motivo de esto es que al ejecutar cualquiera de los comandos que modifican bloques desde el jugador, probablemente resulte en falsos positivos para tu detector.
Dicho esto, los siguientes comandos deberán ser ejecutados en bucle, pues son los que harán actualizarse al detector cada tick (o con la frecuencia que desees si gestionas los intervalos mediante scoreboard). El último de los comandos será el criterio que ha de cumplir el jugador que tenga mineral de esmeralda en un radio de 6 bloques:execute @a ~ ~ ~ fill ~-6 ~-6 ~-6 ~6 ~6 ~6 minecraft:bed facing=east,occupied=true,part=head replace minecraft:emerald_ore 0
execute @a ~ ~ ~ fill ~-7 ~-7 ~-7 ~7 ~7 ~7 minecraft:emerald_ore 0 replace minecraft:bed facing=east,occupied=true,part=head
@a[score_esmeralda_min=1]
Con esto ya tienes un detector de bloques de mineral de esmeralda que no necesita de un testforblock por cada bloque a una distancia máxima X del jugador.
Espero que haya servido de ayuda, tanto a ti, como a todos lo que estuvieran interesados en saber algo más del comando stats o, por lo menos, a montar un detector en un mapa. Si tienen alguna duda no duden en responder o crear un nuevo tema detallando la situación problemática.