Injector upgrade

This commit is contained in:
RealBadAngel 2013-02-03 14:59:40 +01:00
parent 4cefe5c544
commit fd26a83fcf

@ -9,7 +9,6 @@ minetest.register_craft({
{'', 'technic:control_logic_unit',''}, {'', 'technic:control_logic_unit',''},
{'', 'default:chest',''}, {'', 'default:chest',''},
{'', 'pipeworks:tube_000000',''}, {'', 'pipeworks:tube_000000',''},
} }
}) })
@ -25,17 +24,37 @@ minetest.register_node("technic:injector", {
meta:set_string("formspec", meta:set_string("formspec",
"invsize[8,9;]".. "invsize[8,9;]"..
"label[0,0;Injector]".. "label[0,0;Injector]"..
"button[0,1;.8,.8;mode;]"..
"label[.8,1;Mode: single items]"..
"list[current_name;main;0,2;8,2;]".. "list[current_name;main;0,2;8,2;]"..
"list[current_player;main;0,5;8,4;]") "list[current_player;main;0,5;8,4;]")
meta:set_string("infotext", "Injector") meta:set_string("infotext", "Injector")
local inv = meta:get_inventory() local inv = meta:get_inventory()
inv:set_size("main", 8*4) inv:set_size("main", 8*4)
meta:set_string("mode","single items")
end, end,
can_dig = function(pos,player) can_dig = function(pos,player)
local meta = minetest.env:get_meta(pos); local meta = minetest.env:get_meta(pos);
local inv = meta:get_inventory() local inv = meta:get_inventory()
return inv:is_empty("main") return inv:is_empty("main")
end, end,
on_receive_fields = function(pos, formanme, fields, sender)
local meta = minetest.env:get_meta(pos)
local mode=meta:get_string("mode")
if fields.mode then
if mode=="single items" then mode="whole stacks"
else mode="single items"
end
local mode=meta:set_string("mode",mode)
end
meta:set_string("formspec",
"invsize[8,9;]"..
"label[0,0;Injector]"..
"button[0,1;.8,.8;mode;]"..
"label[.8,1;Mode: "..mode.."]"..
"list[current_name;main;0,2;8,2;]"..
"list[current_player;main;0,5;8,4;]")
end,
}) })
minetest.register_abm({ minetest.register_abm({
@ -56,21 +75,43 @@ minetest.register_abm({
function inject_items (pos) function inject_items (pos)
local meta=minetest.env:get_meta(pos) local meta=minetest.env:get_meta(pos)
local inv = meta:get_inventory() local inv = meta:get_inventory()
local i=0 local mode=meta:get_string("mode")
for _,stack in ipairs(inv:get_list("main")) do if mode=="single items" then
i=i+1 local i=0
if stack then for _,stack in ipairs(inv:get_list("main")) do
local item0=stack:to_table() i=i+1
if item0 then if stack then
item0["count"]="1" local item0=stack:to_table()
local item1=tube_item({x=pos.x,y=pos.y,z=pos.z},item0) if item0 then
item1:get_luaentity().start_pos = {x=pos.x,y=pos.y,z=pos.z} item0["count"]="1"
item1:setvelocity({x=0, y=-1, z=0}) local item1=tube_item({x=pos.x,y=pos.y,z=pos.z},item0)
item1:setacceleration({x=0, y=0, z=0}) item1:get_luaentity().start_pos = {x=pos.x,y=pos.y,z=pos.z}
stack:take_item(1); item1:setvelocity({x=0, y=-1, z=0})
inv:set_stack("main", i, stack) item1:setacceleration({x=0, y=0, z=0})
return stack:take_item(1);
inv:set_stack("main", i, stack)
return
end
end end
end end
end end
if mode=="whole stacks" then
local i=0
for _,stack in ipairs(inv:get_list("main")) do
i=i+1
if stack then
local item0=stack:to_table()
if item0 then
local item1=tube_item({x=pos.x,y=pos.y,z=pos.z},item0)
item1:get_luaentity().start_pos = {x=pos.x,y=pos.y,z=pos.z}
item1:setvelocity({x=0, y=-1, z=0})
item1:setacceleration({x=0, y=0, z=0})
stack:clear()
inv:set_stack("main", i, stack)
return
end
end
end
end
end end