- else{
- // No specific world was commanded
- // Check if the world is found from the default directory, and if
- // not, see if the legacy world directory exists.
- world_path = porting::path_user + DIR_DELIM + "server" + DIR_DELIM + "worlds" + DIR_DELIM + "world";
- std::string legacy_world_path = porting::path_user+DIR_DELIM+".."+DIR_DELIM+"world";
- if(!fs::PathExists(world_path) && fs::PathExists(legacy_world_path)){
- errorstream<<"Warning: Using legacy world directory \""
- <<legacy_world_path<<"\""<<std::endl;
- world_path = legacy_world_path;
- is_legacy_world = true;
+ // No world was specified; try to select it automatically
+ else
+ {
+ // Get information about available worlds
+ std::vector<WorldSpec> worldspecs = getAvailableWorlds();
+ // If a world name was specified, select it
+ if(commanded_worldname != ""){
+ world_path = "";
+ for(u32 i=0; i<worldspecs.size(); i++){
+ std::string name = worldspecs[i].name;
+ if(name == commanded_worldname){
+ world_path = worldspecs[i].path;
+ break;
+ }
+ }
+ if(world_path == ""){
+ dstream<<_("World")<<" '"<<commanded_worldname<<"' "<<_("not "
+ "available. Available worlds:")<<std::endl;
+ print_worldspecs(worldspecs, dstream);
+ return 1;
+ }
+ }
+ // If there is only a single world, use it
+ if(worldspecs.size() == 1){
+ world_path = worldspecs[0].path;
+ dstream<<_("Automatically selecting world at")<<" ["
+ <<world_path<<"]"<<std::endl;
+ // If there are multiple worlds, list them
+ } else if(worldspecs.size() > 1){
+ dstream<<_("Multiple worlds are available.")<<std::endl;
+ dstream<<_("Please select one using --worldname <name>"
+ " or --world <path>")<<std::endl;
+ print_worldspecs(worldspecs, dstream);
+ return 1;
+ // If there are no worlds, automatically create a new one
+ } else {
+ // This is the ultimate default world path
+ world_path = porting::path_user + DIR_DELIM + "worlds" +
+ DIR_DELIM + "world";
+ infostream<<"Creating default world at ["
+ <<world_path<<"]"<<std::endl;