blockgame/mods/bg_stoneworking/recipe.lua

67 lines
1.8 KiB
Lua
Raw Normal View History

local modname = minetest.get_current_modname()
2023-10-17 13:05:40 +00:00
local function is_stoney_below (pos)
local below_node = minetest.get_node(pos + blockgame.vector.dirs.down)
return blockgame.item_matches(below_node.name, {"group:stoney"})
end
blockgame.crafting.register_pummel_recipe({
name = modname .. ":craft_tile",
label = "pummel stone into tile",
used = {"group:stoney"},
target = {"bg_terrain:cobblestone"},
check = function (pos, used_node, target_node)
2023-10-17 13:05:40 +00:00
return is_stoney_below(pos)
end,
on_success = function (pos, used_node, target_node)
minetest.set_node(pos, {name = modname .. ":tile"})
end,
})
blockgame.crafting.register_pummel_recipe({
name = modname .. ":craft_bricks",
label = "pummel tile into bricks",
used = {"group:stoney"},
target = {modname .. ":tile"},
check = function (pos, used_node, target_node)
2023-10-17 13:05:40 +00:00
return is_stoney_below(pos)
end,
on_success = function (pos, used_node, target_node)
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)