Prevent bucket from replacing unloaded nodes

This commit is contained in:
ShadowNinja 2013-12-22 18:51:28 -05:00
parent 8eff7ba0cd
commit 1a9362afed

View File

@ -58,18 +58,19 @@ function bucket.register_liquid(source, flowing, itemname, inventory_image, name
return return
end end
local node = minetest.get_node_or_nil(pointed_thing.under)
local ndef
if node then
ndef = minetest.registered_nodes[node.name]
end
-- Call on_rightclick if the pointed node defines it -- Call on_rightclick if the pointed node defines it
if user and not user:get_player_control().sneak then if ndef and ndef.on_rightclick and
local n = minetest.get_node(pointed_thing.under) user and not user:get_player_control().sneak then
local nn = n.name
local ndef = minetest.registered_nodes[nn]
if ndef and ndef.on_rightclick then
return ndef.on_rightclick( return ndef.on_rightclick(
pointed_thing.under, pointed_thing.under,
n, user, node, user,
itemstack) or itemstack itemstack) or itemstack
end end
end
local place_liquid = function(pos, node, source, flowing, fullness) local place_liquid = function(pos, node, source, flowing, fullness)
if check_protection(pos, if check_protection(pos,
@ -98,19 +99,18 @@ function bucket.register_liquid(source, flowing, itemname, inventory_image, name
end end
-- Check if pointing to a buildable node -- Check if pointing to a buildable node
local node = minetest.get_node(pointed_thing.under)
local fullness = tonumber(itemstack:get_metadata()) local fullness = tonumber(itemstack:get_metadata())
if not fullness then fullness = LIQUID_MAX end if not fullness then fullness = LIQUID_MAX end
if minetest.registered_nodes[node.name].buildable_to then if ndef and ndef.buildable_to then
-- buildable; replace the node -- buildable; replace the node
place_liquid(pointed_thing.under, node, place_liquid(pointed_thing.under, node,
source, flowing, fullness) source, flowing, fullness)
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(pointed_thing.above) local node = minetest.get_node_or_nil(pointed_thing.above)
if minetest.registered_nodes[node.name].buildable_to then if node and minetest.registered_nodes[node.name].buildable_to then
place_liquid(pointed_thing.above, place_liquid(pointed_thing.above,
node, source, node, source,
flowing, fullness) flowing, fullness)