123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- local MP = minetest.get_modpath(minetest.get_current_modname())
- local S, NS = dofile(MP.."/intllib.lua")
- simplecrafting_lib.craft_stack = function(crafting_type, request_stack, source_inv, source_listname, destination_inv, destination_listname, player_or_pos)
- local player
- local pos
- if type(player_or_pos) == "userdata" then
- player = player_or_pos
- elseif type(player_or_pos) == "table" then
- pos = player_or_pos
- end
- local craft_result = simplecrafting_lib.get_crafting_result(crafting_type, source_inv:get_list(source_listname), request_stack)
- if craft_result then
- if simplecrafting_lib.remove_items(source_inv, source_listname, craft_result.input) then
-
-
- if player then
- minetest.log("action", player:get_player_name() .. " crafts " .. craft_result.output:to_string())
- elseif pos then
- minetest.log("action", craft_result.output:to_string() .. " was crafted at " .. minetest.pos_to_string(pos))
- else
- minetest.log("action", craft_result.output:to_string() .. "was crafted somewhere by someone.")
- end
- local total_output = simplecrafting_lib.count_list_add(
-
- {[craft_result.output:get_name()]=craft_result.output:get_count() - request_stack:get_count()},
- craft_result.returns)
-
-
- local leftover = simplecrafting_lib.add_items(destination_inv, destination_listname, total_output)
-
- simplecrafting_lib.execute_post_craft(crafting_type, craft_result, request_stack, source_inv, source_listname, destination_inv, destination_listname)
-
- if player then
- leftover = simplecrafting_lib.add_items(player:get_inventory(), "main", leftover)
- simplecrafting_lib.drop_items(player:getpos(), leftover)
- elseif pos then
- simplecrafting_lib.drop_items(pos, leftover)
- else
- local still_has_leftovers = false
- for item, count in pairs(leftover) do
- still_has_leftovers = true
- break
- end
- if still_has_leftovers then
- minetest.log("error", "After crafting " .. craft_result.output:to_string() ..
- " some output items could not be placed into an inventory or dropped in world, and were lost.")
- end
- end
- return true
- end
- end
- return false
- end
|