diff options
author | heav-4 <heavpoot@gmail.com> | 2022-02-13 22:40:37 +0000 |
---|---|---|
committer | heav-4 <heavpoot@gmail.com> | 2022-02-13 22:40:37 +0000 |
commit | ef9661a2ae7063842f11b32ba6fa9a74ac12c1a7 (patch) | |
tree | b1a885e608f9b5b0ecbca1a0560d3874554125c4 | |
parent | 69b1cf9dcd2bb561f2349e10e558a5e117b3ff3c (diff) |
drastically improve pummel recipes internally
-rw-r--r-- | mods/vzxv_pummel/init.lua | 62 | ||||
-rw-r--r-- | mods/vzxv_pummel/recipes.lua | 43 |
2 files changed, 75 insertions, 30 deletions
diff --git a/mods/vzxv_pummel/init.lua b/mods/vzxv_pummel/init.lua index 2515758..715a969 100644 --- a/mods/vzxv_pummel/init.lua +++ b/mods/vzxv_pummel/init.lua @@ -44,13 +44,22 @@ end function vzxv.can_pummel(pos,node,tool,side) if vzxv_pummel_recipes[node.name] then for _,r in ipairs(vzxv_pummel_recipes[node.name]) do - if toolcheck(r.tool,tool) then - if sidecheck(r.side,sidename(side)) then - if r.constraint(pos,node,tool,side) then - return r + if not sidecheck(r.side,sidename(side)) then return false end + if not toolcheck(r.tool,tool) then return false end + if r.othernodes then + for _,node in ipairs(r.othernodes) do + local outputpos = deepclone(pos) + outputpos.x = outputpos.x + (node.x or 0) + outputpos.y = outputpos.y + (node.y or 0) + outputpos.z = outputpos.z + (node.z or 0) + if node.item then + error("sorry no item inputs yet") + else + if not toolcheck(node.node,minetest.get_node(outputpos).name) then return false end end end end + return r end end return false @@ -59,17 +68,46 @@ end function vzxv.pummel(pos,node,tool,side) local recipe = vzxv.can_pummel(pos,node,tool,side) if not recipe then return false end - recipe.func(pos,node,tool,side) + if recipe.func then recipe.func(pos,node,tool,side) end + local nodes_involved = {recipe.node or recipe.item} + for _,node in ipairs(recipe.othernodes or {}) do + table.insert(nodes_involved,node) + end + + for _,node in ipairs(nodes_involved) do + local outputpos = deepclone(pos) + outputpos.x = outputpos.x + (node.x or 0) + outputpos.y = outputpos.y + (node.y or 0) + outputpos.z = outputpos.z + (node.z or 0) + if node.item then + error("no item inputs yet sorry") + else + if node.consume then + minetest.set_node(outputpos,{name="air"}) + end + end + end + + + if recipe.outputs then + for _,output in ipairs(recipe.outputs) do + local outputpos = deepclone(pos) + outputpos.x = outputpos.x + (output.x or 0) + outputpos.y = outputpos.y + (output.y or 0) + outputpos.z = outputpos.z + (output.z or 0) + if output.item then + vzxv.drop(outputpos,ItemStack(output.item)) + else + minetest.set_node(outputpos,{name=output.node}) + end + end + end end -function vzxv.add_pummel_recipe(nodetype,tool,side,constraint,func) - local r = {} - r.tool = tool - r.side = side - r.constraint = constraint or function() return true end - r.func = func +function vzxv.add_pummel_recipe(settings) + local nodetype = settings.node.node or settings.node.item vzxv_pummel_recipes[nodetype] = vzxv_pummel_recipes[nodetype] or {} - table.insert(vzxv_pummel_recipes[nodetype],r) + table.insert(vzxv_pummel_recipes[nodetype],settings) end minetest.register_on_punchnode(function(pos, node, puncher, pointed_thing) diff --git a/mods/vzxv_pummel/recipes.lua b/mods/vzxv_pummel/recipes.lua index fd4e345..73611e9 100644 --- a/mods/vzxv_pummel/recipes.lua +++ b/mods/vzxv_pummel/recipes.lua @@ -1,22 +1,29 @@ -vzxv.add_pummel_recipe("vzxv:moistgrass",nil,{1,3,4,5,6},nil,function(pos,node) - minetest.set_node(pos,{name="vzxv:moistdirt"}) -end) +vzxv.add_pummel_recipe{ + node = {node="vzxv:moistgrass"}, + outputs = {{node="vzxv:moistdirt"}} +} -vzxv.add_pummel_recipe("vzxv:grass",nil,{1,3,4,5,6},nil,function(pos,node) - minetest.set_node(pos,{name="vzxv:dirt"}) -end) +vzxv.add_pummel_recipe{ + node = {node="vzxv:grass"}, + outputs = {{node="vzxv:dirt"}} +} -vzxv.add_pummel_recipe("vzxv_trees:trunk","group1:axe",{1,2},nil,function(pos,node) - minetest.set_node(pos,{name="vzxv:moistdirt"}) -end) +vzxv.add_pummel_recipe{ + node = {node="vzxv:stone"}, + tool = {"group1:pick"}, + outputs = {{node="vzxv:cobblestone"}} +} -vzxv.add_pummel_recipe("vzxv:stick",nil,{1},function(pos,node,tool,side) - return minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z}).name == "vzxv:stick" -end,function(pos,node) - minetest.set_node(pos,{name="air"}) - minetest.set_node({x=pos.x,y=pos.y-1,z=pos.z},{name="vzxv_trees:trunk"}) -end) +vzxv.add_pummel_recipe{ + node = {node="vzxv_trees:trunk"}, + side = 1, + tool = {"group1:axe"}, + outputs = {{node="vzxv:moistdirt"}} +} -vzxv.add_pummel_recipe("vzxv:stone","group1:pick",nil,nil,function(pos,node) - minetest.set_node(pos,{name="vzxv:cobblestone"}) -end)
\ No newline at end of file +vzxv.add_pummel_recipe{ + node = {node="vzxv:stick",consume=true}, + side = 1, + othernodes = {{node="vzxv:stick",y=-1,consume=true}}, + outputs = {{item="vzxv:woodadze",y=-1}} +}
\ No newline at end of file |