Move core snippets to snippets.lua

This commit is contained in:
Wuzzy 2020-02-06 23:38:03 +01:00
parent 4dbc5b6cd5
commit 4277be77e5
2 changed files with 182 additions and 169 deletions

182
init.lua
View File

@ -1,180 +1,24 @@
local S = minetest.get_translator("tt") local S = minetest.get_translator("tt")
local COLOR_DEFAULT = "#d0ffd0"
local COLOR_DANGER = "#ffff00"
local COLOR_GOOD = "#00ff00"
tt = {} tt = {}
tt.registered_snippets = {} tt.COLOR_DEFAULT = "#d0ffd0"
tt.COLOR_DANGER = "#ffff00"
tt.COLOR_GOOD = "#00ff00"
local function get_min_digtime(caps) -- API
local mintime tt.registered_snippets = {}
local unique = true
if caps.maxlevel and caps.maxlevel > 1 then
unique = false
end
if caps.times then
for r=1,3 do
local time = caps.times[r]
if caps.maxlevel and caps.maxlevel > 1 then
time = time / caps.maxlevel
end
if (not mintime) or (time and time < mintime) then
if time and mintime and (time < mintime) then
unique = false
end
mintime = time
end
end
end
return mintime, unique
end
tt.register_snippet = function(func) tt.register_snippet = function(func)
table.insert(tt.registered_snippets, func) table.insert(tt.registered_snippets, func)
end end
--- CORE SNIPPETS --- -- Register core snippets
tt.register_snippet(function(itemstring) dofile(minetest.get_modpath(minetest.get_current_modname()).."/snippets.lua")
local def = minetest.registered_items[itemstring]
-- Custom text
if def._tt_help then
return def._tt_help, false
end
end)
tt.register_snippet(function(itemstring) -- Apply item description updates
local def = minetest.registered_items[itemstring]
local desc = ""
-- Tool info
if def.tool_capabilities then
-- Digging times
local digs = ""
local d
if def.tool_capabilities.groupcaps then
for group, caps in pairs(def.tool_capabilities.groupcaps) do
local mintime, unique_mintime
if caps.times then
mintime, unique_mintime = get_min_digtime(caps)
if mintime and (mintime > 0 and (not unique_mintime)) then
d = S("Digs @1 blocks", group) .. "\n"
d = d .. S("Minimum dig time: @1s", string.format("%.2f", mintime))
digs = digs .. "\n" .. d
elseif mintime and mintime == 0 then
d = S("Digs @1 blocks instantly", group)
digs = digs .. "\n" .. d
end
end
end
if digs ~= "" then
desc = desc .. minetest.colorize(COLOR_DEFAULT, digs)
end
end
-- Weapon stats
if def.tool_capabilities.damage_groups then
for group, damage in pairs(def.tool_capabilities.damage_groups) do
local msg
if group == "fleshy" then
if damage >= 0 then
msg = S("Damage: @1", damage)
else
msg = S("Healing: @1", math.abs(damage))
end
else
if damage >= 0 then
msg = S("Damage (@1): @2", group, damage)
else
msg = S("Healing (@1): @2", group, math.abs(damage))
end
end
desc = desc .. "\n" .. minetest.colorize(COLOR_DEFAULT, msg)
end
local full_punch_interval = def.tool_capabilities.full_punch_interval
if not full_punch_interval then
full_punch_interval = 1
end
desc = desc .. "\n" .. minetest.colorize(COLOR_DEFAULT, S("Full punch interval: @1s", full_punch_interval))
end
end
if desc == "" then
desc = nil
end
return desc, false
end)
tt.register_snippet(function(itemstring) local function append_snippets()
local def = minetest.registered_items[itemstring]
local desc
-- Food
if def._tt_food then
desc = S("Food item")
if def._tt_food_hp then
local msg = S("+@1 food points", def._tt_food_hp)
desc = desc .. "\n" .. minetest.colorize(COLOR_DEFAULT, msg)
end
end
return desc, false
end)
tt.register_snippet(function(itemstring)
local def = minetest.registered_items[itemstring]
local desc = ""
-- Node info
if def.damage_per_second then
if def.damage_per_second > 0 then
desc = desc .. "\n" .. minetest.colorize(COLOR_DANGER, S("Contact damage: @1 per second", def.damage_per_second))
elseif def.damage_per_second < 0 then
desc = desc .. "\n" .. minetest.colorize(COLOR_GOOD, S("Contact healing: @1 per second", math.abs(def.damage_per_second)))
end
end
if def.drowning and def.drowning ~= 0 then
desc = desc .. "\n" .. minetest.colorize(COLOR_DANGER, S("Drowning damage: @1", def.drowning))
end
local tmp = minetest.get_item_group(itemstring, "fall_damage_add_percent")
if tmp > 0 then
desc = desc .. "\n" .. minetest.colorize(COLOR_DANGER, S("Fall damage: +@1%", tmp))
elseif tmp == -100 then
desc = desc .. "\n" .. minetest.colorize(COLOR_GOOD, S("No fall damage"))
elseif tmp < 0 then
desc = desc .. "\n" .. minetest.colorize(COLOR_DEFAULT, S("Fall damage: @1%", tmp))
end
-- Movement-related node facts
if minetest.get_item_group(itemstring, "disable_jump") == 1 and not def.climbable then
if def.liquidtype == "none" then
desc = desc .. "\n" .. minetest.colorize(COLOR_DEFAULT, S("No jumping"))
else
desc = desc .. "\n" .. minetest.colorize(COLOR_DEFAULT, S("No swimming upwards"))
end
end
if def.climbable then
if minetest.get_item_group(itemstring, "disable_jump") == 1 then
desc = desc .. "\n" .. minetest.colorize(COLOR_DEFAULT, S("Climbable (only downwards)"))
else
desc = desc .. "\n" .. minetest.colorize(COLOR_DEFAULT, S("Climbable"))
end
end
if minetest.get_item_group(itemstring, "slippery") >= 1 then
desc = desc .. "\n" .. minetest.colorize(COLOR_DEFAULT, S("Slippery"))
end
local tmp = minetest.get_item_group(itemstring, "bouncy")
if tmp >= 1 then
desc = desc .. "\n" .. minetest.colorize(COLOR_DEFAULT, S("Bouncy (@1%)", tmp))
end
-- Node appearance
tmp = def.light_source
if tmp and tmp >= 1 then
desc = desc .. "\n" .. minetest.colorize(COLOR_DEFAULT, S("Luminance: @1", tmp))
end
if desc == "" then
desc = nil
end
return desc, false
end)
-- Apply item description update
local function append_descs()
for itemstring, def in pairs(minetest.registered_items) do for itemstring, def in pairs(minetest.registered_items) do
if itemstring ~= "" and itemstring ~= "air" and itemstring ~= "ignore" and itemstring ~= "unknown" and def ~= nil and def.description ~= nil and def.description ~= "" and def._tt_ignore ~= true then if itemstring ~= "" and itemstring ~= "air" and itemstring ~= "ignore" and itemstring ~= "unknown" and def ~= nil and def.description ~= nil and def.description ~= "" and def._tt_ignore ~= true then
local desc = def.description local desc = def.description
@ -184,9 +28,9 @@ local function append_descs()
for s=1, #tt.registered_snippets do for s=1, #tt.registered_snippets do
local str, snippet_color = tt.registered_snippets[s](itemstring) local str, snippet_color = tt.registered_snippets[s](itemstring)
if snippet_color == nil then if snippet_color == nil then
snippet_color = COLOR_DEFAULT snippet_color = tt.COLOR_DEFAULT
elseif snippet_color == false then elseif snippet_color == false then
snipped_color = false snippet_color = false
end end
if str then if str then
if first then if first then
@ -194,7 +38,7 @@ local function append_descs()
else else
desc = desc .. "\n" desc = desc .. "\n"
end end
if snippet_color == false then if snippet_color then
desc = desc .. minetest.colorize(snippet_color, str) desc = desc .. minetest.colorize(snippet_color, str)
else else
desc = desc .. str desc = desc .. str
@ -208,4 +52,4 @@ local function append_descs()
end end
end end
minetest.register_on_mods_loaded(append_descs) minetest.register_on_mods_loaded(append_snippets)

169
snippets.lua Normal file
View File

@ -0,0 +1,169 @@
local S = minetest.get_translator("tt")
local function get_min_digtime(caps)
local mintime
local unique = true
if caps.maxlevel and caps.maxlevel > 1 then
unique = false
end
if caps.times then
for r=1,3 do
local time = caps.times[r]
if caps.maxlevel and caps.maxlevel > 1 then
time = time / caps.maxlevel
end
if (not mintime) or (time and time < mintime) then
if time and mintime and (time < mintime) then
unique = false
end
mintime = time
end
end
end
return mintime, unique
end
-- CORE SNIPPETS --
-- Custom text (_tt_help)
tt.register_snippet(function(itemstring)
local def = minetest.registered_items[itemstring]
if def._tt_help then
return def._tt_help, false
end
end)
-- Tool information (digging times, weapon stats)
tt.register_snippet(function(itemstring)
local def = minetest.registered_items[itemstring]
local desc = ""
if def.tool_capabilities then
-- Digging times
local digs = ""
local d
if def.tool_capabilities.groupcaps then
for group, caps in pairs(def.tool_capabilities.groupcaps) do
local mintime, unique_mintime
if caps.times then
mintime, unique_mintime = get_min_digtime(caps)
if mintime and (mintime > 0 and (not unique_mintime)) then
d = S("Digs @1 blocks", group) .. "\n"
d = d .. S("Minimum dig time: @1s", string.format("%.2f", mintime))
digs = digs .. "\n" .. d
elseif mintime and mintime == 0 then
d = S("Digs @1 blocks instantly", group)
digs = digs .. "\n" .. d
end
end
end
if digs ~= "" then
desc = desc .. digs
end
end
-- Weapon stats
if def.tool_capabilities.damage_groups then
for group, damage in pairs(def.tool_capabilities.damage_groups) do
local msg
if group == "fleshy" then
if damage >= 0 then
msg = S("Damage: @1", damage)
else
msg = S("Healing: @1", math.abs(damage))
end
else
if damage >= 0 then
msg = S("Damage (@1): @2", group, damage)
else
msg = S("Healing (@1): @2", group, math.abs(damage))
end
end
desc = desc .. "\n" .. msg
end
local full_punch_interval = def.tool_capabilities.full_punch_interval
if not full_punch_interval then
full_punch_interval = 1
end
desc = desc .. "\n" .. S("Full punch interval: @1s", full_punch_interval)
end
end
if desc == "" then
desc = nil
end
return desc
end)
-- Food
tt.register_snippet(function(itemstring)
local def = minetest.registered_items[itemstring]
local desc
if def._tt_food then
desc = S("Food item")
if def._tt_food_hp then
local msg = S("+@1 food points", def._tt_food_hp)
desc = desc .. "\n" .. msg
end
end
return desc
end)
-- Node info
tt.register_snippet(function(itemstring)
local def = minetest.registered_items[itemstring]
local desc = ""
-- Health-related node facts
if def.damage_per_second then
if def.damage_per_second > 0 then
desc = desc .. "\n" .. minetest.colorize(tt.COLOR_DANGER, S("Contact damage: @1 per second", def.damage_per_second))
elseif def.damage_per_second < 0 then
desc = desc .. "\n" .. minetest.colorize(tt.COLOR_GOOD, S("Contact healing: @1 per second", math.abs(def.damage_per_second)))
end
end
if def.drowning and def.drowning ~= 0 then
desc = desc .. "\n" .. minetest.colorize(tt.COLOR_DANGER, S("Drowning damage: @1", def.drowning))
end
local tmp = minetest.get_item_group(itemstring, "fall_damage_add_percent")
if tmp > 0 then
desc = desc .. "\n" .. minetest.colorize(tt.COLOR_DANGER, S("Fall damage: +@1%", tmp))
elseif tmp == -100 then
desc = desc .. "\n" .. minetest.colorize(tt.COLOR_GOOD, S("No fall damage"))
elseif tmp < 0 then
desc = desc .. "\n" .. minetest.colorize(tt.COLOR_DEFAULT, S("Fall damage: @1%", tmp))
end
-- Movement-related node facts
if minetest.get_item_group(itemstring, "disable_jump") == 1 and not def.climbable then
if def.liquidtype == "none" then
desc = desc .. "\n" .. minetest.colorize(tt.COLOR_DEFAULT, S("No jumping"))
else
desc = desc .. "\n" .. minetest.colorize(tt.COLOR_DEFAULT, S("No swimming upwards"))
end
end
if def.climbable then
if minetest.get_item_group(itemstring, "disable_jump") == 1 then
desc = desc .. "\n" .. minetest.colorize(tt.COLOR_DEFAULT, S("Climbable (only downwards)"))
else
desc = desc .. "\n" .. minetest.colorize(tt.COLOR_DEFAULT, S("Climbable"))
end
end
if minetest.get_item_group(itemstring, "slippery") >= 1 then
desc = desc .. "\n" .. minetest.colorize(tt.COLOR_DEFAULT, S("Slippery"))
end
local tmp = minetest.get_item_group(itemstring, "bouncy")
if tmp >= 1 then
desc = desc .. "\n" .. minetest.colorize(tt.COLOR_DEFAULT, S("Bouncy (@1%)", tmp))
end
-- Node appearance
tmp = def.light_source
if tmp and tmp >= 1 then
desc = desc .. "\n" .. minetest.colorize(tt.COLOR_DEFAULT, S("Luminance: @1", tmp))
end
if desc == "" then
desc = nil
end
return desc, false
end)