Dont load mods that have no entry in world.mt
authorPilzAdam <pilzadam@minetest.net>
Sun, 19 May 2013 17:46:50 +0000 (19:46 +0200)
committerPilzAdam <pilzadam@minetest.net>
Sun, 19 May 2013 17:46:50 +0000 (19:46 +0200)
src/mods.cpp
src/server.cpp

index 64c3199928392d0f09b0cec2f97e98fb685918b4..a0a37afb9b049cac1fb787c10af5dad889f344dd 100644 (file)
@@ -220,7 +220,7 @@ ModConfiguration::ModConfiguration(std::string worldpath)
        Settings worldmt_settings;
        worldmt_settings.readConfigFile(worldmt.c_str());
        std::vector<std::string> names = worldmt_settings.getNames();
-       std::set<std::string> exclude_mod_names;
+       std::set<std::string> include_mod_names;
        for(std::vector<std::string>::iterator it = names.begin(); 
                it != names.end(); ++it)
        {       
@@ -229,14 +229,13 @@ ModConfiguration::ModConfiguration(std::string worldpath)
                // explicitely excluded. if mod is not mentioned at all, it is
                // enabled. So by default, all installed mods are enabled.
                if (name.compare(0,9,"load_mod_") == 0 &&
-                       !worldmt_settings.getBool(name))
+                       worldmt_settings.getBool(name))
                {
-                       exclude_mod_names.insert(name.substr(9));
+                       include_mod_names.insert(name.substr(9));
                }
        }
 
-       // Collect all mods in gamespec.addon_mods_paths,
-       // excluding those in the set exclude_mod_names
+       // Collect all mods that are also in include_mod_names
        std::vector<ModSpec> addon_mods;
        for(std::set<std::string>::const_iterator it_path = gamespec.addon_mods_paths.begin();
                        it_path != gamespec.addon_mods_paths.end(); ++it_path)
@@ -246,7 +245,7 @@ ModConfiguration::ModConfiguration(std::string worldpath)
                        it != addon_mods_in_path.end(); ++it)
                {
                        ModSpec& mod = *it;
-                       if(exclude_mod_names.count(mod.name) == 0)
+                       if(include_mod_names.count(mod.name) != 0)
                                addon_mods.push_back(mod);
                }
        }
index 40a4f8a024bd675bfc70d9d091cf580be38add00..0d724b1cb52bc6d5efd275b0de74a8eaee969f01 100644 (file)
@@ -727,19 +727,13 @@ Server::Server(
        std::string worldmt = m_path_world + DIR_DELIM + "world.mt";
        worldmt_settings.readConfigFile(worldmt.c_str());
        std::vector<std::string> names = worldmt_settings.getNames();
-       std::set<std::string> exclude_mod_names;
        std::set<std::string> load_mod_names;
        for(std::vector<std::string>::iterator it = names.begin(); 
                it != names.end(); ++it)
        {       
                std::string name = *it;  
-               if (name.compare(0,9,"load_mod_")==0)
-               {
-                       if(worldmt_settings.getBool(name))
-                               load_mod_names.insert(name.substr(9));
-                       else                    
-                               exclude_mod_names.insert(name.substr(9));
-               }
+               if(name.compare(0,9,"load_mod_")==0 && worldmt_settings.getBool(name))
+                       load_mod_names.insert(name.substr(9));
        }
        // complain about mods declared to be loaded, but not found
        for(std::vector<ModSpec>::iterator it = m_mods.begin();