Emon
2016-05-18 413d20d6c83a218c63fcb4fbf840010d1d380f86
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;]"..
d732c8 61             "list[current_player;main;0,5;8,4;]"..
E 62             "listring[]")
827509 63 end
Z 64
82cba9 65 minetest.register_node("technic:injector", {
827509 66     description = S("Self-Contained Injector"),
74cf47 67     tiles = {"technic_injector_top.png", "technic_injector_bottom.png", "technic_injector_side.png",
R 68         "technic_injector_side.png", "technic_injector_side.png", "technic_injector_side.png"},
ce40d1 69     groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, tubedevice=1, tubedevice_receiver=1},
7ed1aa 70     tube = {
T 71         can_insert = function(pos, node, stack, direction)
72             return minetest.get_meta(pos):get_inventory():room_for_item("main",stack)
73         end,
74         insert_object = function(pos, node, stack, direction)
75             return minetest.get_meta(pos):get_inventory():add_item("main",stack)
76         end,
77         connect_sides = {left=1, right=1, front=1, back=1, top=1, bottom=1},
78     },
82cba9 79     sounds = default.node_sound_wood_defaults(),
R 80     on_construct = function(pos)
a41390 81         local meta = minetest.get_meta(pos)
827509 82         meta:set_string("infotext", S("Self-Contained Injector"))
82cba9 83         local inv = meta:get_inventory()
R 84         inv:set_size("main", 8*4)
fd26a8 85         meta:set_string("mode","single items")
827509 86         set_injector_formspec(meta)
82cba9 87     end,
R 88     can_dig = function(pos,player)
a41390 89         local meta = minetest.get_meta(pos);
82cba9 90         local inv = meta:get_inventory()
R 91         return inv:is_empty("main")
fd26a8 92     end,
R 93     on_receive_fields = function(pos, formanme, fields, sender)
a41390 94         local meta = minetest.get_meta(pos)
827509 95         if fields.mode_item then meta:set_string("mode", "single items") end
Z 96         if fields.mode_stack then meta:set_string("mode", "whole stacks") end
97         set_injector_formspec(meta)
82cba9 98     end,
0809dd 99     allow_metadata_inventory_put = technic.machine_inventory_put,
S 100     allow_metadata_inventory_take = technic.machine_inventory_take,
101     allow_metadata_inventory_move = technic.machine_inventory_move,
bccefd 102     after_place_node = pipeworks.after_place,
VE 103     after_dig_node = pipeworks.after_dig
82cba9 104 })
R 105
74cf47 106 minetest.register_abm({
R 107     nodenames = {"technic:injector"},
108     interval = 1,
109     chance = 1,
110     action = function(pos, node, active_object_count, active_object_count_wider)
35b10a 111         local pos1 = vector.add(pos, vector.new(0, -1, 0))
N 112         local node1 = minetest.get_node(pos1) 
113         if minetest.get_item_group(node1.name, "tubedevice") > 0 then
114             inject_items(pos)
115         end
82cba9 116     end,
R 117 })
118