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