end
minetest.register_craftitem("bucket:bucket_empty", {
- description = "Empty Bucket",
- inventory_image = "bucket.png",
- stack_max = 1,
- liquids_pointable = true,
- on_use = function(itemstack, user, pointed_thing)
- -- Must be pointing to node
- if pointed_thing.type ~= "node" then
- return
- end
- -- Check if pointing to a liquid source
- local node = minetest.get_node(pointed_thing.under)
- local liquiddef = bucket.liquids[node.name]
- if liquiddef ~= nil and liquiddef.itemname ~= nil and
- node.name == liquiddef.source then
- if check_protection(pointed_thing.under,
- user:get_player_name(),
- "take ".. node.name) then
- return
- end
+ description = "Empty Bucket",
+ inventory_image = "bucket.png",
+ stack_max = 99,
+ liquids_pointable = true,
+ on_use = function(itemstack, user, pointed_thing)
+ -- Must be pointing to node
+ if pointed_thing.type ~= "node" then
+ return
+ end
+ -- Check if pointing to a liquid source
+ local node = minetest.get_node(pointed_thing.under)
+ local liquiddef = bucket.liquids[node.name]
+ local item_count = user:get_wielded_item():get_count()
+
+ if liquiddef ~= nil
+ and liquiddef.itemname ~= nil
+ and node.name == liquiddef.source then
+ if check_protection(pointed_thing.under,
+ user:get_player_name(),
+ "take ".. node.name) then
+ return
+ end
+
+ -- default set to return filled bucket
+ local giving_back = liquiddef.itemname
+
+ -- check if holding more than 1 empty bucket
+ if item_count > 1 then
+
+ -- if space in inventory add filled bucked, otherwise drop as item
+ local inv = user:get_inventory()
+ if inv:room_for_item("main", {name=liquiddef.itemname}) then
+ inv:add_item("main", liquiddef.itemname)
+ else
+ local pos = user:getpos()
+ pos.y = math.floor(pos.y + 0.5)
+ core.add_item(pos, liquiddef.itemname)
+ end
+
+ -- set to return empty buckets minus 1
+ giving_back = "bucket:bucket_empty "..tostring(item_count-1)
+
+ end
- minetest.add_node(pointed_thing.under, {name="air"})
+ minetest.add_node(pointed_thing.under, {name="air"})
- return ItemStack(liquiddef.itemname)
- end
- end,
+ return ItemStack(giving_back)
+ end
+ end,
})
bucket.register_liquid(