]> git.lizzy.rs Git - Crafter.git/blob - mods/flow_lib/init.lua
3baee48bb959e2243cd1617481dce6405db2f07c
[Crafter.git] / mods / flow_lib / init.lua
1 --this is from https://github.com/HybridDog/builtin_item/blob/e6dfd9dce86503b3cbd1474257eca5f6f6ca71c2/init.lua#L50
2 local
3 minetest,vector,math,pairs
4 =
5 minetest,vector,math,pairs
6
7 local tab
8 local n
9 local function get_nodes(pos)
10         tab,n = {},1
11         for i = -1,1,2 do
12                 for _,p in pairs({
13                         {x=pos.x+i, y=pos.y, z=pos.z},
14                         {x=pos.x, y=pos.y, z=pos.z+i}
15                 }) do
16                         tab[n] = {p, minetest.get_node(p)}
17                         n = n+1
18                 end
19         end
20         return tab
21 end
22
23
24 local data
25 local param2
26 local nd
27 local par2
28 local name
29 local tmp
30 local c_node
31 local function get_flowing_dir(pos)
32         c_node = minetest.get_node(pos).name
33         if c_node ~= "main:waterflow" and c_node ~= "main:water" then
34                 return nil
35         end
36         data = get_nodes(pos)
37         param2 = minetest.get_node(pos).param2
38         if param2 > 7 then
39                 return nil
40         end
41         if c_node == "main:water" then
42                 for _,i in pairs(data) do
43                         nd = i[2]
44                         name = nd.name
45                         par2 = nd.param2
46                         if name == "main:waterflow" and par2 == 7 then
47                                 return(vector.subtract(i[1],pos))
48                         end
49                 end
50         end
51         for _,i in pairs(data) do
52                 nd = i[2]
53                 name = nd.name
54                 par2 = nd.param2
55                 if name == "main:waterflow" and par2 < param2 then
56                         return(vector.subtract(i[1],pos))
57                 end
58         end
59         for _,i in pairs(data) do
60                 nd = i[2]
61                 name = nd.name
62                 par2 = nd.param2
63                 if name == "main:waterflow" and par2 >= 11 then
64                         return(vector.subtract(i[1],pos))
65                 end
66         end
67         for _,i in pairs(data) do
68                 nd = i[2]
69                 name = nd.name
70                 par2 = nd.param2
71                 tmp = minetest.registered_nodes[name]
72                 if tmp and not tmp.walkable and name ~= "main:waterflow" and name ~= "main:water" then
73                         return(vector.subtract(i[1],pos))
74                 end
75         end
76
77         return nil
78 end
79
80 function flow(pos)
81         return(get_flowing_dir(pos))
82 end