Prevent bucket from replacing unloaded nodes 0.4.9
authorShadowNinja <noreply@gmail.com>
Sun, 22 Dec 2013 23:51:28 +0000 (18:51 -0500)
committerShadowNinja <noreply@gmail.com>
Sun, 22 Dec 2013 23:51:28 +0000 (18:51 -0500)
mods/bucket/init.lua

index 3751cfe93c79436f5e5b7b32a9b40374c803d18b..eeff992c8865942a00276e7a136bfa8e8d0b2846 100644 (file)
@@ -58,17 +58,18 @@ function bucket.register_liquid(source, flowing, itemname, inventory_image, name
                                        return
                                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
-                               if user and not user:get_player_control().sneak then
-                                       local n = minetest.get_node(pointed_thing.under)
-                                       local nn = n.name
-                                       local ndef = minetest.registered_nodes[nn]
-                                       if ndef and ndef.on_rightclick then
-                                               return ndef.on_rightclick(
-                                                       pointed_thing.under,
-                                                       n, user,
-                                                       itemstack) or itemstack
-                                       end
+                               if ndef and ndef.on_rightclick and
+                                  user and not user:get_player_control().sneak then
+                                       return ndef.on_rightclick(
+                                               pointed_thing.under,
+                                               node, user,
+                                               itemstack) or itemstack
                                end
 
                                local place_liquid = function(pos, node, source, flowing, fullness)
@@ -98,19 +99,18 @@ function bucket.register_liquid(source, flowing, itemname, inventory_image, name
                                end
 
                                -- Check if pointing to a buildable node
-                               local node = minetest.get_node(pointed_thing.under)
                                local fullness = tonumber(itemstack:get_metadata())
                                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
                                        place_liquid(pointed_thing.under, node,
                                                        source, flowing, fullness)
                                else
                                        -- not buildable to; place the liquid above
                                        -- check if the node above can be replaced
-                                       local node = minetest.get_node(pointed_thing.above)
-                                       if minetest.registered_nodes[node.name].buildable_to then
+                                       local node = minetest.get_node_or_nil(pointed_thing.above)
+                                       if node and minetest.registered_nodes[node.name].buildable_to then
                                                place_liquid(pointed_thing.above,
                                                                node, source,
                                                                flowing, fullness)