Tim
2015-03-16 137695ea67cf7096311c893de7cf139e6307b26b
commit | author | age
82cba9 1
354ee6 2 local S = technic.getter
S 3
f3bba0 4 local function inject_items (pos)
a41390 5         local meta=minetest.get_meta(pos) 
f3bba0 6         local inv = meta:get_inventory()
VE 7         local mode=meta:get_string("mode")
8         if mode=="single items" then
9             local i=0
10             for _,stack in ipairs(inv:get_list("main")) do
11             i=i+1
12                 if stack then
13                 local item0=stack:to_table()
14                 if item0 then 
baf7f6 15                     item0["count"] = "1"
049129 16                     technic.tube_inject_item(pos, pos, vector.new(0, -1, 0), item0)
baf7f6 17                     stack:take_item(1)
f3bba0 18                     inv:set_stack("main", i, stack)
VE 19                     return
20                     end
21                 end
22             end
23         end
24         if mode=="whole stacks" then
25             local i=0
26             for _,stack in ipairs(inv:get_list("main")) do
27             i=i+1
28                 if stack then
29                 local item0=stack:to_table()
30                 if item0 then 
049129 31                     technic.tube_inject_item(pos, pos, vector.new(0, -1, 0), item0)
f3bba0 32                     stack:clear()
VE 33                     inv:set_stack("main", i, stack)
34                     return
35                     end
36                 end
37             end
38         end
39         
40 end
41
91cdd1 42 minetest.register_craft({
R 43     output = 'technic:injector 1',
44     recipe = {
45         {'', 'technic:control_logic_unit',''},
46         {'', 'default:chest',''},
749df3 47         {'', 'pipeworks:tube_1',''},
91cdd1 48     }
R 49 })
50
827509 51 local function set_injector_formspec(meta)
Z 52     local is_stack = meta:get_string("mode") == "whole stacks"
53     meta:set_string("formspec",
54             "invsize[8,9;]"..
55             "item_image[0,0;1,1;technic:injector]"..
56             "label[1,0;"..S("Self-Contained Injector").."]"..
57             (is_stack and
58                 "button[0,1;2,1;mode_item;"..S("Stackwise").."]" or
59                 "button[0,1;2,1;mode_stack;"..S("Itemwise").."]")..
60             "list[current_name;main;0,2;8,2;]"..
61             "list[current_player;main;0,5;8,4;]")
62 end
63
82cba9 64 minetest.register_node("technic:injector", {
827509 65     description = S("Self-Contained Injector"),
74cf47 66     tiles = {"technic_injector_top.png", "technic_injector_bottom.png", "technic_injector_side.png",
R 67         "technic_injector_side.png", "technic_injector_side.png", "technic_injector_side.png"},
ce40d1 68     groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, tubedevice=1, tubedevice_receiver=1},
7ed1aa 69     tube = {
T 70         can_insert = function(pos, node, stack, direction)
71             return minetest.get_meta(pos):get_inventory():room_for_item("main",stack)
72         end,
73         insert_object = function(pos, node, stack, direction)
74             return minetest.get_meta(pos):get_inventory():add_item("main",stack)
75         end,
76         connect_sides = {left=1, right=1, front=1, back=1, top=1, bottom=1},
77     },
82cba9 78     sounds = default.node_sound_wood_defaults(),
R 79     on_construct = function(pos)
a41390 80         local meta = minetest.get_meta(pos)
827509 81         meta:set_string("infotext", S("Self-Contained Injector"))
82cba9 82         local inv = meta:get_inventory()
R 83         inv:set_size("main", 8*4)
fd26a8 84         meta:set_string("mode","single items")
827509 85         set_injector_formspec(meta)
82cba9 86     end,
R 87     can_dig = function(pos,player)
a41390 88         local meta = minetest.get_meta(pos);
82cba9 89         local inv = meta:get_inventory()
R 90         return inv:is_empty("main")
fd26a8 91     end,
R 92     on_receive_fields = function(pos, formanme, fields, sender)
a41390 93         local meta = minetest.get_meta(pos)
827509 94         if fields.mode_item then meta:set_string("mode", "single items") end
Z 95         if fields.mode_stack then meta:set_string("mode", "whole stacks") end
96         set_injector_formspec(meta)
82cba9 97     end,
0809dd 98     allow_metadata_inventory_put = technic.machine_inventory_put,
S 99     allow_metadata_inventory_take = technic.machine_inventory_take,
100     allow_metadata_inventory_move = technic.machine_inventory_move,
bccefd 101     after_place_node = pipeworks.after_place,
VE 102     after_dig_node = pipeworks.after_dig
82cba9 103 })
R 104
74cf47 105 minetest.register_abm({
R 106     nodenames = {"technic:injector"},
107     interval = 1,
108     chance = 1,
109     action = function(pos, node, active_object_count, active_object_count_wider)
35b10a 110         local pos1 = vector.add(pos, vector.new(0, -1, 0))
N 111         local node1 = minetest.get_node(pos1) 
112         if minetest.get_item_group(node1.name, "tubedevice") > 0 then
113             inject_items(pos)
114         end
82cba9 115     end,
R 116 })
117