diff options
Diffstat (limited to 'mods/vzxv_pummel/init.lua')
-rw-r--r-- | mods/vzxv_pummel/init.lua | 69 |
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"}) |