Serhiy Zahoriya
2020-01-11 1a45ad19d4fa627e147bd385665e37942f6147fb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
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