2 BEFORE YOU ASK WHY ARE YOU DOING THIS!
4 It works better and doesn't block digging with a bucket through water
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)
14 local ray = minetest.raycast(pos, pos2, false, true)
16 for pointed_thing in ray do
18 return({under=pointed_thing.under,above=pointed_thing.above})
26 minetest.register_craftitem("main:bucket", {
27 description = "Bucket",
28 inventory_image = "bucket.png",
30 --wield_image = "bucket.png",
31 --liquids_pointable = true,
32 on_place = function(itemstack, placer, pointed_thing)
33 local pos = bucket_raycast(placer)
39 local pos_under = pos.under
41 local node = minetest.get_node(pos_under).name
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)
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)
55 on_secondary_use = function(itemstack, user, pointed_thing)
56 local pos = bucket_raycast(user)
60 local pos_under = pos.under
62 local node = minetest.get_node(pos_under).name
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)
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)
79 minetest.register_craftitem("main:bucket_water", {
80 description = "Bucket of Water",
81 inventory_image = "bucket_water.png",
83 --liquids_pointable = false,
84 on_place = function(itemstack, placer, pointed_thing)
85 local pos = bucket_raycast(placer)
91 local pos_under = pos.under
92 local pos_above = pos.above
94 local node_under = minetest.get_node(pos_under).name
95 local node_above = minetest.get_node(pos_above).name
97 local buildable_under = (minetest.registered_nodes[node_under].buildable_to == true)
98 local buildable_above = (minetest.registered_nodes[node_above].buildable_to == true)
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)
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)
114 on_secondary_use = function(itemstack, user, pointed_thing)
115 local pos = bucket_raycast(user)
121 local pos_under = pos.under
122 local pos_above = pos.above
124 local node_under = minetest.get_node(pos_under).name
125 local node_above = minetest.get_node(pos_above).name
127 local buildable_under = (minetest.registered_nodes[node_under].buildable_to == true)
128 local buildable_above = (minetest.registered_nodes[node_above].buildable_to == true)
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)
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)
146 minetest.register_craftitem("main:bucket_lava", {
147 description = "Bucket of Lava",
148 inventory_image = "bucket_lava.png",
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"))
159 local pos = bucket_raycast(placer)
165 local pos_under = pos.under
166 local pos_above = pos.above
168 local node_under = minetest.get_node(pos_under).name
169 local node_above = minetest.get_node(pos_above).name
171 local buildable_under = (minetest.registered_nodes[node_under].buildable_to == true)
172 local buildable_above = (minetest.registered_nodes[node_above].buildable_to == true)
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"})
180 minetest.add_node(pos_under,{name="nether:lava"})
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)
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"})
191 minetest.add_node(pos_above,{name="nether:lava"})
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)
199 on_secondary_use = function(itemstack, user, pointed_thing)
200 local pos = bucket_raycast(user)
206 local pos_under = pos.under
207 local pos_above = pos.above
209 local node_under = minetest.get_node(pos_under).name
210 local node_above = minetest.get_node(pos_above).name
212 local buildable_under = (minetest.registered_nodes[node_under].buildable_to == true)
213 local buildable_above = (minetest.registered_nodes[node_above].buildable_to == true)
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"})
221 minetest.add_node(pos_under,{name="nether:lava"})
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)
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"})
232 minetest.add_node(pos_above,{name="nether:lava"})
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)