From dcd0b63f645bccf497a030b6b1cec97178542eb1 Mon Sep 17 00:00:00 2001
From: PilzAdam <pilzadam@minetest.net>
Date: Sun, 19 May 2013 19:46:50 +0200
Subject: [PATCH] Dont load mods that have no entry in world.mt

---
 src/mods.cpp   | 11 +++++------
 src/server.cpp | 10 ++--------
 2 files changed, 7 insertions(+), 14 deletions(-)

diff --git a/src/mods.cpp b/src/mods.cpp
index 64c319992..a0a37afb9 100644
--- a/src/mods.cpp
+++ b/src/mods.cpp
@@ -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);
 		}
 	}
diff --git a/src/server.cpp b/src/server.cpp
index 40a4f8a02..0d724b1cb 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -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();
-- 
GitLab