Make empty buckets stackable
authortenplus1 <tenplus1@users.noreply.github.com>
Thu, 19 Feb 2015 20:26:30 +0000 (20:26 +0000)
committerBlockMen <nmuelll@web.de>
Sat, 28 Feb 2015 21:15:46 +0000 (22:15 +0100)
mods/bucket/init.lua

index 6715ebbfe3b7a25cd05dcc7d8f3c21b3950cbc7e..2bdb471450b3a00d10faa0245bbb6efb57458974 100644 (file)
@@ -103,31 +103,55 @@ function bucket.register_liquid(source, flowing, itemname, inventory_image, name
 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(