add temporary "crushing" recipe variants.

using the new falling node hooks provided by `bg_api`, add alternative
versions of existing stoneworking recipes, where instead of pummeling, a
stoney node must fall onto the input nodes with sufficient force.

note that since the only currently existing stoney node that can fall,
loose cobblestone, is unobtainable without cheats, so are these recipes.
This commit is contained in:
trans_soup 2023-10-19 11:30:45 +02:00
parent 96ebbe8e0e
commit 87fba22f3b

View file

@ -30,3 +30,37 @@ blockgame.crafting.register_pummel_recipe({
minetest.set_node(pos, {name = modname .. ":bricks"})
end,
})
local crush_recipes = {
{
input = {"bg_terrain:cobblestone", "bg_terrain:cobblestone_loose"},
output = modname .. ":tile",
},
{
input = {modname .. ":tile"},
output = modname .. ":bricks",
},
}
blockgame.register_after_falling_node_lands(function (pos, node, entity)
if not blockgame.item_matches(node.name, {"group:stoney"}) then return end
local def = minetest.registered_nodes[node.name]
local mass = def.mass or 1
local force = math.abs(entity.fall_velocity.y) * mass
if force < 5 then return end
local below = pos + blockgame.vector.dirs.down
local target = minetest.get_node(below).name
if not blockgame.item_matches(target, {"group:stoney"}) then return end
for _, recipe in pairs(crush_recipes) do
local input = recipe.input
local output = recipe.output
if blockgame.item_matches(target, input) then
minetest.set_node(below, {name = output})
return
end
end
end)