The idea is that a block has a radius, within which if a player appears, then an effect must be applied on it until he goes back outside this radius. Something like a beacon from the usual minecraft. I tried in a block class to do it this way:
 
    @Override
    public void tick(BlockState p_225534_1_, ServerWorld world, BlockPos pos, Random p_225534_4_) {
        super.tick(p_225534_1_, world, pos, p_225534_4_);
        int radius = 10;
        List<Entity> ent = world.getEntities(EntityType.PLAYER.create(world), new AxisAlignedBB(pos.getX() - radius, pos.getY() - radius, pos.getZ() - radius, pos.getX() + radius, pos.getY() + radius, pos.getZ() + radius));
        for (Entity n : ent) {
            if (n instanceof PlayerEntity) {
                PlayerEntity pl = (PlayerEntity) n;
                pl.addEffect(new EffectInstance(Effects.BLINDNESS, 150));
            }
        }
    }
	But for some reason the "tick" function is called only when a random tick hits this block. In fact, I need to call this function all the time, but I cannot implement it. Thank you in advance