Sapling_on_place: Restore after_place_node() calls
authorSmallJoker <mk939@ymail.com>
Sat, 11 Mar 2017 12:52:20 +0000 (13:52 +0100)
committerparamat <mat.gregory@virginmedia.com>
Wed, 15 Mar 2017 22:18:50 +0000 (22:18 +0000)
mods/default/trees.lua

index 5f4d3f1ea21ae5dd06527129a537c7826a13fdae..3e1bf102254023fa3068487f4a7084d1789f17d5 100644 (file)
@@ -457,19 +457,46 @@ function default.sapling_on_place(itemstack, placer, pointed_thing,
                return itemstack
        end
        -- Check tree volume for protection
-       if not default.intersects_protection(
+       if default.intersects_protection(
                        vector.add(pos, minp_relative),
                        vector.add(pos, maxp_relative),
                        player_name,
                        interval) then
-               minetest.set_node(pos, {name = sapling_name})
-               if not minetest.setting_getbool("creative_mode") then
-                       itemstack:take_item()
-               end
-       else
                minetest.record_protection_violation(pos, player_name)
                -- Print extra information to explain
                minetest.chat_send_player(player_name, "Tree will intersect protection")
+               return itemstack
+       end
+
+       minetest.log("action", player_name .. " places node "
+                       .. sapling_name .. " at " .. minetest.pos_to_string(pos))
+
+       local take_item = not minetest.setting_getbool("creative_mode")
+       local newnode = {name = sapling_name}
+       local ndef = minetest.registered_nodes[sapling_name]
+       minetest.set_node(pos, newnode)
+
+       -- Run callback
+       if ndef and ndef.after_place_node then
+               -- Deepcopy place_to and pointed_thing because callback can modify it
+               if ndef.after_place_node(table.copy(pos), placer,
+                               itemstack, table.copy(pointed_thing)) then
+                       take_item = false
+               end
+       end
+
+       -- Run script hook
+       for _, callback in ipairs(minetest.registered_on_placenodes) do
+               -- Deepcopy pos, node and pointed_thing because callback can modify them
+               if callback(table.copy(pos), table.copy(newnode),
+                               placer, table.copy(node or {}),
+                               itemstack, table.copy(pointed_thing)) then
+                       take_item = false
+               end
+       end
+
+       if take_item then
+               itemstack:take_item()
        end
 
        return itemstack