Skip to content

Commit

Permalink
Bucket: Add optional 'force-renew' bool to registration
Browse files Browse the repository at this point in the history
River water needs to be 'liquid_renewable = false' to avoid a mess caused by
spreading of sources, however picking it up with a bucket then creates
a hole in the river. Allow a 'force-renew' of the source node if it has a
source neighbour.
  • Loading branch information
paramat committed Oct 12, 2016
1 parent 78311a2 commit 7b30c26
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 4 deletions.
5 changes: 4 additions & 1 deletion game_api.txt
Expand Up @@ -26,7 +26,10 @@ The bucket API allows registering new types of buckets for non-default liquids.
"bucket:bucket_lava", -- name of the new bucket item (or nil if liquid is not takeable)
"bucket_lava.png", -- texture of the new bucket item (ignored if itemname == nil)
"Lava Bucket", -- text description of the bucket item
{lava_bucket = 1} -- groups of the bucket item, OPTIONAL
{lava_bucket = 1}, -- groups of the bucket item, OPTIONAL
false -- force-renew, OPTIONAL. Force the liquid source to renew if it has
-- a source neighbour, even if defined as 'liquid_renewable = false'.
-- Needed to avoid creating holes in sloping rivers.
)

Beds API
Expand Down
20 changes: 17 additions & 3 deletions mods/bucket/init.lua
Expand Up @@ -36,12 +36,17 @@ end
-- inventory_image = texture of the new bucket item (ignored if itemname == nil)
-- name = text description of the bucket item
-- groups = (optional) groups of the bucket item, for example {water_bucket = 1}
-- force_renew = (optional) bool. Force the liquid source to renew if it has a
-- source neighbour, even if defined as 'liquid_renewable = false'.
-- Needed to avoid creating holes in sloping rivers.
-- This function can be called from any mod (that depends on bucket).
function bucket.register_liquid(source, flowing, itemname, inventory_image, name, groups)
function bucket.register_liquid(source, flowing, itemname, inventory_image, name,
groups, force_renew)
bucket.liquids[source] = {
source = source,
flowing = flowing,
itemname = itemname,
force_renew = force_renew,
}
bucket.liquids[flowing] = bucket.liquids[source]

Expand Down Expand Up @@ -149,7 +154,15 @@ minetest.register_craftitem("bucket:bucket_empty", {

end

minetest.add_node(pointed_thing.under, {name="air"})
-- force_renew requires a source neighbour
local source_neighbor = false
if liquiddef.force_renew then
source_neighbor =
minetest.find_node_near(pointed_thing.under, 1, liquiddef.source)
end
if not (source_neighbor and liquiddef.force_renew) then
minetest.add_node(pointed_thing.under, {name = "air"})
end

return ItemStack(giving_back)
end
Expand All @@ -171,7 +184,8 @@ bucket.register_liquid(
"bucket:bucket_river_water",
"bucket_river_water.png",
"River Water Bucket",
{water_bucket = 1}
{water_bucket = 1},
true
)

bucket.register_liquid(
Expand Down

0 comments on commit 7b30c26

Please sign in to comment.