Bucket: Correct liquid placing in protected areas

- Placing liquid inside a protected area no longer returns an empty bucket
- Remove on_place function, tidy up code, return proper itemstack
- Shorten code (changes from HybridDog/patch-35)
This commit is contained in:
tenplus1 2016-07-01 17:45:24 +02:00 committed by paramat
parent 80d49095f5
commit 21b457c9e1

View File

@ -52,6 +52,7 @@ function bucket.register_liquid(source, flowing, itemname, inventory_image, name
stack_max = 1, stack_max = 1,
liquids_pointable = true, liquids_pointable = true,
groups = groups, groups = groups,
on_place = function(itemstack, user, pointed_thing) on_place = function(itemstack, user, pointed_thing)
-- Must be pointing to node -- Must be pointing to node
if pointed_thing.type ~= "node" then if pointed_thing.type ~= "node" then
@ -59,47 +60,49 @@ function bucket.register_liquid(source, flowing, itemname, inventory_image, name
end end
local node = minetest.get_node_or_nil(pointed_thing.under) local node = minetest.get_node_or_nil(pointed_thing.under)
local ndef if not node then
if node then return
ndef = minetest.registered_nodes[node.name]
end end
local ndef = minetest.registered_nodes[node.name]
if not ndef then
return
end
-- Call on_rightclick if the pointed node defines it -- Call on_rightclick if the pointed node defines it
if ndef and ndef.on_rightclick and if ndef.on_rightclick and
user and not user:get_player_control().sneak then user and not user:get_player_control().sneak then
return ndef.on_rightclick( return ndef.on_rightclick(
pointed_thing.under, pointed_thing.under,
node, user, node, user,
itemstack) or itemstack itemstack)
end end
local place_liquid = function(pos, node, source, flowing) local lpos
if check_protection(pos,
user and user:get_player_name() or "",
"place "..source) then
return
end
minetest.add_node(pos, {name=source})
end
-- Check if pointing to a buildable node -- Check if pointing to a buildable node
if ndef and ndef.buildable_to then if ndef.buildable_to then
-- buildable; replace the node -- buildable; replace the node
place_liquid(pointed_thing.under, node, lpos = pointed_thing.under
source, flowing)
else else
-- not buildable to; place the liquid above -- not buildable to; place the liquid above
-- check if the node above can be replaced -- check if the node above can be replaced
local node = minetest.get_node_or_nil(pointed_thing.above) lpos = pointed_thing.above
if node and minetest.registered_nodes[node.name].buildable_to then local node = minetest.get_node_or_nil(lpos)
place_liquid(pointed_thing.above, if not node
node, source, or not minetest.registered_nodes[node.name].buildable_to then
flowing)
else
-- do not remove the bucket with the liquid -- do not remove the bucket with the liquid
return return
end end
end end
return {name="bucket:bucket_empty"}
if check_protection(lpos, user
and user:get_player_name()
or "", "place "..source) then
return
end
minetest.set_node(lpos, {name = source})
return ItemStack("bucket:bucket_empty")
end end
}) })
end end