diff options
author | Elias Fleckenstein <54945686+EliasFleckenstein03@users.noreply.github.com> | 2021-03-01 12:13:47 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-01 12:13:47 +0100 |
commit | c401a06f8a669d1fd4194010ccf23d7043d70fb1 (patch) | |
tree | fb4faa03c5b575cb3a4ad4416109f5b1afb7a3ac | |
parent | ccdaf5de54108990fcdeb0b0ff4a4fc4cd998522 (diff) | |
download | minetest-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.lua | 39 |
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) |