Maciej Kasatkin
2012-09-02 d455791cfb2d93e3625c1db103f069fa11c3d566
commit | author | age
167434 1 --LV cable node boxes
MK 2
3
4 minetest.register_alias("lv_cable", "technic:lv_cable")
5
6 minetest.register_craft({
7     output = 'technic:lv_cable 6',
8     recipe = {
9         {'moreores:copper_ingot', 'moreores:copper_ingot', 'moreores:copper_ingot'},
10     }
11 }) 
12
13 minetest.register_craftitem("technic:lv_cable", {
14     description = "Low Voltage Copper Cable",
15     stack_max = 99,
16 }) 
17
18 minetest.register_node("technic:lv_cable", {
19     description = "Low Voltage Copper Cable",
20     tiles = {"technic_lv_cable.png"},
21     inventory_image = "technic_lv_cable_wield.png",
22     groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
23     sounds = default.node_sound_wood_defaults(),
24     drop = "technic:lv_cable",
25     cablelike=1,
26     rules_x1=0,
27     rules_x2=0,
28     rules_y1=0,
29     rules_y2=0,
30     rules_z1=0,
31     rules_z2=0,
32     paramtype = "light",
33         drawtype = "nodebox", 
34     selection_box = {
35         type = "fixed",
36                 fixed = {
37         { -0.1 , -0.1 , -0.1 , 0.1 ,  0.1 , 0.1  },
38         }},
39     node_box = {
40         type = "fixed",
41                 fixed = {
42         { -0.1 , -0.1 , -0.1 , 0.1 ,  0.1 , 0.1  },
43         }},
44     on_construct = function(pos)
45     meta=minetest.env:get_meta(pos)
46     meta:set_float("cablelike",1)
47     meta:set_float("x1",0)
48     meta:set_float("x2",0)
49     meta:set_float("y1",0)
50     meta:set_float("y2",0)
51     meta:set_float("z1",0)
52     meta:set_float("z2",0)
53     check_connections (pos)
54     end,
55
56     after_dig_node = function (pos, oldnode, oldmetadata, digger)
57     check_connections_on_destroy (pos)
58     end,
59
60 })
61
62
63 str_y1=        { -0.1 , -0.1 , -0.1 , 0.1 , 0.5, 0.1  }    --0 y+
64 str_x1=        { -0.1 , -0.1 , -0.1 , 0.5, 0.1 , 0.1  }    --0 x+
65 str_z1=        { -0.1 , -0.1 ,  0.1 ,  0.1 , 0.1 , 0.5 }   --0 z+
66 str_z2=        { -0.1 , -0.1, -0.5 ,  0.1 ,  0.1 , 0.1  }  --0 z-
67 str_y2=        { -0.1 , -0.5, -0.1 ,  0.1 ,  0.1 , 0.1  }  --0 y-
68 str_x2=        { -0.5 , -0.1, -0.1 ,  0.1 ,  0.1 , 0.1  }  --0 x-
69
70
71
72 local x1,x2,y1,y2,z1,z2
73 local count=0
74
75 for x1 = 0, 1, 1 do    --x-
76 for x2 = 0, 1, 1 do    --x+
77 for y1 = 0, 1, 1 do    --y-
78 for y2 = 0, 1, 1 do    --y-    
79 for z1 = 0, 1, 1 do    --z-
80 for z2 = 0, 1, 1 do    --z+
81      
82 temp_x1={} temp_x2={} temp_y1={} temp_y2={} temp_z1={} temp_z2={}
83
84 if x1==1 then     temp_x1=str_x1  end 
85 if x2==1 then     temp_x2=str_x2  end 
86 if y1==1 then     temp_y1=str_y1  end 
87 if y2==1 then     temp_y2=str_y2  end 
88 if z1==1 then     temp_z1=str_z1  end 
89 if z2==1 then     temp_z2=str_z2  end 
90
91
92 minetest.register_node("technic:lv_cable"..count, {
93     description = "Low Voltage Copper Cable",
94     tiles = {"technic_lv_cable.png"},
95     groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
96     sounds = default.node_sound_wood_defaults(),
97     drop = "technic:lv_cable",
98     rules_x1=0,
99     rules_x2=0,
100     rules_y1=0,
101     rules_y2=0,
102     rules_z1=0,
103     rules_z2=0,
104     cablelike=1,
105     paramtype = "light",
106         drawtype = "nodebox", 
107     selection_box = {
108         type = "fixed",
109            fixed = {
110         temp_x1,temp_x2,temp_y1,temp_y2,temp_z1,temp_z2,
111         }},
112
113     node_box = {
114         type = "fixed",
115            fixed = {
116         temp_x1,temp_x2,temp_y1,temp_y2,temp_z1,temp_z2,
117         }},
118
119     after_dig_node = function (pos, oldnode, oldmetadata, digger)
120     check_connections_on_destroy (pos)
121     end,
122     
123 })
124
125 count=count+1 end end end end end end
126
127 check_connections = function(pos)
128         local pos1={}
129         pos1.x=pos.x
130         pos1.y=pos.y
131         pos1.z=pos.z
132         
133         pos1.x=pos1.x+1
134         if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
135         x2=1
136         x1=minetest.env:get_meta(pos1):get_float("x1")
137         y1=minetest.env:get_meta(pos1):get_float("y1")
138         y2=minetest.env:get_meta(pos1):get_float("y2")
139         z1=minetest.env:get_meta(pos1):get_float("z1")
140         z2=minetest.env:get_meta(pos1):get_float("z2")
141         rule=make_rule_number(x1,x2,y1,y2,z1,z2)
142         hacky_swap_node(pos1,"technic:lv_cable"..rule)
143         meta=minetest.env:get_meta(pos1)
144         meta:set_float("x2",x2)
145         meta=minetest.env:get_meta(pos)
146         x1=1
147         x2=minetest.env:get_meta(pos):get_float("x2")
148         y1=minetest.env:get_meta(pos):get_float("y1")
149         y2=minetest.env:get_meta(pos):get_float("y2")
150         z1=minetest.env:get_meta(pos):get_float("z1")
151         z2=minetest.env:get_meta(pos):get_float("z2")
152         meta:set_float("x1",x1)
153         rule=make_rule_number(x1,x2,y1,y2,z1,z2)
154         hacky_swap_node(pos,"technic:lv_cable"..rule)
155         end
156
157         pos1.x=pos1.x-2
158         if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
159         x1=1
160         x2=minetest.env:get_meta(pos1):get_float("x2")
161         y1=minetest.env:get_meta(pos1):get_float("y1")
162         y2=minetest.env:get_meta(pos1):get_float("y2")
163         z1=minetest.env:get_meta(pos1):get_float("z1")
164         z2=minetest.env:get_meta(pos1):get_float("z2")
165         rule=make_rule_number(x1,x2,y1,y2,z1,z2)
166         hacky_swap_node(pos1,"technic:lv_cable"..rule)
167         meta=minetest.env:get_meta(pos1)
168         meta:set_float("x1",x1)
169         meta=minetest.env:get_meta(pos)
170         x2=1
171         x1=minetest.env:get_meta(pos):get_float("x1")
172         y1=minetest.env:get_meta(pos):get_float("y1")
173         y2=minetest.env:get_meta(pos):get_float("y2")
174         z1=minetest.env:get_meta(pos):get_float("z1")
175         z2=minetest.env:get_meta(pos):get_float("z2")
176         meta:set_float("x2",x2)
177         rule=make_rule_number(x1,x2,y1,y2,z1,z2)
178         hacky_swap_node(pos,"technic:lv_cable"..rule)
179         end
180
181         pos1.x=pos1.x+1
182         
183         pos1.y=pos1.y+1
184         if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
185         y2=1
186         x1=minetest.env:get_meta(pos1):get_float("x1")
187         x2=minetest.env:get_meta(pos1):get_float("x2")
188         y1=minetest.env:get_meta(pos1):get_float("y1")
189         z1=minetest.env:get_meta(pos1):get_float("z1")
190         z2=minetest.env:get_meta(pos1):get_float("z2")
191         rule=make_rule_number(x1,x2,y1,y2,z1,z2)
192         hacky_swap_node(pos1,"technic:lv_cable"..rule)
193         meta=minetest.env:get_meta(pos1)
194         meta:set_float("y2",y2)
195         meta=minetest.env:get_meta(pos)
196         y1=1
197         x1=minetest.env:get_meta(pos):get_float("x1")
198         x2=minetest.env:get_meta(pos):get_float("x2")
199         y2=minetest.env:get_meta(pos):get_float("y2")
200         z1=minetest.env:get_meta(pos):get_float("z1")
201         z2=minetest.env:get_meta(pos):get_float("z2")
202         meta:set_float("y1",y1)
203         rule=make_rule_number(x1,x2,y1,y2,z1,z2)
204         hacky_swap_node(pos,"technic:lv_cable"..rule)
205         end
206         
207         if minetest.env:get_meta(pos1):get_float("technic_power_machine")==1 then
208         y1=1
209         x1=minetest.env:get_meta(pos):get_float("x1")
210         x2=minetest.env:get_meta(pos):get_float("x2")
211         y2=minetest.env:get_meta(pos):get_float("y2")
212         z1=minetest.env:get_meta(pos):get_float("z1")
213         z2=minetest.env:get_meta(pos):get_float("z2")
214         rule=make_rule_number(x1,x2,y1,y2,z1,z2)
215         hacky_swap_node(pos,"technic:lv_cable"..rule)
216         meta=minetest.env:get_meta(pos)
217         meta:set_float("y1",y1)
218         end
219
220
221         pos1.y=pos1.y-2
222         if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
223         y1=1
224         x1=minetest.env:get_meta(pos1):get_float("x1")
225         x2=minetest.env:get_meta(pos1):get_float("x2")
226         y2=minetest.env:get_meta(pos1):get_float("y2")
227         z1=minetest.env:get_meta(pos1):get_float("z1")
228         z2=minetest.env:get_meta(pos1):get_float("z2")
229         rule=make_rule_number(x1,x2,y1,y2,z1,z2)
230         hacky_swap_node(pos1,"technic:lv_cable"..rule)
231         meta=minetest.env:get_meta(pos1)
232         meta:set_float("y1",y1)
233         meta=minetest.env:get_meta(pos)
234         y2=1
235         x1=minetest.env:get_meta(pos):get_float("x1")
236         x2=minetest.env:get_meta(pos):get_float("x2")
237         y1=minetest.env:get_meta(pos):get_float("y1")
238         z1=minetest.env:get_meta(pos):get_float("z1")
239         z2=minetest.env:get_meta(pos):get_float("z2")
240         meta:set_float("y2",y2)
241         rule=make_rule_number(x1,x2,y1,y2,z1,z2)
242         hacky_swap_node(pos,"technic:lv_cable"..rule)
243         end
244         pos1.y=pos1.y+1
245
246         pos1.z=pos1.z+1
247         if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
248         z2=1
249         x1=minetest.env:get_meta(pos1):get_float("x1")
250         x2=minetest.env:get_meta(pos1):get_float("x2")
251         y1=minetest.env:get_meta(pos1):get_float("y1")
252         y2=minetest.env:get_meta(pos1):get_float("y2")
253         z1=minetest.env:get_meta(pos1):get_float("z1")
254         rule=make_rule_number(x1,x2,y1,y2,z1,z2)
255         hacky_swap_node(pos1,"technic:lv_cable"..rule)
256         meta=minetest.env:get_meta(pos1)
257         meta:set_float("z2",z2)
258         meta=minetest.env:get_meta(pos)
259         z1=1
260         x1=minetest.env:get_meta(pos):get_float("x1")
261         x2=minetest.env:get_meta(pos):get_float("x2")
262         y1=minetest.env:get_meta(pos):get_float("y1")
263         y2=minetest.env:get_meta(pos):get_float("y2")
264         z2=minetest.env:get_meta(pos):get_float("z2")
265         meta:set_float("z1",z1)
266         rule=make_rule_number(x1,x2,y1,y2,z1,z2)
267         hacky_swap_node(pos,"technic:lv_cable"..rule)
268         end
269         pos1.z=pos1.z-2
270         if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
271         z1=1
272         x1=minetest.env:get_meta(pos1):get_float("x1")
273         x2=minetest.env:get_meta(pos1):get_float("x2")
274         y1=minetest.env:get_meta(pos1):get_float("y1")
275         y2=minetest.env:get_meta(pos1):get_float("y2")
276         z2=minetest.env:get_meta(pos1):get_float("z2")
277         rule=make_rule_number(x1,x2,y1,y2,z1,z2)
278         hacky_swap_node(pos1,"technic:lv_cable"..rule)
279         meta=minetest.env:get_meta(pos1)
280         meta:set_float("z1",z1)
281         meta=minetest.env:get_meta(pos)
282         z2=1
283         x1=minetest.env:get_meta(pos):get_float("x1")
284         x2=minetest.env:get_meta(pos):get_float("x2")
285         y1=minetest.env:get_meta(pos):get_float("y1")
286         y2=minetest.env:get_meta(pos):get_float("y2")
287         z1=minetest.env:get_meta(pos):get_float("z1")
288         meta:set_float("z2",z2)
289         rule=make_rule_number(x1,x2,y1,y2,z1,z2)
290         hacky_swap_node(pos,"technic:lv_cable"..rule)
291         end
292         pos1.z=pos1.z+1
293 end    
294
295 function make_rule_number (x1,x2,y1,y2,z1,z2)
296 local temp= z2+z1*2+y2*4+y1*8+x2*16+x1*32
297 return temp
298 end
299
300 check_connections_on_destroy = function(pos)
301         local pos1={}
302         pos1.x=pos.x
303         pos1.y=pos.y
304         pos1.z=pos.z
305         
306         pos1.x=pos1.x+1
307         if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
308         x2=0
309         x1=minetest.env:get_meta(pos1):get_float("x1")
310         y1=minetest.env:get_meta(pos1):get_float("y1")
311         y2=minetest.env:get_meta(pos1):get_float("y2")
312         z1=minetest.env:get_meta(pos1):get_float("z1")
313         z2=minetest.env:get_meta(pos1):get_float("z2")
314         rule=make_rule_number(x1,x2,y1,y2,z1,z2)
315         if rule==0 then hacky_swap_node(pos1,"technic:lv_cable") end
316         if rule>0  then    hacky_swap_node(pos1,"technic:lv_cable"..rule) end
317         meta=minetest.env:get_meta(pos1)
318         meta:set_float("x2",x2)
319         end
320         
321         pos1.x=pos1.x-2
322         if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
323         x1=0
324         x2=minetest.env:get_meta(pos1):get_float("x2")
325         y1=minetest.env:get_meta(pos1):get_float("y1")
326         y2=minetest.env:get_meta(pos1):get_float("y2")
327         z1=minetest.env:get_meta(pos1):get_float("z1")
328         z2=minetest.env:get_meta(pos1):get_float("z2")
329         rule=make_rule_number(x1,x2,y1,y2,z1,z2)
330         if rule==0 then hacky_swap_node(pos1,"technic:lv_cable") end
331         if rule>0  then    hacky_swap_node(pos1,"technic:lv_cable"..rule) end
332         meta=minetest.env:get_meta(pos1)
333         meta:set_float("x1",x1)
334         end
335         pos1.x=pos1.x+1
336
337         pos1.y=pos1.y+1
338         if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
339         y2=0
340         x1=minetest.env:get_meta(pos1):get_float("x1")
341         x2=minetest.env:get_meta(pos1):get_float("x2")
342         y1=minetest.env:get_meta(pos1):get_float("y1")
343         z1=minetest.env:get_meta(pos1):get_float("z1")
344         z2=minetest.env:get_meta(pos1):get_float("z2")
345         rule=make_rule_number(x1,x2,y1,y2,z1,z2)
346         if rule==0 then hacky_swap_node(pos1,"technic:lv_cable") end
347         if rule>0  then    hacky_swap_node(pos1,"technic:lv_cable"..rule) end
348         meta=minetest.env:get_meta(pos1)
349         meta:set_float("y2",y2)
350         end
351         
352         pos1.y=pos1.y-2
353         if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
354         y1=0
355         x1=minetest.env:get_meta(pos1):get_float("x1")
356         x2=minetest.env:get_meta(pos1):get_float("x2")
357         y2=minetest.env:get_meta(pos1):get_float("y2")
358         z1=minetest.env:get_meta(pos1):get_float("z1")
359         z2=minetest.env:get_meta(pos1):get_float("z2")
360         rule=make_rule_number(x1,x2,y1,y2,z1,z2)
361         if rule==0 then hacky_swap_node(pos1,"technic:lv_cable") end
362         if rule>0  then    hacky_swap_node(pos1,"technic:lv_cable"..rule) end
363         meta=minetest.env:get_meta(pos1)
364         meta:set_float("y1",y1)
365         end
366         pos1.y=pos1.y+1
367
368         pos1.z=pos1.z+1
369         if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
370         z2=0
371         x1=minetest.env:get_meta(pos1):get_float("x1")
372         x2=minetest.env:get_meta(pos1):get_float("x2")
373         y1=minetest.env:get_meta(pos1):get_float("y1")
374         y2=minetest.env:get_meta(pos1):get_float("y2")
375         z1=minetest.env:get_meta(pos1):get_float("z1")
376         rule=make_rule_number(x1,x2,y1,y2,z1,z2)
377         if rule==0 then hacky_swap_node(pos1,"technic:lv_cable") end
378         if rule>0  then    hacky_swap_node(pos1,"technic:lv_cable"..rule) end
379         meta=minetest.env:get_meta(pos1)
380         meta:set_float("z2",z2)
381         end
382         
383         pos1.z=pos1.z-2
384         if minetest.env:get_meta(pos1):get_float("cablelike")==1 then
385         z1=0
386         x1=minetest.env:get_meta(pos1):get_float("x1")
387         x2=minetest.env:get_meta(pos1):get_float("x2")
388         y1=minetest.env:get_meta(pos1):get_float("y1")
389         y2=minetest.env:get_meta(pos1):get_float("y2")
390         z2=minetest.env:get_meta(pos1):get_float("z2")
391         rule=make_rule_number(x1,x2,y1,y2,z1,z2)
392         if rule==0 then hacky_swap_node(pos1,"technic:lv_cable") end
393         if rule>0  then    hacky_swap_node(pos1,"technic:lv_cable"..rule) end
394         meta=minetest.env:get_meta(pos1)
395         meta:set_float("z1",z1)
396         end
397         pos1.y=pos1.y+1
398         
399 end    
400