Aaron Suen 7c45ca5eb2 Stone anvils, new anvil API
- Anvil API is a wrapper that registers multiple
  recipes, one for each type of anvil allowed.
- Can now use smooth stone as an anvil, however
  once it's been used it cracks, and once it's been
  cracked, if it cools, it converts to cobble and cannot
  be reused, forcing players to master concrete, keep
  their forge hot, or relocate the forge each time it
  cools.
2021-11-25 20:12:55 -05:00

138 lines
3.7 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 forge(from, fromqty, to, prills)
return nodecore.register_lode_anvil_recipe(-1, function(temper)
return {
label = "forge lode " .. (to or "prills"),
action = "pummel",
toolgroups = {thumpy = 3},
indexkeys = {modname .. ":" .. from .. "_" .. temper},
nodes = {
{
match = {
name = modname .. ":" .. from .. "_" .. temper,
count = fromqty
},
replace = "air"
}
},
items = {
to and (modname .. ":" .. to .. "_" .. temper) or nil,
prills and {
name = modname .. ":prill_" .. temper,
count = prills,
scatter = 5
} or nil
}
}
end)
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)