summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorheav-4 <heavpoot@gmail.com>2022-02-13 22:40:37 +0000
committerheav-4 <heavpoot@gmail.com>2022-02-13 22:40:37 +0000
commitef9661a2ae7063842f11b32ba6fa9a74ac12c1a7 (patch)
treeb1a885e608f9b5b0ecbca1a0560d3874554125c4
parent69b1cf9dcd2bb561f2349e10e558a5e117b3ff3c (diff)
drastically improve pummel recipes internally
-rw-r--r--mods/vzxv_pummel/init.lua62
-rw-r--r--mods/vzxv_pummel/recipes.lua43
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