summaryrefslogtreecommitdiff
path: root/mods/vzxv_pummel/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'mods/vzxv_pummel/init.lua')
-rw-r--r--mods/vzxv_pummel/init.lua69
1 files changed, 49 insertions, 20 deletions
diff --git a/mods/vzxv_pummel/init.lua b/mods/vzxv_pummel/init.lua
index c2ad767..6552d89 100644
--- a/mods/vzxv_pummel/init.lua
+++ b/mods/vzxv_pummel/init.lua
@@ -38,32 +38,54 @@ local function toolcheck(tools,tool)
end
return false
end
- return singletoolcheck(tool)
+ return singletoolcheck(tools)
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 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
- local node_at = minetest.get_node(outputpos).name
- if not toolcheck(node.node,node_at) then
- return false
- end
+ local recipe = vzxv_pummel_recipes[node.name]
+ if node.name == "vzxv_itemstacks:item" then
+ local stack = vzxv.get_container_stack(pos)
+ if not stack or not vzxv_pummel_recipes[stack:get_name()] then
+ return false
+ end
+ recipe = vzxv_pummel_recipes[stack:get_name()]
+ else
+ if not recipe then return false end
+ end
+ for _,r in ipairs(recipe) do
+
+ local function check(node)
+ 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
+ local stack = vzxv.get_container_stack(outputpos)
+ if stack:get_count() == (node.count or 1) then
+ if toolcheck(node.item,stack:get_name()) then
+ return true
end
end
+ return false
+ elseif node.node then
+ local node_at = minetest.get_node(outputpos).name
+ if not toolcheck(node.node,node_at) then
+ return false
+ end
+ return true
end
- return r
+ return false
end
+ local res = true
+ if not sidecheck(r.side,sidename(side)) then res=false end
+ if not toolcheck(r.tool,tool) then res=false end
+ res = res and check(r.node)
+ if r.othernodes and res then
+ for _,node in ipairs(r.othernodes) do
+ res = res and check(node)
+ end
+ end
+ if res then return r end
end
return false
end
@@ -83,7 +105,14 @@ function vzxv.pummel(pos,node,tool,side)
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")
+ if node.consume then
+ local stack = vzxv.get_container_stack(outputpos)
+ stack:take_item(node.count)
+ vzxv.set_container_stack(outputpos,stack)
+ if stack:is_empty() then
+ minetest.set_node(outputpos,{name="air"})
+ end
+ end
else
if node.consume then
minetest.set_node(outputpos,{name="air"})