157 lines
7.4 KiB
Lua
Executable File
157 lines
7.4 KiB
Lua
Executable File
--all logick of item (pipe for item dont puy hear)
|
|
--list for input itemslot
|
|
--settera and geters for calculate item_redines (always max -100)
|
|
function owl_tech.get_item_redines(meta)
|
|
return meta:get_int("_redines")
|
|
end
|
|
function owl_tech.set_item_redines(meta,amount)
|
|
meta:set_int("_redines", amount)
|
|
end
|
|
function owl_tech.reset_item_redines(meta)
|
|
meta:set_int("_redines", 0)
|
|
end
|
|
function owl_tech.add_item_redines(meta,amount)
|
|
meta:set_int("_redines",owl_tech.get_item_redines(meta)+amount)
|
|
end
|
|
----------------------------------------------
|
|
-- calculate add bnus for speed work if recipt tire is low that tire mashine ( 1 lv give 20%)
|
|
function owl_tech.calculate_recipe_tire_bonus(meta,recip_tire,recip_dens)
|
|
return recip_dens+(recip_dens*(owl_tech.get_mashine_tire(meta)-recip_tire)*0.2)
|
|
end
|
|
----------------------------------------------
|
|
----Logick for item pipe
|
|
function owl_tech.set_item_pipe_logick(meta)
|
|
local inv = meta:get_inventory()
|
|
inv:set_size("pipe_inv", 1)
|
|
end
|
|
----------------------------------------------
|
|
|
|
--get item from inventory to pipe
|
|
function owl_tech.finde_inventory_slot_for_removing_item_around(pos)
|
|
local mass_pos ={
|
|
{x=pos.x,y=pos.y+1,z=pos.z},
|
|
{x=pos.x,y=pos.y-1,z=pos.z},
|
|
{x=pos.x+1,y=pos.y,z=pos.z},
|
|
{x=pos.x-1,y=pos.y,z=pos.z},
|
|
{x=pos.x,y=pos.y,z=pos.z+1},
|
|
{x=pos.x,y=pos.y,z=pos.z-1}
|
|
}
|
|
local meta = minetest.get_meta(pos)
|
|
local inv = meta:get_inventory() -- pipe
|
|
for i, value in ipairs(mass_pos) do
|
|
for j, value1 in pairs(OUTPUT_SLOT_NAME) do
|
|
if minetest.get_item_group((minetest.get_node(mass_pos[i])).name,OUTPUT_SLOT_NAME[j])>0 then-- for special item slots
|
|
local meta_source = minetest.get_meta(mass_pos[i])
|
|
local inv_sourc = meta_source:get_inventory()
|
|
if inv:is_empty("pipe_inv") and not inv_sourc:is_empty(OUTPUT_SLOT_NAME[j]) then
|
|
if inv:room_for_item("pipe_inv", inv_sourc:get_stack(OUTPUT_SLOT_NAME[j], 1)) then
|
|
inv:add_item("pipe_inv", inv_sourc:get_stack(OUTPUT_SLOT_NAME[j], 1))
|
|
inv_sourc:set_stack(OUTPUT_SLOT_NAME[j],1,'')
|
|
do return end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if minetest.get_node(mass_pos[i]).name=='mcl_chests:chest_small'
|
|
or minetest.get_node(mass_pos[i]).name=="mcl_chests:ender_chest"
|
|
or minetest.get_node(mass_pos[i]).name=="mcl_chests:ender_chest_small" then -- for chest type
|
|
local meta_source = minetest.get_meta(mass_pos[i])
|
|
local inv_sourc = meta_source:get_inventory()
|
|
if inv:is_empty("pipe_inv") and not inv_sourc:is_empty("main")then
|
|
for k = 1, #(inv_sourc:get_list("main")),1 do
|
|
if inv:room_for_item("pipe_inv", inv_sourc:get_stack("main", k)) and not (inv_sourc:get_stack("main", k)):is_empty() then
|
|
inv:add_item("pipe_inv", inv_sourc:get_stack("main", k))
|
|
inv_sourc:set_stack("main", k,'')
|
|
do return end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if minetest.get_item_group((minetest.get_node(mass_pos[i])).name,"owl_tech_can_pipe_output")>0 then
|
|
local meta_source = minetest.get_meta(mass_pos[i])
|
|
local inv_sourc = meta_source:get_inventory()
|
|
if (not inv:is_empty("pipe_inv")) and inv_sourc:is_empty("pipe_inv") then
|
|
if inv_sourc:room_for_item("pipe_inv", inv:get_stack("pipe_inv", 1)) then
|
|
local itemstack= inv:get_stack("pipe_inv", 1)
|
|
inv_sourc:add_item("pipe_inv",itemstack)
|
|
inv:set_stack("pipe_inv", 1, '')
|
|
do return end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
-------------------------------------------
|
|
--get item pipe to pipe
|
|
function owl_tech.finde_pipe_and_send_item(pos)
|
|
local mass_pos ={
|
|
{x=pos.x,y=pos.y+1,z=pos.z},
|
|
{x=pos.x,y=pos.y-1,z=pos.z},
|
|
{x=pos.x+1,y=pos.y,z=pos.z},
|
|
{x=pos.x-1,y=pos.y,z=pos.z},
|
|
{x=pos.x,y=pos.y,z=pos.z+1},
|
|
{x=pos.x,y=pos.y,z=pos.z-1}
|
|
}
|
|
local meta = minetest.get_meta(pos)
|
|
local inv = meta:get_inventory()
|
|
--for i, value in ipairs(mass_pos) do
|
|
local rand = math.random(1,6)
|
|
if minetest.get_item_group((minetest.get_node(mass_pos[rand])).name,"owl_tech_can_pipe_output")>0 then
|
|
local meta_source = minetest.get_meta(mass_pos[rand])
|
|
local inv_sourc = meta_source:get_inventory()
|
|
if (not inv:is_empty("pipe_inv")) and inv_sourc:is_empty("pipe_inv") then
|
|
if inv_sourc:room_for_item("pipe_inv", inv:get_stack("pipe_inv", 1)) then
|
|
local itemstack= inv:get_stack("pipe_inv", 1)
|
|
inv_sourc:add_item("pipe_inv",itemstack)
|
|
inv:set_stack("pipe_inv", 1, '')
|
|
do return end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
-----------------------------------------------------
|
|
--Send item in pipe
|
|
function owl_tech.send_item_in_inventory(pos)
|
|
local meta = minetest.get_meta(pos)
|
|
local mass_pos ={
|
|
{x=pos.x,y=pos.y+1,z=pos.z},
|
|
{x=pos.x,y=pos.y-1,z=pos.z},
|
|
{x=pos.x+1,y=pos.y,z=pos.z},
|
|
{x=pos.x-1,y=pos.y,z=pos.z},
|
|
{x=pos.x,y=pos.y,z=pos.z+1},
|
|
{x=pos.x,y=pos.y,z=pos.z-1}
|
|
}
|
|
for i, value in ipairs(mass_pos) do
|
|
local name= minetest.get_node(mass_pos[i]).name
|
|
for j, value in pairs(INPUT_SLOT_NAME) do
|
|
local meta = minetest.get_meta(pos)
|
|
local inv = meta:get_inventory() -- pipe
|
|
if minetest.get_item_group((minetest.get_node(mass_pos[i])).name,"owl_tech_can_pipe_output")>0 then --get item from enather pipe
|
|
local meta_source = minetest.get_meta(mass_pos[i])
|
|
local inv_sourc = meta_source:get_inventory()
|
|
if inv:is_empty("pipe_inv") and not inv_sourc:is_empty("pipe_inv") then
|
|
if inv:room_for_item("pipe_inv", inv_sourc:get_stack("pipe_inv", 1)) and not (inv_sourc:get_stack("pipe_inv", 1)):is_empty() then
|
|
inv:set_stack("pipe_inv", 1, inv_sourc:get_stack("pipe_inv", 1))
|
|
inv_sourc:set_stack("pipe_inv", 1,'' )
|
|
end
|
|
end
|
|
end
|
|
if minetest.get_node(mass_pos[i]).name=='mcl_chests:chest_small'
|
|
or minetest.get_node(mass_pos[i]).name=="mcl_chests:ender_chest"
|
|
or minetest.get_node(mass_pos[i]).name=="mcl_chests:ender_chest_small" then -- for chest
|
|
local meta_source = minetest.get_meta(mass_pos[i])
|
|
local inv_sourc = meta_source:get_inventory()
|
|
if not inv:is_empty("pipe_inv") then
|
|
for k = 1, #(inv_sourc:get_list("main")),1 do
|
|
if (inv_sourc:room_for_item("main", inv:get_stack("pipe_inv", 1)) and not ((inv:get_stack("pipe_inv", 1)):is_empty() ))then
|
|
inv_sourc:add_item("main", inv:get_stack("pipe_inv", 1))
|
|
inv:set_stack("pipe_inv", 1,'' )
|
|
do return end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|