mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-11-23 02:51:06 +01:00
5f70189e08
This should prevent problems like the ones described in https://git.minetest.land/MineClone2/MineClone2/pulls/4196#issuecomment-77558 or https://git.minetest.land/MineClone2/MineClone2/pulls/4130#issuecomment-77571 Reviewed-on: https://git.minetest.land/MineClone2/MineClone2/pulls/4264 Co-authored-by: the-real-herowl <wiktor_t-i@proton.me> Co-committed-by: the-real-herowl <wiktor_t-i@proton.me>
82 lines
2.5 KiB
Lua
82 lines
2.5 KiB
Lua
tt = {}
|
|
tt.COLOR_DEFAULT = mcl_colors.GREEN
|
|
tt.COLOR_DANGER = mcl_colors.YELLOW
|
|
tt.COLOR_GOOD = mcl_colors.GREEN
|
|
tt.NAME_COLOR = mcl_colors.YELLOW
|
|
|
|
-- API
|
|
tt.registered_snippets = {}
|
|
|
|
function tt.register_snippet(func)
|
|
table.insert(tt.registered_snippets, func)
|
|
end
|
|
|
|
function tt.register_priority_snippet(func)
|
|
table.insert(tt.registered_snippets, 1, func)
|
|
end
|
|
|
|
dofile(minetest.get_modpath(minetest.get_current_modname()).."/snippets.lua")
|
|
|
|
-- Apply item description updates
|
|
|
|
local function apply_snippets(desc, itemstring, toolcaps, itemstack)
|
|
local first = true
|
|
-- Apply snippets
|
|
for s=1, #tt.registered_snippets do
|
|
local str, snippet_color = tt.registered_snippets[s](itemstring, toolcaps, itemstack)
|
|
if snippet_color == nil then
|
|
snippet_color = tt.COLOR_DEFAULT
|
|
end
|
|
if str then
|
|
if first then
|
|
first = false
|
|
end
|
|
desc = desc .. "\n"
|
|
if snippet_color then
|
|
desc = desc .. minetest.colorize(snippet_color, str)
|
|
else
|
|
desc = desc .. str
|
|
end
|
|
end
|
|
end
|
|
return desc
|
|
end
|
|
|
|
local function should_change(itemstring, def)
|
|
return itemstring ~= "" and itemstring ~= "air" and itemstring ~= "ignore" and itemstring ~= "unknown" and def and def.description and def.description ~= "" and def._tt_ignore ~= true
|
|
end
|
|
|
|
local function append_snippets()
|
|
for itemstring, def in pairs(minetest.registered_items) do
|
|
if should_change(itemstring, def) then
|
|
local orig_desc = def.description
|
|
local desc = apply_snippets(orig_desc, itemstring, def.tool_capabilities, nil)
|
|
if desc ~= orig_desc then
|
|
minetest.override_item(itemstring, { description = desc, _tt_original_description = orig_desc })
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
minetest.register_on_mods_loaded(append_snippets)
|
|
|
|
function tt.reload_itemstack_description(itemstack)
|
|
local itemstring = itemstack:get_name()
|
|
local def = itemstack:get_definition()
|
|
local meta = itemstack:get_meta()
|
|
if def and def._mcl_generate_description then
|
|
def._mcl_generate_description(itemstack)
|
|
elseif should_change(itemstring, def) then
|
|
local toolcaps
|
|
if def.tool_capabilities then
|
|
toolcaps = itemstack:get_tool_capabilities()
|
|
end
|
|
local orig_desc = def._tt_original_description or def.description
|
|
if meta:get_string("name") ~= "" then
|
|
orig_desc = minetest.colorize(tt.NAME_COLOR, meta:get_string("name"))
|
|
end
|
|
local desc = apply_snippets(orig_desc, itemstring, toolcaps or def.tool_capabilities, itemstack)
|
|
if desc == def.description and meta:get_string("description") == "" then return end
|
|
meta:set_string("description", desc)
|
|
end
|
|
end
|