@Override
	public void populateChunk(RealChunk chunk, Random random, int chunkX, int chunkZ) {
		World world = noise.getWorld();
		
		// cover the ground
		int y = groundLevel + 1;
		for (int x = 0; x < 16; x++) {
			for (int z = 0; z < 16; z++) {
				
				// only plant in the right place
				Material surface = chunk.getBlock(x, y - 1, z);
				if (surface == matTurf) {
					
					// plant some plants
					double plantNoise = random.nextDouble();
					
					// dead or not?
					if (noise.isDecrepit(random)) {
						if (plantNoise < oddsOfTree) {
							chunk.setBlocks(x, y, y + random.nextInt(4), z, matTrunk);
						} else if (plantNoise < oddsOfFlower) {
							chunk.setBlock(x, y, z, FarmGenerator.deadOnDirt);
						}
						
					// its ALIVE!
					} else {
						if (plantNoise < oddsOfTree) {
							world.generateTree(chunk.getBlockLocation(x, y, z), getRandomTreeType(random));
						} else if (plantNoise < oddsOfFlower) {
							chunk.setBlock(x, y, z, getRandomFlowerType(random), (byte) 0, false);
						} else if (plantNoise < oddsOfGrass) {
							chunk.setBlock(x, y, z, intGrassBlades, (byte) 1, false);
						}
					}
				}
			}
		}
	}