mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
Merge 66316d2098
into aba2b6638e
This commit is contained in:
commit
fde21e7b03
5 changed files with 42 additions and 8 deletions
|
@ -85,8 +85,13 @@ local function check_mod_configuration(world_path, all_mods)
|
||||||
|
|
||||||
-- Build the table of errors
|
-- Build the table of errors
|
||||||
local with_error = {}
|
local with_error = {}
|
||||||
|
for _, mod in ipairs(config_status.satisfied_mods) do
|
||||||
|
if not mod.valid then
|
||||||
|
with_error[mod.virtual_path] = { type = "error", reason = "invalid" }
|
||||||
|
end
|
||||||
|
end
|
||||||
for _, mod in ipairs(config_status.unsatisfied_mods) do
|
for _, mod in ipairs(config_status.unsatisfied_mods) do
|
||||||
local error = { type = "warning" }
|
local error = { type = "warning", reason = "unsatisfied_depends" }
|
||||||
with_error[mod.virtual_path] = error
|
with_error[mod.virtual_path] = error
|
||||||
|
|
||||||
for _, depname in ipairs(mod.unsatisfied_depends) do
|
for _, depname in ipairs(mod.unsatisfied_depends) do
|
||||||
|
@ -155,6 +160,24 @@ local function get_formspec(data)
|
||||||
local hard_deps_str = table.concat(hard_deps, ",")
|
local hard_deps_str = table.concat(hard_deps, ",")
|
||||||
local soft_deps_str = table.concat(soft_deps, ",")
|
local soft_deps_str = table.concat(soft_deps, ",")
|
||||||
|
|
||||||
|
local error_message = ""
|
||||||
|
|
||||||
|
local error = with_error[mod.virtual_path]
|
||||||
|
if error and
|
||||||
|
error.type == "error" and
|
||||||
|
-- do not display "unsatisfied_depends" error as message because is
|
||||||
|
-- is displayed by dependency list
|
||||||
|
error.reason ~= "unsatisfied_depends"
|
||||||
|
then
|
||||||
|
error_message = error_message ..
|
||||||
|
minetest.colorize(mt_color_red, fgettext("Errors:")) .. "\n"
|
||||||
|
if error.reason == "invalid" then
|
||||||
|
error_message = error_message .. fgettext(
|
||||||
|
"Mod is incomplete because it has no \"init.lua\" file. " ..
|
||||||
|
"Dependencies are not visible because of this.")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
retval = retval ..
|
retval = retval ..
|
||||||
"label[0,0.7;" .. fgettext("Mod:") .. "]" ..
|
"label[0,0.7;" .. fgettext("Mod:") .. "]" ..
|
||||||
"label[0.75,0.7;" .. mod.name .. "]"
|
"label[0.75,0.7;" .. mod.name .. "]"
|
||||||
|
@ -163,7 +186,8 @@ local function get_formspec(data)
|
||||||
if soft_deps_str == "" then
|
if soft_deps_str == "" then
|
||||||
retval = retval ..
|
retval = retval ..
|
||||||
"label[0,1.25;" ..
|
"label[0,1.25;" ..
|
||||||
fgettext("No (optional) dependencies") .. "]"
|
fgettext("No (optional) dependencies") .. "]" ..
|
||||||
|
"textarea[0.25,1.75;5.75,7.2;;" .. error_message .. ";]"
|
||||||
else
|
else
|
||||||
retval = retval ..
|
retval = retval ..
|
||||||
"label[0,1.25;" .. fgettext("No hard dependencies") ..
|
"label[0,1.25;" .. fgettext("No hard dependencies") ..
|
||||||
|
@ -171,7 +195,8 @@ local function get_formspec(data)
|
||||||
"label[0,1.75;" .. fgettext("Optional dependencies:") ..
|
"label[0,1.75;" .. fgettext("Optional dependencies:") ..
|
||||||
"]" ..
|
"]" ..
|
||||||
"textlist[0,2.25;5,4;world_config_optdepends;" ..
|
"textlist[0,2.25;5,4;world_config_optdepends;" ..
|
||||||
soft_deps_str .. ";0]"
|
soft_deps_str .. ";0]" ..
|
||||||
|
"textarea[0.25,6.5;3.45,1.75;;" .. error_message .. ";]"
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if soft_deps_str == "" then
|
if soft_deps_str == "" then
|
||||||
|
@ -179,7 +204,8 @@ local function get_formspec(data)
|
||||||
"label[0,1.25;" .. fgettext("Dependencies:") .. "]" ..
|
"label[0,1.25;" .. fgettext("Dependencies:") .. "]" ..
|
||||||
"textlist[0,1.75;5,4;world_config_depends;" ..
|
"textlist[0,1.75;5,4;world_config_depends;" ..
|
||||||
hard_deps_str .. ";0]" ..
|
hard_deps_str .. ";0]" ..
|
||||||
"label[0,6;" .. fgettext("No optional dependencies") .. "]"
|
"label[0,6;" .. fgettext("No optional dependencies") .. "]" ..
|
||||||
|
"textarea[0.25,6.5;3.45,1.75;;" .. error_message .. ";]"
|
||||||
else
|
else
|
||||||
retval = retval ..
|
retval = retval ..
|
||||||
"label[0,1.25;" .. fgettext("Dependencies:") .. "]" ..
|
"label[0,1.25;" .. fgettext("Dependencies:") .. "]" ..
|
||||||
|
@ -188,7 +214,8 @@ local function get_formspec(data)
|
||||||
"label[0,3.9;" .. fgettext("Optional dependencies:") ..
|
"label[0,3.9;" .. fgettext("Optional dependencies:") ..
|
||||||
"]" ..
|
"]" ..
|
||||||
"textlist[0,4.375;5,1.8;world_config_optdepends;" ..
|
"textlist[0,4.375;5,1.8;world_config_optdepends;" ..
|
||||||
soft_deps_str .. ";0]"
|
soft_deps_str .. ";0]" ..
|
||||||
|
"textarea[0.25,6.5;3.45,1.75;;" .. error_message .. ";]"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -34,6 +34,7 @@ struct ModSpec
|
||||||
std::unordered_set<std::string> optdepends;
|
std::unordered_set<std::string> optdepends;
|
||||||
std::unordered_set<std::string> unsatisfied_depends;
|
std::unordered_set<std::string> unsatisfied_depends;
|
||||||
|
|
||||||
|
bool valid = true; /// False if incomplete
|
||||||
bool part_of_modpack = false;
|
bool part_of_modpack = false;
|
||||||
bool is_modpack = false;
|
bool is_modpack = false;
|
||||||
|
|
||||||
|
|
|
@ -2599,4 +2599,7 @@ void push_mod_spec(lua_State *L, const ModSpec &spec, bool include_unsatisfied)
|
||||||
lua_rawseti(L, -2, i++);
|
lua_rawseti(L, -2, i++);
|
||||||
}
|
}
|
||||||
lua_setfield(L, -2, "unsatisfied_depends");
|
lua_setfield(L, -2, "unsatisfied_depends");
|
||||||
|
|
||||||
|
lua_pushboolean(L, spec.valid);
|
||||||
|
lua_setfield(L, -2, "valid");
|
||||||
}
|
}
|
||||||
|
|
|
@ -233,6 +233,11 @@ std::string ScriptApiBase::getCurrentModNameInsecure(lua_State *L)
|
||||||
void ScriptApiBase::loadMod(const std::string &script_path,
|
void ScriptApiBase::loadMod(const std::string &script_path,
|
||||||
const std::string &mod_name)
|
const std::string &mod_name)
|
||||||
{
|
{
|
||||||
|
if (!fs::IsFile(script_path)) {
|
||||||
|
throw ModError("Failed to load mod \"" + mod_name
|
||||||
|
+ "\" as it's initialization script at \"" + script_path
|
||||||
|
+ "\" does not exist. Try to reinstall/update mod or disable it.");
|
||||||
|
}
|
||||||
ModNameStorer mod_name_storer(getStack(), mod_name);
|
ModNameStorer mod_name_storer(getStack(), mod_name);
|
||||||
|
|
||||||
loadScript(script_path);
|
loadScript(script_path);
|
||||||
|
|
|
@ -461,9 +461,7 @@ int ModApiMainMenu::l_check_mod_configuration(lua_State *L)
|
||||||
spec.name = fs::GetFilenameFromPath(modpath.c_str());
|
spec.name = fs::GetFilenameFromPath(modpath.c_str());
|
||||||
spec.path = modpath;
|
spec.path = modpath;
|
||||||
spec.virtual_path = virtual_path;
|
spec.virtual_path = virtual_path;
|
||||||
if (!parseModContents(spec)) {
|
spec.valid = parseModContents(spec);
|
||||||
throw LuaError("Not a mod!");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
modmgr.addMods(modSpecs);
|
modmgr.addMods(modSpecs);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue