RealBadAngel
2013-02-03 e83a4c652f36a426830f07890680a54381ccf9fb
commit | author | age
82cba9 1 power_tools ={}
R 2
3 registered_power_tools_count=1
4
5 function register_power_tool (string1,max_charge)
6 power_tools[registered_power_tools_count]={}
7 power_tools[registered_power_tools_count].tool_name=string1
8 power_tools[registered_power_tools_count].max_charge=max_charge
9 registered_power_tools_count=registered_power_tools_count+1
10 end
11
12 register_power_tool ("technic:mining_drill",60000)
13 register_power_tool ("technic:laser_mk1",40000)
14 register_power_tool ("technic:battery",10000)
15
16 minetest.register_alias("battery", "technic:battery")
17 minetest.register_alias("battery_box", "technic:battery_box")
18 minetest.register_alias("electric_furnace", "technic:electric_furnace")
19
20
21 minetest.register_craft({
22     output = 'technic:battery 1',
23     recipe = {
24         {'default:wood', 'moreores:copper_ingot', 'default:wood'},
25         {'default:wood', 'moreores:tin_ingot', 'default:wood'},
26         {'default:wood', 'moreores:copper_ingot', 'default:wood'},
27     }
28 }) 
29
30 minetest.register_craft({
31     output = 'technic:battery_box 1',
32     recipe = {
33         {'technic:battery', 'default:wood', 'technic:battery'},
34         {'technic:battery', 'moreores:copper_ingot', 'technic:battery'},
35         {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
36     }
37 }) 
38
39 minetest.register_craft({
40     output = 'technic:electric_furnace',
41     recipe = {
42         {'default:brick', 'default:brick', 'default:brick'},
43         {'default:brick', '', 'default:brick'},
44         {'default:steel_ingot', 'moreores:copper_ingot', 'default:steel_ingot'},
45     }
46 })
47
48
49 minetest.register_tool("technic:battery",
50 {description = "RE Battery",
51 inventory_image = "technic_battery.png",
52 energy_charge = 0,
53 tool_capabilities = {max_drop_level=0, groupcaps={fleshy={times={}, uses=10000, maxlevel=0}}}}) 
54
55 minetest.register_craftitem("technic:battery_box", {
56     description = "Battery box",
57     stack_max = 99,
58 }) 
59
60
61
62 battery_box_formspec =
63     "invsize[8,9;]"..
64     "image[1,1;1,2;technic_power_meter_bg.png]"..
65     "list[current_name;src;3,1;1,1;]"..
66     "image[4,1;1,1;technic_battery_reload.png]"..
67     "list[current_name;dst;5,1;1,1;]"..
68     "label[0,0;Battery box]"..
69     "label[3,0;Charge]"..
70     "label[5,0;Discharge]"..
71     "label[1,3;Power level]"..
72     "list[current_player;main;0,5;8,4;]"
73
74 minetest.register_node("technic:battery_box", {
75     description = "Battery box",
76     tiles = {"technic_battery_box_top.png", "technic_battery_box_bottom.png", "technic_battery_box_side.png",
77         "technic_battery_box_side.png", "technic_battery_box_side.png", "technic_battery_box_side.png"},
78     groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
79     sounds = default.node_sound_wood_defaults(),
80     technic_power_machine=1,
81     on_construct = function(pos)
82         local meta = minetest.env:get_meta(pos)
83         meta:set_string("infotext", "Battery box")
84         meta:set_float("technic_power_machine", 1)
85         meta:set_string("formspec", battery_box_formspec)
86         local inv = meta:get_inventory()
87         inv:set_size("src", 1)
88         inv:set_size("dst", 1)
89         battery_charge = 0
90         max_charge = 60000
91         end,    
92     can_dig = function(pos,player)
93         local meta = minetest.env:get_meta(pos);
94         local inv = meta:get_inventory()
95         if not inv:is_empty("dst") then
96             return false
97         elseif not inv:is_empty("src") then
98             return false
99         end
100         return true
101     end,
102 })
103
104 electric_furnace_formspec =
105     "invsize[8,9;]"..
106     "image[1,1;1,2;technic_power_meter_bg.png]"..
107     "list[current_name;src;3,1;1,1;]"..
108     "list[current_name;dst;5,1;2,2;]"..
109     "list[current_player;main;0,5;8,4;]"..
110     "label[0,0;Electric Furnace]"..
111     "label[1,3;Power level]"
112     
113 minetest.register_node("technic:electric_furnace", {
114     description = "Electric furnace",
115     tiles = {"technic_electric_furnace_top.png", "technic_electric_furnace_bottom.png", "technic_electric_furnace_side.png",
116         "technic_electric_furnace_side.png", "technic_electric_furnace_side.png", "technic_electric_furnace_front.png"},
117     paramtype2 = "facedir",
118     groups = {cracky=2},
119     legacy_facedir_simple = true,
120     sounds = default.node_sound_stone_defaults(),
121     technic_power_machine=1,
122     internal_EU_buffer=0;
123     interal_EU_buffer_size=2000;
124     on_construct = function(pos)
125         local meta = minetest.env:get_meta(pos)
126         meta:set_float("technic_power_machine", 1)
127         meta:set_string("formspec", electric_furnace_formspec)
128         meta:set_string("infotext", "Electric furnace")
129         local inv = meta:get_inventory()
130         inv:set_size("src", 1)
131         inv:set_size("dst", 4)
132         local EU_used  = 0
133         local furnace_is_cookin = 0
134         local cooked = nil
135         meta:set_float("internal_EU_buffer",0)
136         meta:set_float("internal_EU_buffer_size",2000)
137
138     end,
139     can_dig = function(pos,player)
140         local meta = minetest.env:get_meta(pos);
141         local inv = meta:get_inventory()
142         if not inv:is_empty("dst") then
143             return false
144         elseif not inv:is_empty("src") then
145             return false
146         end
147         return true
148     end,
149 })
150
151 minetest.register_node("technic:electric_furnace_active", {
152     description = "Electric Furnace",
153     tiles = {"technic_electric_furnace_top.png", "technic_electric_furnace_bottom.png", "technic_electric_furnace_side.png",
154         "technic_electric_furnace_side.png", "technic_electric_furnace_side.png", "technic_electric_furnace_front_active.png"},
155     paramtype2 = "facedir",
156     light_source = 8,
157     drop = "technic:electric_furnace",
158     groups = {cracky=2, not_in_creative_inventory=1},
159     legacy_facedir_simple = true,
160     sounds = default.node_sound_stone_defaults(),
161     internal_EU_buffer=0;
162     interal_EU_buffer_size=2000;
163     technic_power_machine=1,
164     on_construct = function(pos)
165         local meta = minetest.env:get_meta(pos)
166         meta:set_float("technic_power_machine", 1)
167         meta:set_string("formspec", electric_furnace_formspec)
168         meta:set_string("infotext", "Electric furnace");
169         local inv = meta:get_inventory()
170         inv:set_size("src", 1)
171         inv:set_size("dst", 4)
172         local EU_used  = 0
173         local furnace_is_cookin = 0
174         local cooked = nil
175     end,
176     can_dig = function(pos,player)
177         local meta = minetest.env:get_meta(pos);
178         local inv = meta:get_inventory()
179         if not inv:is_empty("dst") then
180             return false
181         elseif not inv:is_empty("src") then
182             return false
183         end
184         return true
185     end,
186 })
187
188 minetest.register_abm({
189     nodenames = {"technic:electric_furnace","technic:electric_furnace_active"},
190     interval = 1,
191     chance = 1,
192     
193     action = function(pos, node, active_object_count, active_object_count_wider)
194
195         local meta = minetest.env:get_meta(pos)
196         internal_EU_buffer=meta:get_float("internal_EU_buffer")
197         internal_EU_buffer_size=meta:get_float("internal_EU_buffer")
198         local load = math.floor(internal_EU_buffer/2000 * 100)
199         meta:set_string("formspec",
200                 "invsize[8,9;]"..
201                 "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
202                         (load)..":technic_power_meter_fg.png]"..
203                 "list[current_name;src;3,1;1,1;]"..
204                 "list[current_name;dst;5,1;2,2;]"..
205                 "list[current_player;main;0,5;8,4;]"..
206                 "label[0,0;Electric Furnace]"..
207                 "label[1,3;Power level]")
208
209         local inv = meta:get_inventory()
210         
211         local furnace_is_cookin = meta:get_float("furnace_is_cookin")
212         
213         
214         local srclist = inv:get_list("src")
215         local cooked=nil 
216
217         if srclist then
218          cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
219         end
220         
221         
222         if (furnace_is_cookin == 1) then
223             if internal_EU_buffer>=150 then
224             internal_EU_buffer=internal_EU_buffer-150;
225             meta:set_float("internal_EU_buffer",internal_EU_buffer)
226             meta:set_float("src_time", meta:get_float("src_time") + 3)
227             if cooked and cooked.item and meta:get_float("src_time") >= cooked.time then
228                 -- check if there's room for output in "dst" list
229                 if inv:room_for_item("dst",cooked.item) then
230                     -- Put result in "dst" list
231                     inv:add_item("dst", cooked.item)
232                     -- take stuff from "src" list
233                     srcstack = inv:get_stack("src", 1)
234                     srcstack:take_item()
235                     inv:set_stack("src", 1, srcstack)
236                 else
237                     print("Furnace inventory full!")
238                 end
239                 meta:set_string("src_time", 0)
240             end
241             end        
242         end
243         
244         
245
246         
247         if srclist then
248             cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
249             if cooked.time>0 then 
250             hacky_swap_node(pos,"technic:electric_furnace_active")
251             meta:set_string("infotext","Furnace active")
252             meta:set_string("furnace_is_cookin",1)
253         --    meta:set_string("formspec", electric_furnace_formspec)
254             meta:set_string("src_time", 0)
255             return
256             end
257
258         end
259     
260                 hacky_swap_node(pos,"technic:electric_furnace")
261                 meta:set_string("infotext","Furnace inactive")
262                 meta:set_string("furnace_is_cookin",0)
263         --        meta:set_string("formspec", electric_furnace_formspec)
264                 meta:set_string("src_time", 0)
265         
266     
267 end,        
268 })