]> git.lizzy.rs Git - Crafter.git/blob - mods/main/bucket.lua
Lava and Fire no longer work in the Aether
[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                 --do the sucking water out of farmland thing first
34                 if pointed_thing.under and minetest.get_node(pointed_thing.under).name == "farming:farmland_wet" then
35                         minetest.set_node(pointed_thing.under,{name="farming:farmland_dry"})
36                         itemstack:replace(ItemStack("main:bucket_water"))
37                         return(itemstack)
38                 end
39                 
40                 
41                 local pos = bucket_raycast(placer)
42                 
43                 if not pos then
44                         return
45                 end
46                 
47                 local pos_under = pos.under
48                 
49                 local node = minetest.get_node(pos_under).name
50         
51                 if node == "main:water" then
52                         itemstack:replace(ItemStack("main:bucket_water"))
53                         minetest.remove_node(pos_under)
54                         return(itemstack)
55                 elseif node == "main:lava" or node == "nether:lava" then
56                         itemstack:replace(ItemStack("main:bucket_lava"))
57                         minetest.remove_node(pos_under)
58                         return(itemstack)
59                 end
60         end,
61         on_secondary_use = function(itemstack, user, pointed_thing)
62                 local pos = bucket_raycast(user)
63                 if not pos then
64                         return
65                 end
66                 local pos_under = pos.under
67                 
68                 local node = minetest.get_node(pos_under).name
69                 
70                 if node == "main:water" then
71                         itemstack:replace(ItemStack("main:bucket_water"))
72                         minetest.remove_node(pos_under)
73                         return(itemstack)
74                 elseif node == "main:lava" or node == "nether:lava" then
75                         itemstack:replace(ItemStack("main:bucket_lava"))
76                         minetest.remove_node(pos_under)
77                         return(itemstack)
78                 end
79         end,
80 })
81
82
83 minetest.register_craftitem("main:bucket_water", {
84         description = "Bucket of Water",
85         inventory_image = "bucket_water.png",
86         stack_max = 1,
87         --liquids_pointable = false,
88         on_place = function(itemstack, placer, pointed_thing)
89                 if pointed_thing.under and minetest.get_node(pointed_thing.under).name == "farming:farmland_dry" then
90                         minetest.set_node(pointed_thing.under,{name="farming:farmland_wet"})
91                         itemstack:replace(ItemStack("main:bucket"))
92                         return(itemstack)
93                 end
94                 local pos = bucket_raycast(placer)
95                 
96                 if not pos then
97                         return
98                 end
99                 
100                 local pos_under = pos.under
101                 local pos_above = pos.above
102                 
103                 local node_under = minetest.get_node(pos_under).name
104                 local node_above = minetest.get_node(pos_above).name
105                 
106                 local buildable_under = (minetest.registered_nodes[node_under].buildable_to == true)
107                 local buildable_above = (minetest.registered_nodes[node_above].buildable_to == true)
108                 
109                 --set it to water
110                 if buildable_under == true then
111                         minetest.set_node(pos_under,{name="main:water"})
112                         itemstack:replace(ItemStack("main:bucket"))
113                         return(itemstack)
114                 elseif buildable_above then
115                         minetest.set_node(pos_above,{name="main:water"})
116                         itemstack:replace(ItemStack("main:bucket"))
117                         return(itemstack)
118                 end
119         end,
120         on_secondary_use = function(itemstack, user, pointed_thing)
121                 local pos = bucket_raycast(user)
122                 
123                 if not pos then
124                         return
125                 end
126                 
127                 local pos_under = pos.under
128                 local pos_above = pos.above
129                 
130                 local node_under = minetest.get_node(pos_under).name
131                 local node_above = minetest.get_node(pos_above).name
132                 
133                 local buildable_under = (minetest.registered_nodes[node_under].buildable_to == true)
134                 local buildable_above = (minetest.registered_nodes[node_above].buildable_to == true)
135                 
136                 --set it to water
137                 if buildable_under == true then
138                         minetest.add_node(pos_under,{name="main:water"})
139                         itemstack:replace(ItemStack("main:bucket"))
140                         return(itemstack)
141                 elseif buildable_above then
142                         minetest.add_node(pos_above,{name="main:water"})
143                         itemstack:replace(ItemStack("main:bucket"))
144                         return(itemstack)
145                 end
146         end,
147 })
148
149
150 minetest.register_craftitem("main:bucket_lava", {
151         description = "Bucket of Lava",
152         inventory_image = "bucket_lava.png",
153         stack_max = 1,
154         --liquids_pointable = false,
155         on_place = function(itemstack, placer, pointed_thing)
156                 if pointed_thing.under and minetest.get_node(pointed_thing.under).name == "tnt:tnt" then
157                         minetest.remove_node(pointed_thing.under)
158                         tnt(pointed_thing.under,7)
159                         itemstack:replace(ItemStack("main:bucket"))
160                         return(itemstack)
161                 end
162                 
163                 local pos = bucket_raycast(placer)
164                 
165                 if not pos then
166                         return
167                 end
168                 
169                 local pos_under = pos.under
170                 local pos_above = pos.above
171                 
172                 local node_under = minetest.get_node(pos_under).name
173                 local node_above = minetest.get_node(pos_above).name
174                 
175                 local buildable_under = (minetest.registered_nodes[node_under].buildable_to == true)
176                 local buildable_above = (minetest.registered_nodes[node_above].buildable_to == true)
177                 
178                 --set it to lava
179                 if buildable_under == true then
180                         if pos_under.y < 20000 then
181                                 if pos_under.y > -10033 then
182                                         minetest.add_node(pos_under,{name="main:lava"})
183                                 else
184                                         minetest.add_node(pos_under,{name="nether:lava"})
185                                 end
186                                 itemstack:replace(ItemStack("main:bucket"))
187                                 return(itemstack)
188                         end
189                 elseif buildable_above then
190                         if pos_above.y < 20000 then
191                                 if pos_above.y > -10033 then
192                                         minetest.add_node(pos_above,{name="main:lava"})
193                                 else
194                                         minetest.add_node(pos_above,{name="nether:lava"})
195                                 end
196                                 itemstack:replace(ItemStack("main:bucket"))
197                                 return(itemstack)
198                         end
199                 end
200         end,
201         on_secondary_use = function(itemstack, user, pointed_thing)
202                 local pos = bucket_raycast(user)
203                 
204                 if not pos then
205                         return
206                 end
207                 
208                 local pos_under = pos.under
209                 local pos_above = pos.above
210                 
211                 local node_under = minetest.get_node(pos_under).name
212                 local node_above = minetest.get_node(pos_above).name
213                 
214                 local buildable_under = (minetest.registered_nodes[node_under].buildable_to == true)
215                 local buildable_above = (minetest.registered_nodes[node_above].buildable_to == true)
216                 
217                 --set it to lava
218                 if buildable_under == true then
219                         if pos_under.y < 20000 then
220                                 if pos_under.y > -10033 then
221                                         minetest.add_node(pos_under,{name="main:lava"})
222                                 else
223                                         minetest.add_node(pos_under,{name="nether:lava"})
224                                 end
225                                 itemstack:replace(ItemStack("main:bucket"))
226                                 return(itemstack)
227                         end
228                 elseif buildable_above then
229                         if pos_above.y < 20000 then
230                                 if pos_above.y > -10033 then
231                                         minetest.add_node(pos_above,{name="main:lava"})
232                                 else
233                                         minetest.add_node(pos_above,{name="nether:lava"})
234                                 end
235                                 itemstack:replace(ItemStack("main:bucket"))
236                                 return(itemstack)
237                         end
238                 end
239         end,
240 })