diff options
author | PilzAdam <pilzadam@minetest.net> | 2013-05-18 17:00:47 +0200 |
---|---|---|
committer | PilzAdam <pilzadam@minetest.net> | 2013-05-19 02:15:36 +0200 |
commit | 45fcc9de29de762e8dde20a50db4a3184c830e42 (patch) | |
tree | 2a947b0ffa01e1aa49a755b6bf37fc393409e4b5 | |
parent | 6074163bf358ba8bf3a012e8093e24ecab5b6d61 (diff) | |
download | minetest-45fcc9de29de762e8dde20a50db4a3184c830e42.tar.gz minetest-45fcc9de29de762e8dde20a50db4a3184c830e42.tar.bz2 minetest-45fcc9de29de762e8dde20a50db4a3184c830e42.zip |
New modsystem
Mods are placed in $path_<user/share>/mods
They can be enabled per world in world.mt or the configure world window
-rw-r--r-- | doc/lua_api.txt | 4 | ||||
-rw-r--r-- | mods/minetest/mods_here.txt | 1 | ||||
-rw-r--r-- | mods/mods_here.txt | 4 | ||||
-rw-r--r-- | src/guiConfigureWorld.cpp | 59 | ||||
-rw-r--r-- | src/guiConfigureWorld.h | 3 | ||||
-rw-r--r-- | src/subgame.cpp | 4 |
6 files changed, 19 insertions, 56 deletions
diff --git a/doc/lua_api.txt b/doc/lua_api.txt index cd90b5aa5..b7be50206 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -60,9 +60,9 @@ Mod load path ------------- Generic: $path_share/games/gameid/mods/ - $path_share/mods/gameid/ + $path_share/mods/ $path_user/games/gameid/mods/ - $path_user/mods/gameid/ <-- User-installed mods + $path_user/mods/ <-- User-installed mods $worldpath/worldmods/ In a run-in-place version (eg. the distributed windows version): diff --git a/mods/minetest/mods_here.txt b/mods/minetest/mods_here.txt deleted file mode 100644 index 5135cb947..000000000 --- a/mods/minetest/mods_here.txt +++ /dev/null @@ -1 +0,0 @@ -You can install Minetest mods by copying (and extracting) them into this folder. diff --git a/mods/mods_here.txt b/mods/mods_here.txt new file mode 100644 index 000000000..e105fbd1a --- /dev/null +++ b/mods/mods_here.txt @@ -0,0 +1,4 @@ +You can install Minetest mods by copying (and extracting) them into this folder. +To enable them, go to the configure world window in the main menu or write + load_mod_<modname> = true +in world.mt in the world directory. diff --git a/src/guiConfigureWorld.cpp b/src/guiConfigureWorld.cpp index f94ed7d17..e33e87ef5 100644 --- a/src/guiConfigureWorld.cpp +++ b/src/guiConfigureWorld.cpp @@ -116,40 +116,18 @@ GUIConfigureWorld::GUIConfigureWorld(gui::IGUIEnvironment* env, // mod_names if(!mod.is_modpack && mod_names.count(modname) == 0) - m_new_mod_names.insert(modname); + m_settings.setBool("load_mod_"+modname, false); } - if(!m_new_mod_names.empty()) - { - wchar_t* text = wgettext("Warning: Some mods are not configured yet.\n" - "They will be enabled by default when you save the configuration. "); - GUIMessageMenu *menu = - new GUIMessageMenu(Environment, Parent, -1, m_menumgr, text); - menu->drop(); - delete[] text; - } - - // find missing mods (mentioned in world.mt, but not installed) - std::set<std::string> missing_mods; for(std::set<std::string>::iterator it = mod_names.begin(); it != mod_names.end(); ++it) { std::string modname = *it; if(m_addonmods.count(modname) == 0) - missing_mods.insert(modname); + m_settings.remove("load_mod_"+modname); } - if(!missing_mods.empty()) - { - wchar_t* text = wgettext("Warning: Some configured mods are missing.\n" - "Their setting will be removed when you save the configuration. "); - GUIMessageMenu *menu = - new GUIMessageMenu(Environment, Parent, -1, m_menumgr, text); - delete[] text; - for(std::set<std::string>::iterator it = missing_mods.begin(); - it != missing_mods.end(); ++it) - m_settings.remove("load_mod_"+(*it)); - menu->drop(); - } + std::string worldmtfile = m_wspec.path+DIR_DELIM+"world.mt"; + m_settings.updateConfigFile(worldmtfile.c_str()); } void GUIConfigureWorld::drawMenu() @@ -388,11 +366,6 @@ bool GUIConfigureWorld::OnEvent(const SEvent& event) return true; } case GUI_ID_SAVE: { - for(std::set<std::string>::iterator it = m_new_mod_names.begin(); - it!= m_new_mod_names.end(); ++it) - { - m_settings.setBool("load_mod_"+(*it),true); - } std::string worldmtfile = m_wspec.path+DIR_DELIM+"world.mt"; m_settings.updateConfigFile(worldmtfile.c_str()); @@ -558,22 +531,14 @@ void GUIConfigureWorld::buildTreeView(std::map<std::string, ModSpec> mods, buildTreeView(mod.modpack_content, new_node); else { - // set icon for node: ? for new mods, x for disabled mods, - // checkmark for enabled mods - if(m_new_mod_names.count(modname) > 0) - { - new_node->setIcon(QUESTIONMARK_STR); - } + // set icon for node: x for disabled mods, checkmark for enabled mods + bool mod_enabled = false; + if(m_settings.exists("load_mod_"+modname)) + mod_enabled = m_settings.getBool("load_mod_"+modname); + if(mod_enabled) + new_node->setIcon(CHECKMARK_STR); else - { - bool mod_enabled = true; - if(m_settings.exists("load_mod_"+modname)) - mod_enabled = m_settings.getBool("load_mod_"+modname); - if(mod_enabled) - new_node->setIcon(CHECKMARK_STR); - else - new_node->setIcon(CROSS_STR); - } + new_node->setIcon(CROSS_STR); } } } @@ -690,7 +655,6 @@ void GUIConfigureWorld::enableMod(std::string modname) m_nodes.find(modname); if(it != m_nodes.end()) (*it).second->setIcon(CHECKMARK_STR); - m_new_mod_names.erase(modname); //also enable all dependencies for(std::set<std::string>::iterator it=mspec.depends.begin(); it != mspec.depends.end(); ++it) @@ -715,7 +679,6 @@ void GUIConfigureWorld::disableMod(std::string modname) m_nodes.find(modname); if(it != m_nodes.end()) (*it).second->setIcon(CROSS_STR); - m_new_mod_names.erase(modname); //also disable all mods that depend on this one std::pair<std::multimap<std::string, std::string>::iterator, std::multimap<std::string, std::string>::iterator > rdep = diff --git a/src/guiConfigureWorld.h b/src/guiConfigureWorld.h index 8a77c5f89..23ebac66d 100644 --- a/src/guiConfigureWorld.h +++ b/src/guiConfigureWorld.h @@ -69,9 +69,6 @@ private: // the settings in the world.mt file Settings m_settings; - // mods that are installed but not mentioned in world.mt file - std::set<std::string> m_new_mod_names; - // maps modnames to nodes in m_treeview std::map<std::string,gui::IGUITreeViewNode*> m_nodes; diff --git a/src/subgame.cpp b/src/subgame.cpp index cdb546619..7fee3899d 100644 --- a/src/subgame.cpp +++ b/src/subgame.cpp @@ -91,9 +91,9 @@ SubgameSpec findSubgame(const std::string &id) // Find mod directories std::set<std::string> mods_paths; if(!user_game) - mods_paths.insert(share + DIR_DELIM + "mods" + DIR_DELIM + id); + mods_paths.insert(share + DIR_DELIM + "mods"); if(user != share || user_game) - mods_paths.insert(user + DIR_DELIM + "mods" + DIR_DELIM + id); + mods_paths.insert(user + DIR_DELIM + "mods"); std::string game_name = getGameName(game_path); if(game_name == "") game_name = id; |