@Override
	public void populate(World world, Random random, Chunk source) {
		ChunkSnapshot snapshot;

		for (int i = 0; i < ITERATIONS; i++) {
			if (random.nextInt(100) < CHANCE) {
				snapshot = source.getChunkSnapshot();
				if (random.nextInt(100) < CORNER_CHANCE) {
					int x, z;
					switch (random.nextInt(4)) {
					case 0:
						x = 1;
						z = 1;
						break;
					case 1:
						x = 14;
						z = 1;
						break;
					case 2:
						x = 1;
						z = 14;
						break;
					case 3:
						x = 14;
						z = 14;
						break;
					default:
						continue; // wtf?
					}
					source.getBlock(x, CEILING_HEIGHT, z).setType(WEB_MATERIAL);
				} else {
					int x = random.nextInt(14) + 1;
					int z = random.nextInt(14) + 1;
					int y = snapshot.getHighestBlockYAt(x, z);

					if (ALLOWED_BASE_BLOCK.contains(source
							.getBlock(x, y - 1, z).getType())) {
						source.getBlock(x, y, z).setType(WEB_MATERIAL);
					}
				}
			}
		}
	}