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)
47 elseif node == "main:lava" or node == "nether:lava" then
48 itemstack:replace(ItemStack("main:bucket_lava"))
49 minetest.remove_node(pos_under)
53 on_secondary_use = function(itemstack, user, pointed_thing)
54 local pos = bucket_raycast(user)
58 local pos_under = pos.under
60 local node = minetest.get_node(pos_under).name
62 if node == "main:water" then
63 itemstack:replace(ItemStack("main:bucket_water"))
64 minetest.remove_node(pos_under)
66 elseif node == "main:lava" or node == "nether:lava" then
67 itemstack:replace(ItemStack("main:bucket_lava"))
68 minetest.remove_node(pos_under)
75 minetest.register_craftitem("main:bucket_water", {
76 description = "Bucket of Water",
77 inventory_image = "bucket_water.png",
79 --liquids_pointable = false,
80 on_place = function(itemstack, placer, pointed_thing)
81 local pos = bucket_raycast(placer)
87 local pos_under = pos.under
88 local pos_above = pos.above
90 local node_under = minetest.get_node(pos_under).name
91 local node_above = minetest.get_node(pos_above).name
93 local buildable_under = (minetest.registered_nodes[node_under].buildable_to == true)
94 local buildable_above = (minetest.registered_nodes[node_above].buildable_to == true)
97 if buildable_under == true then
98 minetest.set_node(pos_under,{name="main:water"})
99 itemstack:replace(ItemStack("main:bucket"))
101 elseif buildable_above then
102 minetest.set_node(pos_above,{name="main:water"})
103 itemstack:replace(ItemStack("main:bucket"))
107 on_secondary_use = function(itemstack, user, pointed_thing)
108 local pos = bucket_raycast(user)
114 local pos_under = pos.under
115 local pos_above = pos.above
117 local node_under = minetest.get_node(pos_under).name
118 local node_above = minetest.get_node(pos_above).name
120 local buildable_under = (minetest.registered_nodes[node_under].buildable_to == true)
121 local buildable_above = (minetest.registered_nodes[node_above].buildable_to == true)
124 if buildable_under == true then
125 minetest.add_node(pos_under,{name="main:water"})
126 itemstack:replace(ItemStack("main:bucket"))
128 elseif buildable_above then
129 minetest.add_node(pos_above,{name="main:water"})
130 itemstack:replace(ItemStack("main:bucket"))
137 minetest.register_craftitem("main:bucket_lava", {
138 description = "Bucket of Lava",
139 inventory_image = "bucket_lava.png",
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"))
150 local pos = bucket_raycast(placer)
156 local pos_under = pos.under
157 local pos_above = pos.above
159 local node_under = minetest.get_node(pos_under).name
160 local node_above = minetest.get_node(pos_above).name
162 local buildable_under = (minetest.registered_nodes[node_under].buildable_to == true)
163 local buildable_above = (minetest.registered_nodes[node_above].buildable_to == true)
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"})
171 minetest.add_node(pos_under,{name="nether:lava"})
173 itemstack:replace(ItemStack("main:bucket"))
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"})
181 minetest.add_node(pos_above,{name="nether:lava"})
183 itemstack:replace(ItemStack("main:bucket"))
188 on_secondary_use = function(itemstack, user, pointed_thing)
189 local pos = bucket_raycast(user)
195 local pos_under = pos.under
196 local pos_above = pos.above
198 local node_under = minetest.get_node(pos_under).name
199 local node_above = minetest.get_node(pos_above).name
201 local buildable_under = (minetest.registered_nodes[node_under].buildable_to == true)
202 local buildable_above = (minetest.registered_nodes[node_above].buildable_to == true)
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"})
210 minetest.add_node(pos_under,{name="nether:lava"})
212 itemstack:replace(ItemStack("main:bucket"))
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"})
220 minetest.add_node(pos_above,{name="nether:lava"})
222 itemstack:replace(ItemStack("main:bucket"))