private void generate() {
		long time = System.currentTimeMillis();
		
		System.out.println(":: COMMENCING GENERATION OF WORLD: "+_Name+" ::");
		prepareFolder();
		_Output = new Output(_WorldSizeChunksX * DIMENSION_X, _WorldSizeChunksY * DIMENSION_Y, true);
		System.out.println("");
		
		System.out.println(":: Generating noise ::");
		_NoiseGenerator = new NoiseGenerator(_BaseTerrainSeed, _BaseTerrainOctaves, _BaseTerrainFrequency);
		_Noise = _NoiseGenerator.generate();
		System.out.println(":: Done! ::");
		System.out.println("");
		
		System.out.println(":: Generating base terrain ::");
		_BaseTerrainGenerator = new BaseTerrainGenerator(_Name, _WorldSizeChunksX, _WorldSizeChunksY, _Noise, _BaseTerrainIOFlags, _BaseTerrainLogDetails);
		String bterr = _BaseTerrainGenerator.generate();
		System.out.println(":: Done! ::");
		System.out.println(":: BaseTerrainGenerator result: "+bterr);
		if (bterr != "No errors.") return;
		System.out.println("");
		
		if (_FloorsOverview) {
			System.out.println(":: Generating floors overview ::");
			_FloorsOverviewGenerator = new FloorsOverviewGenerator(_Name, _WorldSizeChunksX, _WorldSizeChunksY, _Noise, _FloorSettings, true); //HARDCODED floors overview details.
			String foerr = _FloorsOverviewGenerator.generate();
			System.out.println(":: Done! ::");
			System.out.println(":: FloorsOverviewGenerator result: "+foerr);
			if (foerr != "No errors.") return;
			System.out.println("");
		}
		
		System.out.println(":: Generating temperature ::");
		_TemperatureGenerator = new TemperatureGenerator(_Name, _WorldSizeChunksX, _WorldSizeChunksY, _TemperatureSeed, _TemperatureOctaves, _TemperatureFrequency, _TemperatureIOFlags, _TemperatureLogDetails);
		String terr = _TemperatureGenerator.generate();
		System.out.println(":: Done! ::");
		System.out.println(":: TemperatureGenerator result: "+terr);
		if (terr != "No errors.") return;
		System.out.println("");
		
		System.out.println(":: Generating humidity ::");
		_HumidityGenerator = new HumidityGenerator(_Name, _WorldSizeChunksX, _WorldSizeChunksY, _HumiditySeed, _HumidityOctaves, _HumidityFrequency, _HumidityIOFlags, _HumidityLogDetails);
		String herr = _HumidityGenerator.generate();
		System.out.println(":: Done! ::");
		System.out.println(":: HumidityGenerator result: "+herr);
		if (herr != "No errors.") return;
		System.out.println("");
		
		System.out.println(":: Generating biomes ::");
		_BiomesGenerator = new BiomesGenerator(_Name, _WorldSizeChunksX, _WorldSizeChunksY, _BiomeIOFlags, _BiomeLogDetails);
		String berr = _BiomesGenerator.generate();
		System.out.println(":: Done! ::");
		System.out.println(":: BiomesGenerator result: "+berr);
		if (berr != "No errors.") return;
		System.out.println("");
		
		System.out.println(":: Generating rivers ::");
		_RiversGenerator = new RiversGenerator(_Name, _WorldSizeChunksX, _WorldSizeChunksY, _RiversMaxRivers, _RiversMinFloor, _RiversMinDist, _RiversIOFlags, _RiversLogDetails);
		String rerr = _RiversGenerator.generate();
		System.out.println(":: Done! ::");
		System.out.println(":: RiversGenerator result: "+rerr);
		if (rerr != "No errors.") return;
		System.out.println("");
		
		System.out.println(":: Generating borders ::");
		_BordersGenerator = new TileBordersGenerator(_Name, _WorldSizeChunksX, _WorldSizeChunksY, _BordersIOFlags, _BordersLogDetails);
		String boerr = _BordersGenerator.generate();
		System.out.println(":: Done! ::");
		System.out.println(":: BordersGenerator result: "+boerr);
		if (boerr != "No errors.") return;
		System.out.println("");
		
		System.out.println(":: Generating forests ::");
		_ForestGenerator = new ForestGenerator(_Name, _WorldSizeChunksX, _WorldSizeChunksY, _ForestsSeed, _ForestsOctaves, _ForestsFrequency, _ForestsBaseChanceForest, _ForestsBaseChanceNonForest, _ForestsIOFlags, _ForestsLogDetails);
		String ferr = _ForestGenerator.generate();
		System.out.println(":: Done! ::");
		System.out.println(":: ForestGenerator result: "+ferr);
		if (boerr != "No errors.") return;
		System.out.println("");
		
		System.out.println("======= SAVING OUTPUT =======");
		_OutputSaver = new OutputSaver(_Name, _WorldSizeChunksX, _WorldSizeChunksY);
		for (SaveMode mode : _SaveModes) {
			_OutputSaver.addMode(mode);
		}
		_OutputSaver.setOutput(_Output);
		_OutputSaver.save();
		System.out.println("");
		
		//_Output.debugCheck();
		
		long millis = System.currentTimeMillis() - time;
		System.out.println("Generation time: "+String.format("%d min, %d sec", 
			    TimeUnit.MILLISECONDS.toMinutes(millis),
			    TimeUnit.MILLISECONDS.toSeconds(millis) - 
			    TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))
			));
		
	}