Add in client modding menu
See <https://github.com/minetest/minetest/pull/10039>
This commit is contained in:
parent
4268927ef0
commit
479c595da3
|
@ -52,6 +52,7 @@ tabs.content = dofile(menupath .. DIR_DELIM .. "tab_content.lua")
|
||||||
tabs.credits = dofile(menupath .. DIR_DELIM .. "tab_credits.lua")
|
tabs.credits = dofile(menupath .. DIR_DELIM .. "tab_credits.lua")
|
||||||
tabs.local_game = dofile(menupath .. DIR_DELIM .. "tab_local.lua")
|
tabs.local_game = dofile(menupath .. DIR_DELIM .. "tab_local.lua")
|
||||||
tabs.play_online = dofile(menupath .. DIR_DELIM .. "tab_online.lua")
|
tabs.play_online = dofile(menupath .. DIR_DELIM .. "tab_online.lua")
|
||||||
|
tabs.client_mods = dofile(menupath .. DIR_DELIM .. "tab_client_mods.lua")
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
local function main_event_handler(tabview, event)
|
local function main_event_handler(tabview, event)
|
||||||
|
@ -97,6 +98,7 @@ local function init_globals()
|
||||||
tv_main:add(tabs.play_online)
|
tv_main:add(tabs.play_online)
|
||||||
|
|
||||||
tv_main:add(tabs.content)
|
tv_main:add(tabs.content)
|
||||||
|
tv_main:add(tabs.client_mods)
|
||||||
tv_main:add(tabs.settings)
|
tv_main:add(tabs.settings)
|
||||||
tv_main:add(tabs.credits)
|
tv_main:add(tabs.credits)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,128 @@
|
||||||
|
--Minetest
|
||||||
|
--Copyright (C) 2013 sapier
|
||||||
|
--
|
||||||
|
--This program is free software; you can redistribute it and/or modify
|
||||||
|
--it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
--the Free Software Foundation; either version 2.1 of the License, or
|
||||||
|
--(at your option) any later version.
|
||||||
|
--
|
||||||
|
--This program is distributed in the hope that it will be useful,
|
||||||
|
--but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
--GNU Lesser General Public License for more details.
|
||||||
|
--
|
||||||
|
--You should have received a copy of the GNU Lesser General Public License along
|
||||||
|
--with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
function get_client_mods()
|
||||||
|
local path = core.get_clientmodpath()
|
||||||
|
local client_mods = core.get_dir_list(path, true)
|
||||||
|
local retval = {}
|
||||||
|
for _, name in ipairs(client_mods) do
|
||||||
|
if name:sub(1, 1) ~= "." then
|
||||||
|
table.insert(retval,name)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return(retval)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function get_mods_conf()
|
||||||
|
local client_modpath = core.get_clientmodpath()
|
||||||
|
|
||||||
|
local f = io.open(client_modpath..DIR_DELIM.."mods.conf", "r")
|
||||||
|
local temp_settings = {}
|
||||||
|
|
||||||
|
if f then
|
||||||
|
for line in io.lines(client_modpath..DIR_DELIM.."mods.conf") do
|
||||||
|
local name = string.gsub(string.match(line, "(.*) ="), "load_mod_", "")
|
||||||
|
local value = string.match(line, "= (.*)")
|
||||||
|
temp_settings[name] = value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return(temp_settings)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local function build_menu()
|
||||||
|
local mods = get_client_mods()
|
||||||
|
|
||||||
|
local menu = "label[0,-0.25;" .. fgettext("Enabled Client Mods:") .. "]" ..
|
||||||
|
"box[0,0.25;3.75,5;#999999]" ..
|
||||||
|
"scrollbaroptions[min=6;max="..table.getn(mods).."]"..
|
||||||
|
"scrollbar[3.75, 0.25; 0.3, 5;vertical;client_mods;]"..
|
||||||
|
"scroll_container[ -0.25,0.7; 5.25, 5.7;client_mods;vertical]"
|
||||||
|
|
||||||
|
local settings = get_mods_conf()
|
||||||
|
local count = 0
|
||||||
|
for _,name in pairs(mods) do
|
||||||
|
local check = settings[name]
|
||||||
|
if check == nil then
|
||||||
|
check = "false"
|
||||||
|
end
|
||||||
|
menu = menu .. "checkbox[0.25,"..(count*0.3)..";"..name..";" .. fgettext(name) .. ";"
|
||||||
|
.. check .. "]"
|
||||||
|
count = count + 1
|
||||||
|
end
|
||||||
|
menu = menu .."scroll_container_end[]"..
|
||||||
|
--this has to contain an unsupported character in the name
|
||||||
|
"checkbox[4.25,0;!enable_client_modding;" .. fgettext("Enable Client Mods") .. ";"..dump(core.settings:get_bool("enable_client_modding")).. "]"..
|
||||||
|
"label[4.25,-0.2;Warning! Client Modding is still unsupported and experimental.]"
|
||||||
|
return menu
|
||||||
|
end
|
||||||
|
|
||||||
|
local function write_data(fields)
|
||||||
|
|
||||||
|
if fields["!enable_client_modding"] then
|
||||||
|
core.settings:set("enable_client_modding", fields["!enable_client_modding"])
|
||||||
|
return
|
||||||
|
elseif not fields.client_mods then
|
||||||
|
return
|
||||||
|
else
|
||||||
|
fields.client_mods = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
local path = core.get_clientmodpath()
|
||||||
|
|
||||||
|
local new_name
|
||||||
|
local new_data
|
||||||
|
|
||||||
|
for name,data in pairs(fields) do
|
||||||
|
new_name = name
|
||||||
|
new_data = data
|
||||||
|
end
|
||||||
|
|
||||||
|
local settings = get_mods_conf()
|
||||||
|
local mods = get_client_mods()
|
||||||
|
local data = ""
|
||||||
|
for _,name in pairs(mods) do
|
||||||
|
local check = settings[name]
|
||||||
|
if name == new_name then
|
||||||
|
check = new_data
|
||||||
|
end
|
||||||
|
if check == nil then
|
||||||
|
check = "false"
|
||||||
|
end
|
||||||
|
data = data .."load_mod_"..name.." = "..check.."\n"
|
||||||
|
end
|
||||||
|
|
||||||
|
local f = io.open(path..DIR_DELIM.."mods.conf", "w")
|
||||||
|
f:write(data)
|
||||||
|
f:close()
|
||||||
|
end
|
||||||
|
|
||||||
|
local function cbf_button_handler (this, fields, name, tabdata)
|
||||||
|
write_data(fields)
|
||||||
|
end
|
||||||
|
|
||||||
|
return {
|
||||||
|
name = "client mods",
|
||||||
|
caption = fgettext("Client Mods"),
|
||||||
|
cbf_formspec = function(tabview, name, tabdata)
|
||||||
|
return build_menu()
|
||||||
|
end,
|
||||||
|
cbf_button_handler = cbf_button_handler,
|
||||||
|
}
|
Loading…
Reference in New Issue