RealBadAngel
2013-02-02 661f21754abc25d9d39a8fd9a4f816df773c14d0
commit | author | age
061e6b 1 minetest.register_craft({
R 2     output = 'technic:mv_electric_furnace',
3     recipe = {
4         {'technic:stainless_steel_ingot', 'technic:electric_furnace', 'technic:stainless_steel_ingot'},
5         {'pipeworks:tube_000000', 'technic:mv_transformer', 'pipeworks:tube_000000'},
6         {'technic:stainless_steel_ingot', 'technic:mv_cable', 'technic:stainless_steel_ingot'},
7     }
8 })
9
10
11 mv_electric_furnace_formspec =
12     "invsize[8,9;]"..
13     "image[1,1;1,2;technic_power_meter_bg.png]"..
14     "list[current_name;src;3,1;1,1;]"..
15     "list[current_name;dst;5,1;2,2;]"..
16     "list[current_player;main;0,5;8,4;]"..
17     "label[0,0;MV Electric Furnace]"..
18     "label[1,3;Power level]"
19     
20 minetest.register_node("technic:mv_electric_furnace", {
21     description = "MV Electric furnace",
22     tiles = {"technic_mv_electric_furnace_top.png", "technic_mv_electric_furnace_bottom.png", "technic_mv_electric_furnace_side.png",
23         "technic_mv_electric_furnace_side_tube.png", "technic_mv_electric_furnace_side_tube.png", "technic_mv_electric_furnace_front.png"},
24     paramtype2 = "facedir",
25     groups = {cracky=2, tubedevice=1,tubedevice_receiver=1,},
26         tube={insert_object=function(pos,node,stack,direction)
27             local meta=minetest.env:get_meta(pos)
28             local inv=meta:get_inventory()
29                 return inv:add_item("src",stack)
30         end,
31         can_insert=function(pos,node,stack,direction)
32             local meta=minetest.env:get_meta(pos)
33             local inv=meta:get_inventory()
34             return inv:room_for_item("src",stack)
35         end,
36         },
37     legacy_facedir_simple = true,
38     sounds = default.node_sound_stone_defaults(),
39     technic_power_machine=1,
40     internal_EU_buffer=0;
41     interal_EU_buffer_size=2000;
42     on_construct = function(pos)
43         local meta = minetest.env:get_meta(pos)
44         meta:set_float("technic_mv_power_machine", 1)
45         meta:set_string("formspec", mv_electric_furnace_formspec)
46         meta:set_string("infotext", "Electric furnace")
47         local inv = meta:get_inventory()
48         inv:set_size("src", 1)
49         inv:set_size("dst", 4)
50         local EU_used  = 0
51         local furnace_is_cookin = 0
52         local cooked = nil
53         meta:set_float("internal_EU_buffer",0)
54         meta:set_float("internal_EU_buffer_size",2000)
55
56     end,
57     can_dig = function(pos,player)
58         local meta = minetest.env:get_meta(pos);
59         local inv = meta:get_inventory()
60         if not inv:is_empty("dst") then
61             return false
62         elseif not inv:is_empty("src") then
63             return false
64         end
65         return true
66     end,
67 })
68
69 minetest.register_node("technic:mv_electric_furnace_active", {
70     description = "MV Electric Furnace",
71     tiles = {"technic_mv_electric_furnace_top.png", "technic_mv_electric_furnace_bottom.png", "technic_mv_electric_furnace_side.png",
72         "technic_mv_electric_furnace_side.png", "technic_mv_electric_furnace_side_tube.png", "technic_mv_electric_furnace_front_active.png"},
73     paramtype2 = "facedir",
74     light_source = 8,
75     drop = "technic:mv_electric_furnace",
76     groups = {cracky=2, tubedevice=1,tubedevice_receiver=1,not_in_creative_inventory=1},
77     tube={insert_object=function(pos,node,stack,direction)
78             local meta=minetest.env:get_meta(pos)
79             local inv=meta:get_inventory()
80                 return inv:add_item("src",stack)
81         end,
82         can_insert=function(pos,node,stack,direction)
83             local meta=minetest.env:get_meta(pos)
84             local inv=meta:get_inventory()
85             return inv:room_for_item("src",stack)
86         end,
87         },
88     legacy_facedir_simple = true,
89     sounds = default.node_sound_stone_defaults(),
90     internal_EU_buffer=0;
91     interal_EU_buffer_size=2000;
92     technic_power_machine=1,
93     on_construct = function(pos)
94         local meta = minetest.env:get_meta(pos)
95         meta:set_float("technic_mv_power_machine", 1)
96         meta:set_string("formspec", mv_electric_furnace_formspec)
97         meta:set_string("infotext", "Electric furnace");
98         local inv = meta:get_inventory()
99         inv:set_size("src", 1)
100         inv:set_size("dst", 4)
101         local EU_used  = 0
102         local furnace_is_cookin = 0
103         local cooked = nil
104     end,
105     can_dig = function(pos,player)
106         local meta = minetest.env:get_meta(pos);
107         local inv = meta:get_inventory()
108         if not inv:is_empty("dst") then
109             return false
110         elseif not inv:is_empty("src") then
111             return false
112         end
113         return true
114     end,
115 })
116
117 minetest.register_abm({
118     nodenames = {"technic:mv_electric_furnace","technic:mv_electric_furnace_active"},
119     interval = 1,
120     chance = 1,
121
122     action = function(pos, node, active_object_count, active_object_count_wider)
123
124         local meta = minetest.env:get_meta(pos)
125         internal_EU_buffer=meta:get_float("internal_EU_buffer")
126         internal_EU_buffer_size=meta:get_float("internal_EU_buffer")
127         local load = math.floor(internal_EU_buffer/2000 * 100)
128         meta:set_string("formspec",
129                 "invsize[8,9;]"..
130                 "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
131                     (load)..":technic_power_meter_fg.png]"..
132                 "list[current_name;src;3,1;1,1;]"..
133                 "list[current_name;dst;5,1;2,2;]"..
134                 "list[current_player;main;0,5;8,4;]"..
135                 "label[0,0;MV Electric Furnace]"..
136                 "label[1,3;Power level]")
137
138         local inv = meta:get_inventory()
139         
140         local furnace_is_cookin = meta:get_float("furnace_is_cookin")
141         
142         
143         local srclist = inv:get_list("src")
144         local cooked=nil 
145
146         if srclist then
147          cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
148         end
149         
150         
151         if (furnace_is_cookin == 1) then
152             if internal_EU_buffer>=150 then
153             internal_EU_buffer=internal_EU_buffer-150;
154             meta:set_float("internal_EU_buffer",internal_EU_buffer)
155             meta:set_float("src_time", meta:get_float("src_time") + 3)
156             if cooked and cooked.item and meta:get_float("src_time") >= cooked.time then
157                 -- check if there's room for output in "dst" list
158                 if inv:room_for_item("dst",cooked.item) then
159                     -- Put result in "dst" list
160                     inv:add_item("dst", cooked.item)
161                     -- take stuff from "src" list
162                     srcstack = inv:get_stack("src", 1)
163                     srcstack:take_item()
164                     inv:set_stack("src", 1, srcstack)
165                 else
166                     print("Furnace inventory full!")
167                 end
168                 meta:set_string("src_time", 0)
169             end
170             end        
171         end
172
173
174
175         if srclist then
176             cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
177             if cooked.time>0 then 
178             hacky_swap_node(pos,"technic:mv_electric_furnace_active")
179             meta:set_string("infotext","Furnace active")
180             meta:set_string("furnace_is_cookin",1)
181             meta:set_string("src_time", 0)
182             return
183             end
184
185         end
186
187                 hacky_swap_node(pos,"technic:mv_electric_furnace")
188                 meta:set_string("infotext","Furnace inactive")
189                 meta:set_string("furnace_is_cookin",0)
190                 meta:set_string("src_time", 0)
191
192 end,
193 })