summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElias Fleckenstein <54945686+EliasFleckenstein03@users.noreply.github.com>2021-03-01 12:13:47 +0100
committerGitHub <noreply@github.com>2021-03-01 12:13:47 +0100
commitc401a06f8a669d1fd4194010ccf23d7043d70fb1 (patch)
treefb4faa03c5b575cb3a4ad4416109f5b1afb7a3ac
parentccdaf5de54108990fcdeb0b0ff4a4fc4cd998522 (diff)
downloadminetest-c401a06f8a669d1fd4194010ccf23d7043d70fb1.tar.gz
minetest-c401a06f8a669d1fd4194010ccf23d7043d70fb1.tar.bz2
minetest-c401a06f8a669d1fd4194010ccf23d7043d70fb1.zip
Make pkgmgr handle modpacks containing modpacks properly
fixes #10550
-rw-r--r--builtin/mainmenu/pkgmgr.lua39
1 files changed, 17 insertions, 22 deletions
diff --git a/builtin/mainmenu/pkgmgr.lua b/builtin/mainmenu/pkgmgr.lua
index 4aa05d838..787936e31 100644
--- a/builtin/mainmenu/pkgmgr.lua
+++ b/builtin/mainmenu/pkgmgr.lua
@@ -413,18 +413,7 @@ function pkgmgr.is_modpack_entirely_enabled(data, name)
end
---------- toggles or en/disables a mod or modpack and its dependencies --------
-function pkgmgr.enable_mod(this, toset)
- local list = this.data.list:get_list()
- local mod = list[this.data.selected_mod]
-
- -- Game mods can't be enabled or disabled
- if mod.is_game_content then
- return
- end
-
- local toggled_mods = {}
-
- local enabled_mods = {}
+local function toggle_mod_or_modpack(list, toggled_mods, enabled_mods, toset, mod)
if not mod.is_modpack then
-- Toggle or en/disable the mod
if toset == nil then
@@ -443,19 +432,25 @@ function pkgmgr.enable_mod(this, toset)
-- interleaved unsupported
for i = 1, #list do
if list[i].modpack == mod.name then
- if toset == nil then
- toset = not list[i].enabled
- end
- if list[i].enabled ~= toset then
- list[i].enabled = toset
- toggled_mods[#toggled_mods+1] = list[i].name
- end
- if toset then
- enabled_mods[list[i].name] = true
- end
+ toggle_mod_or_modpack(list, toggled_mods, enabled_mods, toset, list[i])
end
end
end
+end
+
+function pkgmgr.enable_mod(this, toset)
+ local list = this.data.list:get_list()
+ local mod = list[this.data.selected_mod]
+
+ -- Game mods can't be enabled or disabled
+ if mod.is_game_content then
+ return
+ end
+
+ local toggled_mods = {}
+ local enabled_mods = {}
+ toggle_mod_or_modpack(list, toggled_mods, enabled_mods, toset, mod)
+
if not toset then
-- Mod(s) were disabled, so no dependencies need to be enabled
table.sort(toggled_mods)