From 87fba22f3b481df59f7230be1e0d69a5fe21cc64 Mon Sep 17 00:00:00 2001 From: trans_soup <> Date: Thu, 19 Oct 2023 11:30:45 +0200 Subject: [PATCH] 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. --- mods/bg_stoneworking/recipe.lua | 34 +++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/mods/bg_stoneworking/recipe.lua b/mods/bg_stoneworking/recipe.lua index 417d14c..9aea41d 100644 --- a/mods/bg_stoneworking/recipe.lua +++ b/mods/bg_stoneworking/recipe.lua @@ -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)