ShadowNinja
2013-07-11 5d470cd753efe8f4640099165a7bfc0c6e181c35
commit | author | age
ee5c6c 1 local mining_drill_max_charge=60000
K 2 local mining_drill_mk2_max_charge=240000
3 local mining_drill_mk3_max_charge=960000
4 local mining_drill_power_usage=200
5 local mining_drill_mk2_power_usage=600
6 local mining_drill_mk3_power_usage=1800
82cba9 7
R 8 minetest.register_craft({
9     output = 'technic:mining_drill',
10     recipe = {
3a3700 11         {'technic:stainless_steel_ingot',     'technic:diamond_drill_head',     'technic:stainless_steel_ingot'},
R 12         {'technic:stainless_steel_ingot',     'technic:motor',                 'technic:stainless_steel_ingot'},
13         {'',                                'technic:red_energy_crystal',     'moreores:copper_ingot'},
82cba9 14     }
R 15 })
e23f87 16 minetest.register_craft({
R 17     output = 'technic:mining_drill_mk2',
18     recipe = {
3a3700 19         {'technic:diamond_drill_head',         'technic:diamond_drill_head',     'technic:diamond_drill_head'},
R 20         {'technic:stainless_steel_ingot',     'technic:mining_drill',         'technic:stainless_steel_ingot'},
21         {'',                                 'technic:green_energy_crystal', ''},
e23f87 22     }
R 23 })
24 minetest.register_craft({
25     output = 'technic:mining_drill_mk3',
26     recipe = {
3a3700 27         {'technic:diamond_drill_head',         'technic:diamond_drill_head',     'technic:diamond_drill_head'},
R 28         {'technic:stainless_steel_ingot',     'technic:mining_drill_mk2',     'technic:stainless_steel_ingot'},
29         {'',                                 'technic:blue_energy_crystal',     ''},
e23f87 30     }
R 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
ee5c6c 213 technic.register_MV_power_tool ("technic:mining_drill",mining_drill_max_charge)
e23f87 214 minetest.register_tool("technic:mining_drill", {
R 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 
8e03d7 220         local item=itemstack:to_table()
e23f87 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
8e03d7 224         local charge=meta["charge"]
e23f87 225         if charge-mining_drill_power_usage>0 then
R 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)
ee5c6c 230             technic.set_RE_wear(item,charge,mining_drill_max_charge)
e23f87 231             itemstack:replace(item)
R 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 })
ee5c6c 246 technic.register_HV_power_tool ("technic:mining_drill_mk2",mining_drill_mk2_max_charge)
e23f87 247
R 248 for i=1,4,1 do
ee5c6c 249 technic.register_HV_power_tool ("technic:mining_drill_mk2_"..i,mining_drill_mk2_max_charge)
e23f87 250 minetest.register_tool("technic:mining_drill_mk2_"..i, {
R 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 })
ee5c6c 270 technic.register_HV_power_tool ("technic:mining_drill_mk3",mining_drill_mk3_max_charge)
e23f87 271
R 272 for i=1,5,1 do
ee5c6c 273 technic.register_HV_power_tool ("technic:mining_drill_mk3_"..i,mining_drill_mk3_max_charge)
e23f87 274 minetest.register_tool("technic:mining_drill_mk3_"..i, {
R 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()
8e03d7 290     local meta=get_item_meta(item["metadata"])
e23f87 291     if meta==nil or keys["sneak"]==true then return mining_drill_mk2_setmode(user,itemstack) end
R 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)
ee5c6c 302         technic.set_RE_wear(item,charge,mining_drill_mk2_max_charge)
e23f87 303         itemstack:replace(item)
R 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()
8e03d7 312     local meta=get_item_meta(item["metadata"])
e23f87 313     if meta==nil or keys["sneak"]==true then return mining_drill_mk3_setmode(user,itemstack) end
R 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
8e03d7 317     local charge=meta["charge"]
e23f87 318     if charge-mining_drill_power_usage>0 then
R 319         local charge_to_take=drill_dig_it(minetest.get_pointed_thing_position(pointed_thing, above),user,3,meta["mode"])
320         charge=charge-charge_to_take;
321         if charge<0 then charge=0 end
322         meta["charge"]=charge
323         item["metadata"]=set_item_meta(meta)
ee5c6c 324         technic.set_RE_wear(item,charge,mining_drill_mk3_max_charge)
e23f87 325         itemstack:replace(item)
R 326     end
327     return itemstack
328 end
329
330 mining_drill_mode_text={
331 {"Single node."},
332 {"3 nodes deep."},
333 {"3 modes wide."},
334 {"3 modes tall."},
335 {"3x3 nodes."},
336 }
337
338 function mining_drill_mk2_setmode(user,itemstack)
339     local player_name=user:get_player_name()
340     local item=itemstack:to_table()
341     local meta=get_item_meta(item["metadata"])
342     if meta==nil then
343         meta={}
344         mode=0
345     end
346     if meta["mode"]==nil then
347         minetest.chat_send_player(player_name,"Hold shift and use to change Mining Drill Mk2 modes.")
348         meta["mode"]=0
349         mode=0
350     end
351     mode=(meta["mode"])
352     mode=mode+1
353     if mode>=5 then mode=1 end
354     minetest.chat_send_player(player_name, "Mining Drill Mk2 mode : "..mode.." - "..mining_drill_mode_text[mode][1] )
355     item["name"]="technic:mining_drill_mk2_"..mode
356     meta["mode"]=mode
357     item["metadata"]=set_item_meta(meta)
358     itemstack:replace(item)
359     return itemstack
360 end
361
362 function mining_drill_mk3_setmode(user,itemstack)
363     local player_name=user:get_player_name()
364     local item=itemstack:to_table()
365     local meta=get_item_meta(item["metadata"])
366     if meta==nil then
367         meta={}
368         mode=0
369     end
370     if meta["mode"]==nil then
371         minetest.chat_send_player(player_name,"Hold shift and use to change Mining Drill Mk3 modes.")
372         meta["mode"]=0
373         mode=0
374     end
375     mode=(meta["mode"])
376     mode=mode+1
377     if mode>=6 then mode=1 end
378     minetest.chat_send_player(player_name, "Mining Drill Mk3 mode : "..mode.." - "..mining_drill_mode_text[mode][1] )
379     item["name"]="technic:mining_drill_mk3_"..mode
380     meta["mode"]=mode
381     item["metadata"]=set_item_meta(meta)
382     itemstack:replace(item)
383     return itemstack
384 end