]> git.lizzy.rs Git - Crafter.git/blob - mods/flow_lib/init.lua
Add in hybriddog's flow logic
[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                 print("return initial")
35                 return nil
36         end
37         data = get_nodes(pos)
38         param2 = minetest.get_node(pos).param2
39         if param2 > 7 then
40                 print("return 0")
41                 return nil
42         end
43         if c_node == "main:water" then
44                 for _,i in pairs(data) do
45                         nd = i[2]
46                         name = nd.name
47                         par2 = nd.param2
48                         if name == "main:waterflow" and par2 == 7 then
49                                 return(vector.subtract(i[1],pos))
50                         end
51                 end
52         end
53         for _,i in pairs(data) do
54                 nd = i[2]
55                 name = nd.name
56                 par2 = nd.param2
57                 if name == "main:waterflow" and par2 < param2 then
58                         print("return 1")
59                         return(vector.subtract(i[1],pos))
60                 end
61         end
62         for _,i in pairs(data) do
63                 nd = i[2]
64                 name = nd.name
65                 par2 = nd.param2
66                 if name == "main:waterflow" and par2 >= 11 then
67                         print("return 2")
68                         return(vector.subtract(i[1],pos))
69                 end
70         end
71         for _,i in pairs(data) do
72                 nd = i[2]
73                 name = nd.name
74                 par2 = nd.param2
75                 tmp = minetest.registered_nodes[name]
76                 if tmp and not tmp.walkable and name ~= "main:waterflow" and name ~= "main:water" then
77                         print("return 3")
78                         return(vector.subtract(i[1],pos))
79                 end
80         end
81
82         return nil
83 end
84
85 function flow(self,pos)
86         return(get_flowing_dir(pos))
87 end