Aaron Suen ed2cfc18a1 Register capabilities for tool heads
This allows tool heads to be used in crafting,
esp. presscraft.  Note that certain tiers do not
have tool heads, like stone and infused.
2020-09-29 21:10:26 -04:00

141 lines
4.0 KiB
Lua

-- LUALOCALS < ---------------------------------------------------------
local ipairs, minetest, nodecore, pairs, type
= ipairs, minetest, nodecore, pairs, type
-- LUALOCALS > ---------------------------------------------------------
local modname = minetest.get_current_modname()
local function toolhead(name, groups, prills)
local n = name:lower()
if type(groups) == "string" then groups = {groups} end
local function toolcap(nn)
local t = {}
for _, k in ipairs(groups) do t[k] = nn end
return nodecore.toolcaps(t)
end
nodecore.register_lode("toolhead_" .. n, {
type = "craft",
description = "## Lode " .. name .. " Head",
inventory_image = modname .. "_#.png^[mask:" ..
modname .. "_toolhead_" .. n .. ".png",
stack_max = 1,
tool_head_capabilities = toolcap(4),
bytemper = function(t, d)
if t.name == "tempered" then
d.tool_head_capabilities = toolcap(5)
else if t.name == "hot" then
d.tool_head_capabilities = toolcap(3)
end
end
end
})
nodecore.register_lode("tool_" .. n, {
type = "tool",
description = "## Lode " .. name,
inventory_image = modname .. "_tool_handle.png^(" ..
modname .. "_#.png^[mask:" ..
modname .. "_tool_" .. n .. ".png)",
stack_max = 1,
tool_capabilities = toolcap(4),
bytemper = function(t, d)
if t.name == "tempered" then
d.tool_capabilities = toolcap(5)
end
d.skip_register = (t.name == "hot") or nil
end,
groups = {flammable = 4},
metal_alt_hot = modname .. ":prill_hot " .. prills,
tool_wears_to = prills > 1 and (modname .. ":prill_# " .. (prills - 1)) or nil,
on_ignite = modname .. ":prill_# " .. prills
})
for _, t in pairs({"annealed", "tempered"}) do
nodecore.register_craft({
label = "assemble lode " .. n,
normal = {y = 1},
indexkeys = {modname .. ":toolhead_" .. n .. "_" .. t},
nodes = {
{match = modname .. ":toolhead_" .. n .. "_" .. t,
replace = "air"},
{y = -1, match = "nc_woodwork:staff", replace = "air"},
},
items = {
{y = -1, name = modname .. ":tool_" .. n .. "_" .. t},
}
})
end
end
toolhead("Mallet", "thumpy", 3)
toolhead("Spade", "crumbly", 2)
toolhead("Hatchet", "choppy", 2)
toolhead("Pick", "cracky", 1)
local function forgecore(from, fromqty, to, prills, fromtemper, anviltemper)
return nodecore.register_craft({
label = anviltemper .. " anvil making " .. fromtemper .. " lode " .. (to or "prills"),
action = "pummel",
toolgroups = {thumpy = 3},
indexkeys = {modname .. ":" .. from .. "_" .. fromtemper},
nodes = {
{
match = {name = modname .. ":" .. from .. "_" .. fromtemper,
count = fromqty},
replace = "air"
},
{
y = -1,
match = modname .. ":block_" .. anviltemper
}
},
items = {
to and (modname .. ":" .. to .. "_" .. fromtemper) or nil,
prills and {name = modname .. ":prill_" .. fromtemper, count = prills,
scatter = 5} or nil
}
})
end
local function forge(from, fromqty, to, prills)
forgecore(from, fromqty, to, prills, "hot", "annealed")
forgecore(from, fromqty, to, prills, "hot", "tempered")
return forgecore(from, fromqty, to, prills, "annealed", "tempered")
end
forge("prill", 3, "toolhead_mallet")
forge("toolhead_mallet", nil, "toolhead_spade", 1)
forge("toolhead_spade", nil, "toolhead_hatchet")
forge("toolhead_hatchet", nil, "toolhead_pick", 1)
forge("toolhead_pick", nil, nil, 1)
toolhead("Mattock", {"cracky", "crumbly"}, 3)
local function mattock(a, b)
return nodecore.register_craft({
label = "assemble lode mattock head",
action = "pummel",
toolgroups = {thumpy = 3},
normal = {y = 1},
indexkeys = {modname .. (a == 0 and ":toolhead_pick_hot" or ":toolhead_spade_hot")},
nodes = {
{
y = a,
match = modname .. ":toolhead_pick_hot",
replace = "air"
},
{
y = b,
match = modname .. ":toolhead_spade_hot",
replace = "air"
}
},
items = {
modname .. ":toolhead_mattock_hot"
}
})
end
mattock(0, -1)
mattock(-1, 0)