Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Bucket: Allow buckets to trigger the on_punch of entities and nodes
The purpose of this is to allow mods to be able to interact (e.g. fill up)
an empty bucket when it is used to punch a node that's not a liquid source
or when punching a custom entity (e.g. milking a cow).
  • Loading branch information
Ferk authored and paramat committed Nov 2, 2016
1 parent 56d6eae commit 5b2a896
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 3 deletions.
4 changes: 3 additions & 1 deletion game_api.txt
Expand Up @@ -19,7 +19,6 @@ Bucket API

The bucket API allows registering new types of buckets for non-default liquids.


bucket.register_liquid(
"default:lava_source", -- name of the source node
"default:lava_flowing", -- name of the flowing node
Expand All @@ -32,6 +31,9 @@ The bucket API allows registering new types of buckets for non-default liquids.
-- Needed to avoid creating holes in sloping rivers.
)

The filled bucket item is returned to the player that uses an empty bucket pointing to the given liquid source.
When punching with an empty bucket pointing to an entity or a non-liquid node, the on_punch of the entity or node will be triggered.

Beds API
--------

Expand Down
14 changes: 12 additions & 2 deletions mods/bucket/init.lua
Expand Up @@ -115,8 +115,11 @@ minetest.register_craftitem("bucket:bucket_empty", {
stack_max = 99,
liquids_pointable = true,
on_use = function(itemstack, user, pointed_thing)
-- Must be pointing to node
if pointed_thing.type ~= "node" then
if pointed_thing.type == "object" then
pointed_thing.ref:punch(user, 1.0, { full_punch_interval=1.0 }, nil)
return user:get_wielded_item()
elseif pointed_thing.type ~= "node" then
-- do nothing if it's neither object nor node
return
end
-- Check if pointing to a liquid source
Expand Down Expand Up @@ -165,6 +168,13 @@ minetest.register_craftitem("bucket:bucket_empty", {
end

return ItemStack(giving_back)
else
-- non-liquid nodes will have their on_punch triggered
local node_def = minetest.registered_nodes[node.name]
if node_def then
node_def.on_punch(pointed_thing.under, node, user, pointed_thing)
end
return user:get_wielded_item()
end
end,
})
Expand Down

0 comments on commit 5b2a896

Please sign in to comment.