Royce, para aplicar un efecto a un jugador solo si aún no tiene ese efecto, puedes usar una combinación de comandos con execute y effect.
Así es como se hace:
Prueba este comando (asegúrate de que el bloque de comando esté configurado en "Repetir" y "Siempre activo".):
execute as @a[distance=..5] unless entity @s[nbt={ActiveEffects:[{Id:}]}] run effect give @s true
@a[distance=..5]
: apunta a todos los jugadores dentro de un radio de 5 bloques (puedes cambiar la distancia).
unless entity @s[nbt={ActiveEffects:[{Id:}]}]
: verifica si el jugador no tiene ningún efecto.
effect give @s true
: otorga el efecto al jugador. El parámetro true oculta los efectos de partículas.
Por ejemplo, si quieres darle al jugador el efecto de Velocidad (ID del efecto 1) por 10 segundos con un amplificador de 1:
execute as @a[distance=..5] unless entity @s[nbt={ActiveEffects:[{Id:1}]}] run effect give @s minecraft:speed 10 1 true
Y para evitar que el chat se llene de mensajes, el true al final del comando de efecto asegura que la aplicación del efecto sea silenciosa.
Avísame cómo te va con esto.