Skip to content
Browse files

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 5b2a896180361db8adfcfad4c29bf0721e67ecb1
Showing with 15 additions and 3 deletions.
  1. +3 −1 game_api.txt
  2. +12 −2 mods/bucket/init.lua
@@ -19,7 +19,6 @@ Bucket API

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

"default:lava_source", -- name of the source node
"default:lava_flowing", -- name of the flowing node
@@ -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

@@ -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
-- Check if pointing to a liquid source
@@ -165,6 +168,13 @@ minetest.register_craftitem("bucket:bucket_empty", {

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

0 comments on commit 5b2a896

Please sign in to comment.