]> git.lizzy.rs Git - Crafter.git/blob - mods/main/bucket.lua
76c1c6edffef91ce4344cc9078b37be4b7a0b31e
[Crafter.git] / mods / main / bucket.lua
1 --[[
2 BEFORE YOU ASK WHY ARE YOU DOING THIS!
3
4 It works better and doesn't block digging with a bucket through water
5 ]]--
6
7 local function bucket_raycast(user,type)
8         local pos = user:get_pos()
9         pos.y = pos.y + user:get_properties().eye_height
10         local look_dir = user:get_look_dir()
11         look_dir = vector.multiply(look_dir,4)
12         local pos2 = vector.add(pos,look_dir)
13         
14         local ray = minetest.raycast(pos, pos2, false, true)            
15         if ray then
16                 for pointed_thing in ray do
17                         if pointed_thing then
18                                 return({under=pointed_thing.under,above=pointed_thing.above})
19                         end
20                 end
21         end
22         return(nil)
23 end
24
25 -- Item definitions
26 minetest.register_craftitem("main:bucket", {
27         description = "Bucket",
28         inventory_image = "bucket.png",
29         stack_max = 1,
30         --wield_image = "bucket.png",
31         --liquids_pointable = true,
32         on_place = function(itemstack, placer, pointed_thing)           
33                 local pos = bucket_raycast(placer)
34                 
35                 if not pos then
36                         return
37                 end
38                 
39                 local pos_under = pos.under
40                 
41                 local node = minetest.get_node(pos_under).name
42         
43                 if node == "main:water" then
44                         itemstack:replace(ItemStack("main:bucket_water"))
45                         minetest.remove_node(pos_under)
46                         return(itemstack)
47                 elseif node == "main:lava" or node == "nether:lava" then
48                         itemstack:replace(ItemStack("main:bucket_lava"))
49                         minetest.remove_node(pos_under)
50                         return(itemstack)
51                 end
52         end,
53         on_secondary_use = function(itemstack, user, pointed_thing)
54                 local pos = bucket_raycast(user)
55                 if not pos then
56                         return
57                 end
58                 local pos_under = pos.under
59                 
60                 local node = minetest.get_node(pos_under).name
61                 
62                 if node == "main:water" then
63                         itemstack:replace(ItemStack("main:bucket_water"))
64                         minetest.remove_node(pos_under)
65                         return(itemstack)
66                 elseif node == "main:lava" or node == "nether:lava" then
67                         itemstack:replace(ItemStack("main:bucket_lava"))
68                         minetest.remove_node(pos_under)
69                         return(itemstack)
70                 end
71         end,
72 })
73
74
75 minetest.register_craftitem("main:bucket_water", {
76         description = "Bucket of Water",
77         inventory_image = "bucket_water.png",
78         stack_max = 1,
79         --liquids_pointable = false,
80         on_place = function(itemstack, placer, pointed_thing)
81                 local pos = bucket_raycast(placer)
82                 
83                 if not pos then
84                         return
85                 end
86                 
87                 local pos_under = pos.under
88                 local pos_above = pos.above
89                 
90                 local node_under = minetest.get_node(pos_under).name
91                 local node_above = minetest.get_node(pos_above).name
92                 
93                 local buildable_under = (minetest.registered_nodes[node_under].buildable_to == true)
94                 local buildable_above = (minetest.registered_nodes[node_above].buildable_to == true)
95                 
96                 --set it to water
97                 if buildable_under == true then
98                         minetest.set_node(pos_under,{name="main:water"})
99                         itemstack:replace(ItemStack("main:bucket"))
100                         return(itemstack)
101                 elseif buildable_above then
102                         minetest.set_node(pos_above,{name="main:water"})
103                         itemstack:replace(ItemStack("main:bucket"))
104                         return(itemstack)
105                 end
106         end,
107         on_secondary_use = function(itemstack, user, pointed_thing)
108                 local pos = bucket_raycast(user)
109                 
110                 if not pos then
111                         return
112                 end
113                 
114                 local pos_under = pos.under
115                 local pos_above = pos.above
116                 
117                 local node_under = minetest.get_node(pos_under).name
118                 local node_above = minetest.get_node(pos_above).name
119                 
120                 local buildable_under = (minetest.registered_nodes[node_under].buildable_to == true)
121                 local buildable_above = (minetest.registered_nodes[node_above].buildable_to == true)
122                 
123                 --set it to water
124                 if buildable_under == true then
125                         minetest.add_node(pos_under,{name="main:water"})
126                         itemstack:replace(ItemStack("main:bucket"))
127                         return(itemstack)
128                 elseif buildable_above then
129                         minetest.add_node(pos_above,{name="main:water"})
130                         itemstack:replace(ItemStack("main:bucket"))
131                         return(itemstack)
132                 end
133         end,
134 })
135
136
137 minetest.register_craftitem("main:bucket_lava", {
138         description = "Bucket of Lava",
139         inventory_image = "bucket_lava.png",
140         stack_max = 1,
141         --liquids_pointable = false,
142         on_place = function(itemstack, placer, pointed_thing)
143                 if pointed_thing.under and minetest.get_node(pointed_thing.under).name == "tnt:tnt" then
144                         minetest.remove_node(pointed_thing.under)
145                         tnt(pointed_thing.under,7)
146                         itemstack:replace(ItemStack("main:bucket"))
147                         return(itemstack)
148                 end
149                 
150                 local pos = bucket_raycast(placer)
151                 
152                 if not pos then
153                         return
154                 end
155                 
156                 local pos_under = pos.under
157                 local pos_above = pos.above
158                 
159                 local node_under = minetest.get_node(pos_under).name
160                 local node_above = minetest.get_node(pos_above).name
161                 
162                 local buildable_under = (minetest.registered_nodes[node_under].buildable_to == true)
163                 local buildable_above = (minetest.registered_nodes[node_above].buildable_to == true)
164                 
165                 --set it to lava
166                 if buildable_under == true then
167                         if pos_under.y < 20000 then
168                                 if pos_under.y > -10033 then
169                                         minetest.add_node(pos_under,{name="main:lava"})
170                                 else
171                                         minetest.add_node(pos_under,{name="nether:lava"})
172                                 end
173                                 itemstack:replace(ItemStack("main:bucket"))
174                                 return(itemstack)
175                         end
176                 elseif buildable_above then
177                         if pos_above.y < 20000 then
178                                 if pos_above.y > -10033 then
179                                         minetest.add_node(pos_above,{name="main:lava"})
180                                 else
181                                         minetest.add_node(pos_above,{name="nether:lava"})
182                                 end
183                                 itemstack:replace(ItemStack("main:bucket"))
184                                 return(itemstack)
185                         end
186                 end
187         end,
188         on_secondary_use = function(itemstack, user, pointed_thing)
189                 local pos = bucket_raycast(user)
190                 
191                 if not pos then
192                         return
193                 end
194                 
195                 local pos_under = pos.under
196                 local pos_above = pos.above
197                 
198                 local node_under = minetest.get_node(pos_under).name
199                 local node_above = minetest.get_node(pos_above).name
200                 
201                 local buildable_under = (minetest.registered_nodes[node_under].buildable_to == true)
202                 local buildable_above = (minetest.registered_nodes[node_above].buildable_to == true)
203                 
204                 --set it to lava
205                 if buildable_under == true then
206                         if pos_under.y < 20000 then
207                                 if pos_under.y > -10033 then
208                                         minetest.add_node(pos_under,{name="main:lava"})
209                                 else
210                                         minetest.add_node(pos_under,{name="nether:lava"})
211                                 end
212                                 itemstack:replace(ItemStack("main:bucket"))
213                                 return(itemstack)
214                         end
215                 elseif buildable_above then
216                         if pos_above.y < 20000 then
217                                 if pos_above.y > -10033 then
218                                         minetest.add_node(pos_above,{name="main:lava"})
219                                 else
220                                         minetest.add_node(pos_above,{name="nether:lava"})
221                                 end
222                                 itemstack:replace(ItemStack("main:bucket"))
223                                 return(itemstack)
224                         end
225                 end
226         end,
227 })