Zefram
2014-04-26 f5041784212a5045538983f41e1fc73bf79277a8
commit | author | age
ee0765 1
be2f30 2 local S = technic.getter
S 3
08db41 4 local tube = {
S 5     insert_object = function(pos, node, stack, direction)
6         local meta = minetest.get_meta(pos)
7         local inv = meta:get_inventory()
8         return inv:add_item("src",stack)
9     end,
10     can_insert = function(pos, node, stack, direction)
11         local meta = minetest.get_meta(pos)
12         local inv = meta:get_inventory()
13         return inv:room_for_item("src", stack)
14     end,
15     connect_sides = {left=1, right=1, back=1, top=1, bottom=1},
16 }
17
ee0765 18 function technic.register_electric_furnace(data)
S 19     local tier = data.tier
20     local ltier = string.lower(tier)
21
22     local tube_side_texture = data.tube and "technic_"..ltier.."_electric_furnace_side_tube.png"
23             or "technic_"..ltier.."_electric_furnace_side.png"
24
08db41 25     local groups = {cracky=2}
S 26     local active_groups = {cracky=2, not_in_creative_inventory=1}
27     if data.tube then
28         groups.tubedevice = 1
29         groups.tubedevice_receiver = 1
30         active_groups.tubedevice = 1
31         active_groups.tubedevice_receiver = 1
32     end
ee0765 33
S 34     local formspec =
35         "invsize[8,10;]"..
36         "list[current_name;src;3,1;1,1;]"..
37         "list[current_name;dst;5,1;2,2;]"..
38         "list[current_player;main;0,6;8,4;]"..
be2f30 39         "label[0,0;"..S("%s Electric Furnace"):format(tier).."]"
ee0765 40     if data.upgrade then
S 41         formspec = formspec..
42             "list[current_name;upgrade1;1,4;1,1;]"..
43             "list[current_name;upgrade2;2,4;1,1;]"..
39c41a 44             "label[1,5;"..S("Upgrade Slots").."]"
ee0765 45     end
S 46
47     minetest.register_node("technic:"..ltier.."_electric_furnace", {
39c41a 48         description = S("%s Electric Furnace"):format(tier),
ee0765 49         tiles = {"technic_"..ltier.."_electric_furnace_top.png",
S 50                  "technic_"..ltier.."_electric_furnace_bottom.png",
51                  tube_side_texture,
52              tube_side_texture,
53              "technic_"..ltier.."_electric_furnace_side.png",
54                  "technic_"..ltier.."_electric_furnace_front.png"},
55         paramtype2 = "facedir",
08db41 56         groups = groups,
ee0765 57         legacy_facedir_simple = true,
S 58         sounds = default.node_sound_stone_defaults(),
08db41 59         tube = data.tube and tube or nil,
ee0765 60         on_construct = function(pos)
S 61             local meta = minetest.get_meta(pos)
62             local name = minetest.get_node(pos).name
39c41a 63             meta:set_string("infotext", S("%s Electric Furnace"):format(tier))
ee0765 64             meta:set_int("tube_time",  0)
76a8ac 65             meta:set_string("formspec", formspec)
ee0765 66             local inv = meta:get_inventory()
S 67             inv:set_size("src", 1)
68             inv:set_size("dst", 4)
69             inv:set_size("upgrade1", 1)
70             inv:set_size("upgrade2", 1)
71         end,
0809dd 72         can_dig = technic.machine_can_dig,
S 73         allow_metadata_inventory_put = technic.machine_inventory_put,
74         allow_metadata_inventory_take = technic.machine_inventory_take,
75         allow_metadata_inventory_move = technic.machine_inventory_move,
ee0765 76     })
S 77
78     minetest.register_node("technic:"..ltier.."_electric_furnace_active", {
39c41a 79         description = ("%s Electric Furnace"):format(tier),
ee0765 80         tiles = {"technic_"..ltier.."_electric_furnace_top.png",
S 81                  "technic_"..ltier.."_electric_furnace_bottom.png",
82                  tube_side_texture,
83                  tube_side_texture,
84                  "technic_"..ltier.."_electric_furnace_side.png",
85                  "technic_"..ltier.."_electric_furnace_front_active.png"},
86         paramtype2 = "facedir",
f50417 87         drop = "technic:"..ltier.."_electric_furnace",
08db41 88         groups = active_groups,
ee0765 89         light_source = 8,
S 90         legacy_facedir_simple = true,
91         sounds = default.node_sound_stone_defaults(),
08db41 92         tube = data.tube and tube or nil,
ee0765 93         on_construct = function(pos)
S 94             local meta = minetest.get_meta(pos)
95             local name = minetest.get_node(pos).name
96             local data = minetest.registered_nodes[name].technic
39c41a 97             meta:set_string("infotext", S("%s Electric Furnace"):format(tier))
ee0765 98             meta:set_int("tube_time",  0)
76a8ac 99             meta:set_string("formspec", formspec)
ee0765 100             local inv = meta:get_inventory()
S 101             inv:set_size("src", 1)
102             inv:set_size("dst", 4)
103             inv:set_size("upgrade1", 1)
104             inv:set_size("upgrade2", 1)
105         end,
0809dd 106         can_dig = technic.machine_can_dig,
S 107         allow_metadata_inventory_put = technic.machine_inventory_put,
108         allow_metadata_inventory_take = technic.machine_inventory_take,
109         allow_metadata_inventory_move = technic.machine_inventory_move,
ee0765 110     })
S 111
112     minetest.register_abm({
113         nodenames = {"technic:"..ltier.."_electric_furnace",
114                      "technic:"..ltier.."_electric_furnace_active"},
115         interval = 1,
116         chance   = 1,
117         action = function(pos, node, active_object_count, active_object_count_wider)
118             local meta     = minetest.get_meta(pos)
119             local inv      = meta:get_inventory()
76a8ac 120             local eu_input = meta:get_int(tier.."_EU_input")
ee0765 121
S 122             -- Machine information
76a8ac 123             local machine_name   = S("%s Electric Furnace"):format(tier)
S 124             local machine_node   = "technic:"..ltier.."_electric_furnace"
ee0765 125             local machine_demand = data.demand
S 126
127             -- Power off automatically if no longer connected to a switching station
76a8ac 128             technic.switching_station_timeout_count(pos, tier)
ee0765 129
S 130             -- Check upgrade slots
131             local EU_upgrade, tube_upgrade = 0, 0
132             if data.upgrade then
133                 EU_upgrade, tube_upgrade = technic.handle_machine_upgrades(meta)
134             end
135             if data.tube then
136                 technic.handle_machine_pipeworks(pos, tube_upgrade)
137             end
138
139             local result = minetest.get_craft_result({
140                     method = "cooking",
141                     width = 1,
142                     items = inv:get_list("src")})
bd3cc7 143             if not result or result.time == 0 or
S 144                not inv:room_for_item("dst", result.item) then
76a8ac 145                 meta:set_int(tier.."_EU_demand", 0)
f3d8b4 146                 technic.swap_node(pos, machine_node)
be2f30 147                 meta:set_string("infotext", S("%s Idle"):format(machine_name))
ee0765 148                 return
S 149             end
150
151             if eu_input < machine_demand[EU_upgrade+1] then
152                 -- Unpowered - go idle
f3d8b4 153                 technic.swap_node(pos, machine_node)
be2f30 154                 meta:set_string("infotext", S("%s Unpowered"):format(machine_name))
ee0765 155             elseif eu_input >= machine_demand[EU_upgrade+1] then
S 156                 -- Powered
f3d8b4 157                 technic.swap_node(pos, machine_node.."_active")
be2f30 158                 meta:set_string("infotext", S("%s Active"):format(machine_name))
ee0765 159                 technic.smelt_item(meta, result, data.speed)
S 160
161             end
76a8ac 162             meta:set_int(tier.."_EU_demand", machine_demand[EU_upgrade+1])
ee0765 163         end,
S 164     })
165
166     technic.register_machine(tier, "technic:"..ltier.."_electric_furnace",        technic.receiver)
167     technic.register_machine(tier, "technic:"..ltier.."_electric_furnace_active", technic.receiver)
168
169 end -- End registration
170