Hello. I'm new to modding, so do not judge strictly. I used this ore generator: 
 
public class OreGen implements IWorldGenerator {
  
    @Override
    public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) {
        switch(world.provider.getDimension()) {
      
            case -1:
                runGenerator(ModBlocks.tutorialOre.getDefaultState(), 4 + random.nextInt(4), 24, 24, 128, BlockMatcher.forBlock(Blocks.NETHERRAK), world, random, chunkX, chunkZ);
              break;
            case 0:
                runGenerator(ModBlocks.tutorialOre.getDefaultState(), 1 + random.nextInt(4), 8, 16, 64, BlockMatcher.forBlock(Blocks.STONE), world, random, chunkX, chunkZ);
              break;
            case 1:
                runGenerator(ModBlocks.tutorialOre.getDefaultState(), 8, 24, 8, 128, BlockMatcher.forBlock(Blocks.END_STONE), world, random, chunkX, chunkZ);
              break;
        }
  
    private void runGenerator(IBlockState blockToGen, int blockAmount,  int chancesToSpawn, int minHeight, int maxHeight, Predicate<IBlockState> blockToReplace, World world, Random rand, int chunk_X, int chunk_Z){
        if (minHeight < 0 || maxHeight > 256 || minHeight > maxHeight)
      
        throw new IllegalArgumentException("Illegal Height Arguments for WorldGenerator");
    WorldGenMinable generator = new WorldGenMinable(blockToGen, blockAmount, blockToReplace); 
  
    int heightdiff = maxHeight - minHeight +1;
  
    for (int i=0; i<chancesToSpawn; i++){
  
            int x = chunk_X * 16 +rand.nextInt(16);
            int y = minHeight + rand.nextInt(heightdiff);
            int z = chunk_Z * 16 + rand.nextInt(16);
            generator.generate(world, rand, new BlockPos(x, y, z));
      
        }
    }
  
}
	How can I make ore be generated only near the lava and in strict form (for example a cube or a ball)?