Jordan Snelling
2013-06-27 c687e8cb7b9e624474353b0cc10acc5db14192f8
commit | author | age
82cba9 1 minetest.register_craft({
R 2     output = 'technic:electric_furnace',
3     recipe = {
4         {'default:cobble', 'default:cobble', 'default:cobble'},
5         {'default:cobble', '', 'default:cobble'},
6         {'default:steel_ingot', 'moreores:copper_ingot', 'default:steel_ingot'},
7     }
8 })
9
10
11 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;Electric Furnace]"..
18     "label[1,3;Power level]"
19     
20 minetest.register_node("technic:electric_furnace", {
21     description = "Electric furnace",
22     tiles = {"technic_electric_furnace_top.png", "technic_electric_furnace_bottom.png", "technic_electric_furnace_side.png",
23         "technic_electric_furnace_side.png", "technic_electric_furnace_side.png", "technic_electric_furnace_front.png"},
24     paramtype2 = "facedir",
25     groups = {cracky=2},
26     legacy_facedir_simple = true,
27     sounds = default.node_sound_stone_defaults(),
28     technic_power_machine=1,
29     internal_EU_buffer=0;
30     interal_EU_buffer_size=2000;
31     on_construct = function(pos)
32         local meta = minetest.env:get_meta(pos)
33         meta:set_float("technic_power_machine", 1)
34         meta:set_string("formspec", electric_furnace_formspec)
35         meta:set_string("infotext", "Electric furnace")
36         local inv = meta:get_inventory()
37         inv:set_size("src", 1)
38         inv:set_size("dst", 4)
39         local EU_used  = 0
40         local furnace_is_cookin = 0
41         local cooked = nil
42         meta:set_float("internal_EU_buffer",0)
43         meta:set_float("internal_EU_buffer_size",2000)
44
45     end,
46     can_dig = function(pos,player)
47         local meta = minetest.env:get_meta(pos);
48         local inv = meta:get_inventory()
49         if not inv:is_empty("dst") then
50             return false
51         elseif not inv:is_empty("src") then
52             return false
53         end
54         return true
55     end,
56 })
57
58 minetest.register_node("technic:electric_furnace_active", {
59     description = "Electric Furnace",
60     tiles = {"technic_electric_furnace_top.png", "technic_electric_furnace_bottom.png", "technic_electric_furnace_side.png",
61         "technic_electric_furnace_side.png", "technic_electric_furnace_side.png", "technic_electric_furnace_front_active.png"},
62     paramtype2 = "facedir",
63     light_source = 8,
64     drop = "technic:electric_furnace",
65     groups = {cracky=2, not_in_creative_inventory=1},
66     legacy_facedir_simple = true,
67     sounds = default.node_sound_stone_defaults(),
68     internal_EU_buffer=0;
69     interal_EU_buffer_size=2000;
70     technic_power_machine=1,
71     on_construct = function(pos)
72         local meta = minetest.env:get_meta(pos)
73         meta:set_float("technic_power_machine", 1)
74         meta:set_string("formspec", electric_furnace_formspec)
75         meta:set_string("infotext", "Electric furnace");
76         local inv = meta:get_inventory()
77         inv:set_size("src", 1)
78         inv:set_size("dst", 4)
79         local EU_used  = 0
80         local furnace_is_cookin = 0
81         local cooked = nil
82     end,
83     can_dig = function(pos,player)
84         local meta = minetest.env:get_meta(pos);
85         local inv = meta:get_inventory()
86         if not inv:is_empty("dst") then
87             return false
88         elseif not inv:is_empty("src") then
89             return false
90         end
91         return true
92     end,
93 })
94
95 minetest.register_abm({
96     nodenames = {"technic:electric_furnace","technic:electric_furnace_active"},
97     interval = 1,
98     chance = 1,
99     
100     action = function(pos, node, active_object_count, active_object_count_wider)
101
102         local meta = minetest.env:get_meta(pos)
103         internal_EU_buffer=meta:get_float("internal_EU_buffer")
b55bae 104         internal_EU_buffer_size=meta:get_float("internal_EU_buffer_size")
R 105         local load = math.floor(internal_EU_buffer/internal_EU_buffer_size * 100)
82cba9 106         meta:set_string("formspec",
R 107                 "invsize[8,9;]"..
108                 "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
109                     (load)..":technic_power_meter_fg.png]"..
110                 "list[current_name;src;3,1;1,1;]"..
111                 "list[current_name;dst;5,1;2,2;]"..
112                 "list[current_player;main;0,5;8,4;]"..
113                 "label[0,0;Electric Furnace]"..
114                 "label[1,3;Power level]")
115
116         local inv = meta:get_inventory()
117         
118         local furnace_is_cookin = meta:get_float("furnace_is_cookin")
119         
120         
121         local srclist = inv:get_list("src")
122         local cooked=nil 
123
124         if srclist then
125          cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
126         end
127         
128         
129         if (furnace_is_cookin == 1) then
130             if internal_EU_buffer>=150 then
131             internal_EU_buffer=internal_EU_buffer-150;
132             meta:set_float("internal_EU_buffer",internal_EU_buffer)
133             meta:set_float("src_time", meta:get_float("src_time") + 3)
134             if cooked and cooked.item and meta:get_float("src_time") >= cooked.time then
135                 -- check if there's room for output in "dst" list
136                 if inv:room_for_item("dst",cooked.item) then
137                     -- Put result in "dst" list
138                     inv:add_item("dst", cooked.item)
139                     -- take stuff from "src" list
140                     srcstack = inv:get_stack("src", 1)
141                     srcstack:take_item()
142                     inv:set_stack("src", 1, srcstack)
143                 else
144                     print("Furnace inventory full!")
145                 end
146                 meta:set_string("src_time", 0)
147             end
612349 148             end
82cba9 149         end
R 150
612349 151
82cba9 152         if srclist then
R 153             cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
154             if cooked.time>0 then 
155             hacky_swap_node(pos,"technic:electric_furnace_active")
156             meta:set_string("infotext","Furnace active")
157             meta:set_string("furnace_is_cookin",1)
158             meta:set_string("src_time", 0)
159             return
160             end
161
162         end
612349 163
82cba9 164                 hacky_swap_node(pos,"technic:electric_furnace")
R 165                 meta:set_string("infotext","Furnace inactive")
166                 meta:set_string("furnace_is_cookin",0)
167                 meta:set_string("src_time", 0)
612349 168
R 169 end,
82cba9 170 })
612349 171
R 172 register_LV_machine ("technic:electric_furnace","RE")
173 register_LV_machine ("technic:electric_furnace_active","RE")