34 lines
999 B
Lua
34 lines
999 B
Lua
-- LUALOCALS < ---------------------------------------------------------
|
|
local ItemStack, nodecore
|
|
= ItemStack, nodecore
|
|
-- LUALOCALS > ---------------------------------------------------------
|
|
|
|
function nodecore.inv_walk(player, widx, inv, list)
|
|
widx = widx or player:get_wield_index()
|
|
list = list or "main"
|
|
inv = inv or player:get_inventory()
|
|
local size = inv:get_size(list)
|
|
local slots = {}
|
|
for i = widx, size do slots[#slots + 1] = i end
|
|
for i = widx - 1, 1, -1 do slots[#slots + 1] = i end
|
|
local idx = 0
|
|
return function()
|
|
idx = idx + 1
|
|
return slots[idx]
|
|
end
|
|
end
|
|
|
|
function nodecore.give_item(player, stack, list, inv)
|
|
stack = ItemStack(stack)
|
|
if stack:is_empty() then return stack end
|
|
|
|
inv = inv or player:get_inventory()
|
|
for idx in nodecore.inv_walk(player, nil, inv, list) do
|
|
local s = inv:get_stack(list, idx)
|
|
stack = nodecore.stack_merge(s, stack)
|
|
inv:set_stack(list, idx, s)
|
|
if stack:is_empty() then return stack end
|
|
end
|
|
return inv:add_item(list, stack)
|
|
end
|