7c45ca5eb2
- 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.
138 lines
3.7 KiB
Lua
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)
|