
Co-authored-by: Luke aka SwissalpS <Luke@SwissalpS.ws> Co-authored-by: SmallJoker <SmallJoker@users.noreply.github.com>
51 lines
1.5 KiB
Lua
51 lines
1.5 KiB
Lua
|
|
local S = technic.getter
|
|
|
|
function technic.insert_object_unique_stack(pos, node, incoming_stack, direction)
|
|
local meta = minetest.get_meta(pos)
|
|
local inv = meta:get_inventory()
|
|
local incoming_name = incoming_stack:get_name()
|
|
local stack_index = nil
|
|
for inv_index, inv_stack in pairs(inv:get_list("src")) do
|
|
if inv_stack:get_name() == incoming_name then
|
|
stack_index = inv_index
|
|
break
|
|
end
|
|
end
|
|
if stack_index == nil then
|
|
return inv:add_item("src", incoming_stack)
|
|
end
|
|
local present_stack = inv:get_stack("src", stack_index)
|
|
local leftover = present_stack:add_item(incoming_stack)
|
|
inv:set_stack("src", stack_index, present_stack)
|
|
return leftover
|
|
end
|
|
|
|
function technic.can_insert_unique_stack(pos, node, incoming_stack, direction)
|
|
local meta = minetest.get_meta(pos)
|
|
local inv = meta:get_inventory()
|
|
local incoming_name = incoming_stack:get_name()
|
|
if meta:get_int("splitstacks") == 0 then
|
|
-- avoid looping second time with inv:contains_item("src", incoming_stack)
|
|
for _, inv_stack in pairs(inv:get_list("src")) do
|
|
if inv_stack:get_name() == incoming_name then
|
|
return inv_stack:item_fits(incoming_stack)
|
|
end
|
|
end
|
|
end
|
|
|
|
return technic.default_can_insert(pos, node, incoming_stack, direction)
|
|
end
|
|
|
|
function technic.register_alloy_furnace(data)
|
|
data.typename = "alloy"
|
|
data.machine_name = "alloy_furnace"
|
|
data.machine_desc = S("%s Alloy Furnace")
|
|
|
|
data.insert_object = technic.insert_object_unique_stack
|
|
data.can_insert = technic.can_insert_unique_stack
|
|
|
|
technic.register_base_machine(data)
|
|
end
|
|
|