TechDudie
2021-02-09 43acec290067f9aca534647d46ba1f13cfeb377a
technic/machines/register/alloy_furnace.lua
@@ -1,10 +1,50 @@
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