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 > -10033 then
181 minetest.add_node(pos_under,{name="main:lava"})
183 minetest.add_node(pos_under,{name="nether:lava"})
185 itemstack:replace(ItemStack("main:bucket"))
187 elseif buildable_above 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"))
197 on_secondary_use = function(itemstack, user, pointed_thing)
198 local pos = bucket_raycast(user)
204 local pos_under = pos.under
205 local pos_above = pos.above
207 local node_under = minetest.get_node(pos_under).name
208 local node_above = minetest.get_node(pos_above).name
210 local buildable_under = (minetest.registered_nodes[node_under].buildable_to == true)
211 local buildable_above = (minetest.registered_nodes[node_above].buildable_to == true)
214 if buildable_under == true then
215 minetest.set_node(pos_under,{name="main:lava"})
216 itemstack:replace(ItemStack("main:bucket"))
218 elseif buildable_above then
219 minetest.set_node(pos_above,{name="main:lava"})
220 itemstack:replace(ItemStack("main:bucket"))