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 --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"))
41 local pos = bucket_raycast(placer)
47 local pos_under = pos.under
49 local node = minetest.get_node(pos_under).name
51 if node == "main:water" then
52 itemstack:replace(ItemStack("main:bucket_water"))
53 minetest.remove_node(pos_under)
55 elseif node == "main:lava" or node == "nether:lava" then
56 itemstack:replace(ItemStack("main:bucket_lava"))
57 minetest.remove_node(pos_under)
61 on_secondary_use = function(itemstack, user, pointed_thing)
62 local pos = bucket_raycast(user)
66 local pos_under = pos.under
68 local node = minetest.get_node(pos_under).name
70 if node == "main:water" then
71 itemstack:replace(ItemStack("main:bucket_water"))
72 minetest.remove_node(pos_under)
74 elseif node == "main:lava" or node == "nether:lava" then
75 itemstack:replace(ItemStack("main:bucket_lava"))
76 minetest.remove_node(pos_under)
83 minetest.register_craftitem("main:bucket_water", {
84 description = "Bucket of Water",
85 inventory_image = "bucket_water.png",
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"))
94 local pos = bucket_raycast(placer)
100 local pos_under = pos.under
101 local pos_above = pos.above
103 local node_under = minetest.get_node(pos_under).name
104 local node_above = minetest.get_node(pos_above).name
106 local buildable_under = (minetest.registered_nodes[node_under].buildable_to == true)
107 local buildable_above = (minetest.registered_nodes[node_above].buildable_to == true)
110 if buildable_under == true then
111 minetest.set_node(pos_under,{name="main:water"})
112 itemstack:replace(ItemStack("main:bucket"))
114 elseif buildable_above then
115 minetest.set_node(pos_above,{name="main:water"})
116 itemstack:replace(ItemStack("main:bucket"))
120 on_secondary_use = function(itemstack, user, pointed_thing)
121 local pos = bucket_raycast(user)
127 local pos_under = pos.under
128 local pos_above = pos.above
130 local node_under = minetest.get_node(pos_under).name
131 local node_above = minetest.get_node(pos_above).name
133 local buildable_under = (minetest.registered_nodes[node_under].buildable_to == true)
134 local buildable_above = (minetest.registered_nodes[node_above].buildable_to == true)
137 if buildable_under == true then
138 minetest.add_node(pos_under,{name="main:water"})
139 itemstack:replace(ItemStack("main:bucket"))
141 elseif buildable_above then
142 minetest.add_node(pos_above,{name="main:water"})
143 itemstack:replace(ItemStack("main:bucket"))
150 minetest.register_craftitem("main:bucket_lava", {
151 description = "Bucket of Lava",
152 inventory_image = "bucket_lava.png",
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"))
163 local pos = bucket_raycast(placer)
169 local pos_under = pos.under
170 local pos_above = pos.above
172 local node_under = minetest.get_node(pos_under).name
173 local node_above = minetest.get_node(pos_above).name
175 local buildable_under = (minetest.registered_nodes[node_under].buildable_to == true)
176 local buildable_above = (minetest.registered_nodes[node_above].buildable_to == true)
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"})
184 minetest.add_node(pos_under,{name="nether:lava"})
186 itemstack:replace(ItemStack("main:bucket"))
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"})
194 minetest.add_node(pos_above,{name="nether:lava"})
196 itemstack:replace(ItemStack("main:bucket"))
201 on_secondary_use = function(itemstack, user, pointed_thing)
202 local pos = bucket_raycast(user)
208 local pos_under = pos.under
209 local pos_above = pos.above
211 local node_under = minetest.get_node(pos_under).name
212 local node_above = minetest.get_node(pos_above).name
214 local buildable_under = (minetest.registered_nodes[node_under].buildable_to == true)
215 local buildable_above = (minetest.registered_nodes[node_above].buildable_to == true)
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"})
223 minetest.add_node(pos_under,{name="nether:lava"})
225 itemstack:replace(ItemStack("main:bucket"))
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"})
233 minetest.add_node(pos_above,{name="nether:lava"})
235 itemstack:replace(ItemStack("main:bucket"))