diff --git a/mods/bucket/init.lua b/mods/bucket/init.lua index 6715ebbf..177aaad6 100644 --- a/mods/bucket/init.lua +++ b/mods/bucket/init.lua @@ -105,7 +105,7 @@ end minetest.register_craftitem("bucket:bucket_empty", { description = "Empty Bucket", inventory_image = "bucket.png", - stack_max = 1, + stack_max = 99, liquids_pointable = true, on_use = function(itemstack, user, pointed_thing) -- Must be pointing to node @@ -115,17 +115,41 @@ minetest.register_craftitem("bucket:bucket_empty", { -- 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 + 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"}) - return ItemStack(liquiddef.itemname) + return ItemStack(giving_back) end end, })