From 50621ffe851223fb791d4ba47959585154d59d3f Mon Sep 17 00:00:00 2001
From: Perttu Ahola <celeron55@gmail.com>
Date: Tue, 20 Mar 2012 01:06:44 +0200
Subject: [PATCH] Fix mod paths

---
 src/server.cpp  | 22 +++++++---------------
 src/subgame.cpp | 12 +++++++-----
 src/subgame.h   |  6 +++---
 3 files changed, 17 insertions(+), 23 deletions(-)

diff --git a/src/server.cpp b/src/server.cpp
index b95d04713..87d43dc69 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -885,25 +885,13 @@ Server::Server(
 	infostream<<"- world:  "<<m_path_world<<std::endl;
 	infostream<<"- config: "<<m_path_config<<std::endl;
 	infostream<<"- game:   "<<m_gamespec.path<<std::endl;
-	for(std::set<std::string>::const_iterator i = m_gamespec.addon_paths.begin();
-			i != m_gamespec.addon_paths.end(); i++)
-		infostream<<"- addons: "<<(*i)<<std::endl;
 
-	// Path to builtin.lua
-	std::string builtinpath = porting::path_share + DIR_DELIM + "builtin"
-			+ DIR_DELIM + "builtin.lua";
-
-	// Add default global mod search path
-	m_modspaths.push_front(m_gamespec.path + DIR_DELIM "mods");
 	// Add world mod search path
 	m_modspaths.push_front(m_path_world + DIR_DELIM + "worldmods");
 	// Add addon mod search path
-	for(std::set<std::string>::const_iterator i = m_gamespec.addon_paths.begin();
-			i != m_gamespec.addon_paths.end(); i++)
-		m_modspaths.push_front((*i) + DIR_DELIM + "mods");
-	// Add simple user mod search path
-	m_modspaths.push_front(porting::path_user + DIR_DELIM + "mods"
-			+ DIR_DELIM + m_gamespec.id);
+	for(std::set<std::string>::const_iterator i = m_gamespec.mods_paths.begin();
+			i != m_gamespec.mods_paths.end(); i++)
+		m_modspaths.push_front((*i));
 
 	// Print out mod search paths
 	for(core::list<std::string>::Iterator i = m_modspaths.begin();
@@ -912,6 +900,10 @@ Server::Server(
 		infostream<<"- mods:   "<<modspath<<std::endl;
 	}
 	
+	// Path to builtin.lua
+	std::string builtinpath = porting::path_share + DIR_DELIM + "builtin"
+			+ DIR_DELIM + "builtin.lua";
+
 	// Create world if it doesn't exist
 	if(!initializeWorld(m_path_world, m_gamespec.id))
 		throw ServerError("Failed to initialize world");
diff --git a/src/subgame.cpp b/src/subgame.cpp
index e55f1bc97..3d4480ebf 100644
--- a/src/subgame.cpp
+++ b/src/subgame.cpp
@@ -38,14 +38,16 @@ SubgameSpec findSubgame(const std::string &id)
 	}
 	if(!fs::PathExists(game_path))
 		return SubgameSpec();
-	// Find addon directories
-	std::set<std::string> addon_paths;
+	// Find mod directories
+	std::set<std::string> mods_paths;
+	mods_paths.insert(game_path + DIR_DELIM + "mods");
 	if(!user_game)
-		addon_paths.insert(share + DIR_DELIM + "addons" + DIR_DELIM + id);
-	addon_paths.insert(user + DIR_DELIM + "addons" + DIR_DELIM + id);
+		mods_paths.insert(share + DIR_DELIM + "mods" + DIR_DELIM + id);
+	if(user != share || user_game)
+		mods_paths.insert(user + DIR_DELIM + "mods" + DIR_DELIM + id);
 	// TODO: Read proper name from game_path/game.conf
 	std::string game_name = id;
-	return SubgameSpec(id, game_path, addon_paths, game_name);
+	return SubgameSpec(id, game_path, mods_paths, game_name);
 }
 
 std::set<std::string> getAvailableGameIds()
diff --git a/src/subgame.h b/src/subgame.h
index b201a7402..061bb4180 100644
--- a/src/subgame.h
+++ b/src/subgame.h
@@ -28,16 +28,16 @@ struct SubgameSpec
 {
 	std::string id; // "" = game does not exist
 	std::string path;
-	std::set<std::string> addon_paths;
+	std::set<std::string> mods_paths;
 	std::string name;
 
 	SubgameSpec(const std::string &id_="",
 			const std::string &path_="",
-			const std::set<std::string> &addon_paths_=std::set<std::string>(),
+			const std::set<std::string> &mods_paths_=std::set<std::string>(),
 			const std::string &name_=""):
 		id(id_),
 		path(path_),
-		addon_paths(addon_paths_),
+		mods_paths(mods_paths_),
 		name(name_)
 	{}
 
-- 
GitLab