From: SmallJoker Date: Tue, 21 Nov 2017 19:21:52 +0000 (+0100) Subject: core.rotate_node: Run callbacks like with any regular placed node (#6648) X-Git-Tag: 0.4.17~52 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=8fba3c93d5c76a25e2a173061022fb3cab0672f5;p=oweals%2Fminetest.git core.rotate_node: Run callbacks like with any regular placed node (#6648) --- diff --git a/builtin/common/misc_helpers.lua b/builtin/common/misc_helpers.lua index 51abed1be..0686c18da 100644 --- a/builtin/common/misc_helpers.lua +++ b/builtin/common/misc_helpers.lua @@ -345,41 +345,20 @@ if INIT == "game" then end local undef = core.registered_nodes[unode.name] if undef and undef.on_rightclick then - undef.on_rightclick(pointed_thing.under, unode, placer, + return undef.on_rightclick(pointed_thing.under, unode, placer, itemstack, pointed_thing) - return end local fdir = placer and core.dir_to_facedir(placer:get_look_dir()) or 0 - local wield_name = itemstack:get_name() local above = pointed_thing.above local under = pointed_thing.under local iswall = (above.y == under.y) local isceiling = not iswall and (above.y < under.y) - local anode = core.get_node_or_nil(above) - if not anode then - return - end - local pos = pointed_thing.above - local node = anode if undef and undef.buildable_to then - pos = pointed_thing.under - node = unode iswall = false end - local name = placer and placer:get_player_name() or "" - if core.is_protected(pos, name) then - core.record_protection_violation(pos, name) - return - end - - local ndef = core.registered_nodes[node.name] - if not ndef or not ndef.buildable_to then - return - end - if orient_flags.force_floor then iswall = false isceiling = false @@ -393,31 +372,26 @@ if INIT == "game" then iswall = not iswall end + local param2 = fdir if iswall then - core.set_node(pos, {name = wield_name, - param2 = dirs1[fdir + 1]}) + param2 = dirs1[fdir + 1] elseif isceiling then if orient_flags.force_facedir then - core.set_node(pos, {name = wield_name, - param2 = 20}) + cparam2 = 20 else - core.set_node(pos, {name = wield_name, - param2 = dirs2[fdir + 1]}) + param2 = dirs2[fdir + 1] end else -- place right side up if orient_flags.force_facedir then - core.set_node(pos, {name = wield_name, - param2 = 0}) - else - core.set_node(pos, {name = wield_name, - param2 = fdir}) + param2 = 0 end end - if not infinitestacks then - itemstack:take_item() - return itemstack - end + local old_itemstack = ItemStack(itemstack) + local new_itemstack, removed = core.item_place_node( + itemstack, placer, pointed_thing, param2 + ) + return infinitestacks and old_itemstack or new_itemstack end