123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- local add_count_list = function(inv, listname, count_list)
- local leftover_list
- for item, count in pairs(count_list) do
- local stack_max = ItemStack(item):get_stack_max()
- while count > 0 do
- local to_add = math.min(count, stack_max)
- local leftover = inv:add_item(listname, ItemStack({name=item, count=to_add}))
- local leftover_count = leftover:get_count()
- if leftover_count > 0 then
- leftover_list = leftover_list or {}
- leftover_list[item] = (leftover_list[item] or 0) + leftover_count + count
- break
- end
- count = count - to_add
- end
- end
- return leftover_list
- end
- simplecrafting_lib.add_items = function(inv, listname, count_list)
- return add_count_list(inv, listname, count_list) or {}
- end
- simplecrafting_lib.add_items_if_room = function(inv, listname, count_list)
- local old_list = inv:get_list(listname)
- if not add_count_list(inv, listname, count_list) then
- inv:set_list(listname, old_list)
- return false
- end
- return true
- end
- simplecrafting_lib.room_for_items = function(inv, listname, count_list)
- local old_list = inv:get_list(listname)
- local result = add_count_list(inv, listname, count_list)
- inv:set_list(listname, old_list)
- return result ~= nil
- end
- simplecrafting_lib.remove_items = function(inv, listname, count_list)
- local old_list = inv:get_list(listname)
- for item, count in pairs(count_list) do
- while count > 0 do
-
-
-
- local stack_to_remove = ItemStack({name=item, count=count})
- stack_to_remove:set_count(math.min(count, stack_to_remove:get_stack_max()))
- local removed = inv:remove_item(listname, stack_to_remove)
- if removed:is_empty() then
-
- inv:set_list(listname, old_list)
- return false
- end
- count = count - removed:get_count()
- end
- end
- return true
- end
- simplecrafting_lib.drop_items = function(pos, count_list)
- for item, count in pairs(count_list) do
- local stack_max = ItemStack(item):get_stack_max()
- while count > 0 do
- local to_add = math.min(count, stack_max)
- minetest.add_item(pos, ItemStack({name=item, count=to_add}))
- count = count - to_add
- end
- end
- end
|