Look at how this generator works: https://github.com/BlockHorizons/BlockGenerator It can generate caves, hills, mountains, overhangs and such. Procedural world generation is extensive topic and there is no simple answer to your question, no preset method to $generate->hills(). You should start with the basics and learn what noise is and how it's used.