diff options
author | SmallJoker <SmallJoker@users.noreply.github.com> | 2017-11-21 20:21:52 +0100 |
---|---|---|
committer | SmallJoker <mk939@ymail.com> | 2018-06-03 17:32:00 +0200 |
commit | 8fba3c93d5c76a25e2a173061022fb3cab0672f5 (patch) | |
tree | 26f9dfaddff427c91230ac478b8041defe62ebb7 /builtin | |
parent | a90c314c80b87abbaa7668a55bc0d1194dd0920f (diff) | |
download | minetest-8fba3c93d5c76a25e2a173061022fb3cab0672f5.tar.gz minetest-8fba3c93d5c76a25e2a173061022fb3cab0672f5.tar.bz2 minetest-8fba3c93d5c76a25e2a173061022fb3cab0672f5.zip |
core.rotate_node: Run callbacks like with any regular placed node (#6648)
Diffstat (limited to 'builtin')
-rw-r--r-- | builtin/common/misc_helpers.lua | 48 |
1 files changed, 11 insertions, 37 deletions
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 |