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).
This commit is contained in:
Fernando Carmona Varo
2016-09-11 09:55:33 +02:00
committed by paramat
부모 56d6eaed85
커밋 5b2a896180
2개의 변경된 파일15개의 추가작업 그리고 3개의 파일을 삭제

파일 보기

@@ -19,7 +19,6 @@ Bucket API
The bucket API allows registering new types of buckets for non-default liquids. The bucket API allows registering new types of buckets for non-default liquids.
bucket.register_liquid( bucket.register_liquid(
"default:lava_source", -- name of the source node "default:lava_source", -- name of the source node
"default:lava_flowing", -- name of the flowing 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. -- 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 Beds API
-------- --------

파일 보기

@@ -115,8 +115,11 @@ minetest.register_craftitem("bucket:bucket_empty", {
stack_max = 99, stack_max = 99,
liquids_pointable = true, liquids_pointable = true,
on_use = function(itemstack, user, pointed_thing) on_use = function(itemstack, user, pointed_thing)
-- Must be pointing to node if pointed_thing.type == "object" then
if pointed_thing.type ~= "node" 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 return
end end
-- Check if pointing to a liquid source -- Check if pointing to a liquid source
@@ -165,6 +168,13 @@ minetest.register_craftitem("bucket:bucket_empty", {
end end
return ItemStack(giving_back) 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
end, end,
}) })