Jordan Snelling
2013-06-27 c687e8cb7b9e624474353b0cc10acc5db14192f8
commit | author | age
82cba9 1 mining_drill_max_charge=60000
e23f87 2 mining_drill_mk2_max_charge=240000
R 3 mining_drill_mk3_max_charge=960000
4 mining_drill_power_usage=200
5 mining_drill_mk2_power_usage=600
6 mining_drill_mk3_power_usage=1800
82cba9 7
R 8 minetest.register_craft({
9     output = 'technic:mining_drill',
10     recipe = {
11         {'technic:stainless_steel_ingot', 'technic:diamond_drill_head', 'technic:stainless_steel_ingot'},
12         {'technic:stainless_steel_ingot', 'technic:motor', 'technic:stainless_steel_ingot'},
13         {'', 'technic:red_energy_crystal', 'moreores:copper_ingot'},
14     }
15 })
e23f87 16 minetest.register_craft({
R 17     output = 'technic:mining_drill_mk2',
18     recipe = {
19         {'technic:diamond_drill_head', 'technic:diamond_drill_head', 'technic:diamond_drill_head'},
20         {'technic:stainless_steel_ingot', 'technic:mining_drill', 'technic:stainless_steel_ingot'},
21         {'', 'technic:green_energy_crystal', ''},
22     }
23 })
24 minetest.register_craft({
25     output = 'technic:mining_drill_mk3',
26     recipe = {
27         {'technic:diamond_drill_head', 'technic:diamond_drill_head', 'technic:diamond_drill_head'},
28         {'technic:stainless_steel_ingot', 'technic:mining_drill_mk2', 'technic:stainless_steel_ingot'},
29         {'', 'technic:blue_energy_crystal', ''},
30     }
31 })
82cba9 32
e23f87 33 function drill_dig_it (pos, player,drill_type,mode)
R 34     
35     local charge
82cba9 36
e23f87 37     if mode==1 then
R 38         drill_dig_it0 (pos,player)
39     end
40     
41     if mode==2 then -- 3 deep
42         dir=drill_dig_it1(player)
43         if dir==0 then -- x+
44             drill_dig_it0 (pos,player)
45             pos.x=pos.x+1
46             drill_dig_it0 (pos,player)
47             pos.x=pos.x+1
48             drill_dig_it0 (pos,player)
49         end
50         if dir==1 then  -- x-
51             drill_dig_it0 (pos,player)
52             pos.x=pos.x-1
53             drill_dig_it0 (pos,player)
54             pos.x=pos.x-1
55             drill_dig_it0 (pos,player)
56         end
57         if dir==2 then  -- z+
58             drill_dig_it0 (pos,player)
59             pos.z=pos.z+1
60             drill_dig_it0 (pos,player)
61             pos.z=pos.z+1
62             drill_dig_it0 (pos,player)
63         end
64         if dir==3 then  -- z-
65             drill_dig_it0 (pos,player)
66             pos.z=pos.z+1
67             drill_dig_it0 (pos,player)
68             pos.z=pos.z+1
69             drill_dig_it0 (pos,player)
70         end
71     end
72     
73     if mode==3 then -- 3 wide
74         dir=drill_dig_it1(player)
75         if dir==0 or dir==1 then -- x
76             drill_dig_it0 (pos,player)
77             pos.z=pos.z+1
78             drill_dig_it0 (pos,player)
79             pos.z=pos.z-2
80             drill_dig_it0 (pos,player)
81         end
82         if dir==2 or dir==3 then  -- z
83             drill_dig_it0 (pos,player)
84             pos.x=pos.x+1
85             drill_dig_it0 (pos,player)
86             pos.x=pos.x-2
87             drill_dig_it0 (pos,player)
88         end
89     end
90     
91     if mode==4 then -- 3 tall, selected in the middle
92         drill_dig_it0 (pos,player)
93         pos.y=pos.y+1
94         drill_dig_it0 (pos,player)
95         pos.y=pos.y-2
96         drill_dig_it0 (pos,player)
97     end
82cba9 98
e23f87 99     if mode==5 then -- 3 x 3
R 100         local dir=player:get_look_dir()
101         if math.abs(dir.y)<0.5 then
102             dir=drill_dig_it1(player)
103                 if dir==0 or dir==1 then -- x
104                     drill_dig_it2(pos,player)
105                 end
106                 if dir==2 or dir==3 then  -- z
107                     drill_dig_it3(pos,player)
108                 end
109         else
110         drill_dig_it4(pos,player)
111         end
112     end
113     
114     if drill_type==1 then charge=mining_drill_power_usage end
115     if drill_type==2 then 
116         if  mode==1 then charge=mining_drill_mk2_power_usage end
117         if (mode==2 or mode==3 or mode==4) then charge=mining_drill_mk2_power_usage*3 end
118     end
119     if drill_type==3 then 
120         if  mode==1 then charge=mining_drill_power_usage end
121         if (mode==2 or mode==3 or mode==4) then charge=mining_drill_mk2_power_usage*6 end
122         if mode==5 then charge=mining_drill_mk2_power_usage*9 end
123     end
124     minetest.sound_play("mining_drill", {pos = pos, gain = 1.0, max_hear_distance = 10,})
125     return charge
126 end
82cba9 127
e23f87 128 function drill_dig_it0 (pos,player)
82cba9 129     local node=minetest.env:get_node(pos)
R 130     if node.name == "air" or node.name == "ignore" then return end
131     if node.name == "default:lava_source" then return end
132     if node.name == "default:lava_flowing" then return end
133     if node.name == "default:water_source" then minetest.env:remove_node(pos) return end
134     if node.name == "default:water_flowing" then minetest.env:remove_node(pos) return end
135     minetest.node_dig(pos,node,player)
e23f87 136 end
82cba9 137
e23f87 138 function drill_dig_it1 (player)
R 139     local dir=player:get_look_dir()
140     if math.abs(dir.x)>math.abs(dir.z) then 
141         if dir.x>0 then return 0 end
142         return 1
143     end
144     if dir.z>0 then return 2 end
145     return 3
146 end
147
148 function drill_dig_it2 (pos,player)
149     drill_dig_it0 (pos,player)
150     pos.z=pos.z+1
151     drill_dig_it0 (pos,player)
152     pos.z=pos.z-2
153     drill_dig_it0 (pos,player)
154     pos.z=pos.z+1
155     pos.y=pos.y+1
156     drill_dig_it0 (pos,player)
157     pos.z=pos.z+1
158     drill_dig_it0 (pos,player)
159     pos.z=pos.z-2
160     drill_dig_it0 (pos,player)
161     pos.z=pos.z+1
162     pos.y=pos.y-2
163     drill_dig_it0 (pos,player)
164     pos.z=pos.z+1
165     drill_dig_it0 (pos,player)
166     pos.z=pos.z-2
167     drill_dig_it0 (pos,player)
168 end
169 function drill_dig_it3 (pos,player)
170     drill_dig_it0 (pos,player)
171     pos.x=pos.x+1
172     drill_dig_it0 (pos,player)
173     pos.x=pos.x-2
174     drill_dig_it0 (pos,player)
175     pos.x=pos.x+1
176     pos.y=pos.y+1
177     drill_dig_it0 (pos,player)
178     pos.x=pos.x+1
179     drill_dig_it0 (pos,player)
180     pos.x=pos.x-2
181     drill_dig_it0 (pos,player)
182     pos.x=pos.x+1
183     pos.y=pos.y-2
184     drill_dig_it0 (pos,player)
185     pos.x=pos.x+1
186     drill_dig_it0 (pos,player)
187     pos.x=pos.x-2
188     drill_dig_it0 (pos,player)
189 end
190
191 function drill_dig_it4 (pos,player)
192     drill_dig_it0 (pos,player)
193     pos.x=pos.x+1
194     drill_dig_it0 (pos,player)
195     pos.x=pos.x-2
196     drill_dig_it0 (pos,player)
197     pos.x=pos.x+1
198     pos.z=pos.z+1
199     drill_dig_it0 (pos,player)
200     pos.x=pos.x+1
201     drill_dig_it0 (pos,player)
202     pos.x=pos.x-2
203     drill_dig_it0 (pos,player)
204     pos.x=pos.x+1
205     pos.z=pos.z-2
206     drill_dig_it0 (pos,player)
207     pos.x=pos.x+1
208     drill_dig_it0 (pos,player)
209     pos.x=pos.x-2
210     drill_dig_it0 (pos,player)
211 end
212
213 register_power_tool ("technic:mining_drill",mining_drill_max_charge)
214 minetest.register_tool("technic:mining_drill", {
215     description = "Mining Drill Mk1",
216     inventory_image = "technic_mining_drill.png",
217     stack_max = 1,
218     on_use = function(itemstack, user, pointed_thing)
219         if pointed_thing.type=="node" then 
220         item=itemstack:to_table()
221         local meta=get_item_meta(item["metadata"])
8f485a 222         if meta==nil then return end --tool not charghed
R 223         if meta["charge"]==nil then return end
e23f87 224         charge=meta["charge"]
R 225         if charge-mining_drill_power_usage>0 then
226             charge_to_take=drill_dig_it(minetest.get_pointed_thing_position(pointed_thing, above),user,1,1)
227             charge =charge-mining_drill_power_usage;
228             meta["charge"]=charge
229             item["metadata"]=set_item_meta(meta)
230             set_RE_wear(item,charge,mining_drill_max_charge)
231             itemstack:replace(item)
232             end
233         return itemstack
234         end
235     end,
236 })
237
238 minetest.register_tool("technic:mining_drill_mk2", {
239     description = "Mining Drill Mk2",
240     inventory_image = "technic_mining_drill_mk2.png",
241     on_use = function(itemstack, user, pointed_thing)
242     mining_drill_mk2_handler(itemstack,user,pointed_thing)
243     return itemstack
244     end,
245 })
246 register_power_tool ("technic:mining_drill_mk2",mining_drill_mk2_max_charge)
247
248 for i=1,4,1 do
249 register_power_tool ("technic:mining_drill_mk2_"..i,mining_drill_mk2_max_charge)
250 minetest.register_tool("technic:mining_drill_mk2_"..i, {
251     description = "Mining Drill Mk2 in Mode "..i,
252     inventory_image = "technic_mining_drill_mk2.png^technic_tool_mode"..i..".png",
253     wield_image = "technic_mining_drill_mk2.png",
254     groups = {not_in_creative_inventory=1},
255     on_use = function(itemstack, user, pointed_thing)
256     mining_drill_mk2_handler(itemstack,user,pointed_thing)
257     return itemstack
258     end,
259 })
260 end
261
262 minetest.register_tool("technic:mining_drill_mk3", {
263     description = "Mining Drill Mk3",
264     inventory_image = "technic_mining_drill_mk3.png",
265     on_use = function(itemstack, user, pointed_thing)
266     mining_drill_mk3_handler(itemstack,user,pointed_thing)
267     return itemstack
268     end,
269 })
270 register_power_tool ("technic:mining_drill_mk3",mining_drill_mk3_max_charge)
271
272 for i=1,5,1 do
273 register_power_tool ("technic:mining_drill_mk3_"..i,mining_drill_mk3_max_charge)
274 minetest.register_tool("technic:mining_drill_mk3_"..i, {
275     description = "Mining Drill Mk3 in Mode "..i,
276     inventory_image = "technic_mining_drill_mk3.png^technic_tool_mode"..i..".png",
277     wield_image = "technic_mining_drill_mk3.png",
278     groups = {not_in_creative_inventory=1},
279     on_use = function(itemstack, user, pointed_thing)
280     mining_drill_mk3_handler(itemstack,user,pointed_thing)
281     return itemstack
282     end,
283 })
284 end
285
286 function mining_drill_mk2_handler (itemstack,user,pointed_thing)
287     local keys=user:get_player_control()
288     local player_name=user:get_player_name()
289     local item=itemstack:to_table()
290     meta=get_item_meta(item["metadata"])
291     if meta==nil or keys["sneak"]==true then return mining_drill_mk2_setmode(user,itemstack) end
292     if meta["mode"]==nil then return mining_drill_mk2_setmode(user,itemstack) end
293     if pointed_thing.type~="node" then return end
8f485a 294     if meta["charge"]==nil then return end
e23f87 295     charge=meta["charge"]
R 296     if charge-mining_drill_power_usage>0 then
297         local charge_to_take=drill_dig_it(minetest.get_pointed_thing_position(pointed_thing, above),user,2,meta["mode"])
298         charge=charge-charge_to_take;
299         if charge<0 then charge=0 end
300         meta["charge"]=charge
301         item["metadata"]=set_item_meta(meta)
302         set_RE_wear(item,charge,mining_drill_mk2_max_charge)
303         itemstack:replace(item)
304     end
305     return itemstack
306 end
307
308 function mining_drill_mk3_handler (itemstack,user,pointed_thing)
309     local keys=user:get_player_control()
310     local player_name=user:get_player_name()
311     local item=itemstack:to_table()
312     meta=get_item_meta(item["metadata"])
313     if meta==nil or keys["sneak"]==true then return mining_drill_mk3_setmode(user,itemstack) end
314     if meta["mode"]==nil then return mining_drill_mk3_setmode(user,itemstack) end
315     if pointed_thing.type~="node" then return end
8f485a 316     if meta["charge"]==nil then return end
e23f87 317     charge=meta["charge"]
R 318     if charge-mining_drill_power_usage>0 then
319         print(dump(meta))
320         local charge_to_take=drill_dig_it(minetest.get_pointed_thing_position(pointed_thing, above),user,3,meta["mode"])
321         charge=charge-charge_to_take;
322         if charge<0 then charge=0 end
323         meta["charge"]=charge
324         item["metadata"]=set_item_meta(meta)
325         set_RE_wear(item,charge,mining_drill_mk3_max_charge)
326         itemstack:replace(item)
327     end
328     return itemstack
329 end
330
331 mining_drill_mode_text={
332 {"Single node."},
333 {"3 nodes deep."},
334 {"3 modes wide."},
335 {"3 modes tall."},
336 {"3x3 nodes."},
337 }
338
339 function mining_drill_mk2_setmode(user,itemstack)
340     local player_name=user:get_player_name()
341     local item=itemstack:to_table()
342     local meta=get_item_meta(item["metadata"])
343     if meta==nil then
344         meta={}
345         mode=0
346     end
347     if meta["mode"]==nil then
348         minetest.chat_send_player(player_name,"Hold shift and use to change Mining Drill Mk2 modes.")
349         meta["mode"]=0
350         mode=0
351     end
352     mode=(meta["mode"])
353     mode=mode+1
354     if mode>=5 then mode=1 end
355     minetest.chat_send_player(player_name, "Mining Drill Mk2 mode : "..mode.." - "..mining_drill_mode_text[mode][1] )
356     item["name"]="technic:mining_drill_mk2_"..mode
357     meta["mode"]=mode
358     item["metadata"]=set_item_meta(meta)
359     itemstack:replace(item)
360     return itemstack
361 end
362
363 function mining_drill_mk3_setmode(user,itemstack)
364     local player_name=user:get_player_name()
365     local item=itemstack:to_table()
366     local meta=get_item_meta(item["metadata"])
367     if meta==nil then
368         meta={}
369         mode=0
370     end
371     if meta["mode"]==nil then
372         minetest.chat_send_player(player_name,"Hold shift and use to change Mining Drill Mk3 modes.")
373         meta["mode"]=0
374         mode=0
375     end
376     mode=(meta["mode"])
377     mode=mode+1
378     if mode>=6 then mode=1 end
379     minetest.chat_send_player(player_name, "Mining Drill Mk3 mode : "..mode.." - "..mining_drill_mode_text[mode][1] )
380     item["name"]="technic:mining_drill_mk3_"..mode
381     meta["mode"]=mode
382     item["metadata"]=set_item_meta(meta)
383     itemstack:replace(item)
384     return itemstack
385 end