summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSmallJoker <SmallJoker@users.noreply.github.com>2017-11-21 20:21:52 +0100
committerSmallJoker <mk939@ymail.com>2018-06-03 17:32:00 +0200
commit8fba3c93d5c76a25e2a173061022fb3cab0672f5 (patch)
tree26f9dfaddff427c91230ac478b8041defe62ebb7
parenta90c314c80b87abbaa7668a55bc0d1194dd0920f (diff)
downloadminetest-8fba3c93d5c76a25e2a173061022fb3cab0672f5.tar.gz
minetest-8fba3c93d5c76a25e2a173061022fb3cab0672f5.tar.bz2
minetest-8fba3c93d5c76a25e2a173061022fb3cab0672f5.zip
core.rotate_node: Run callbacks like with any regular placed node (#6648)
-rw-r--r--builtin/common/misc_helpers.lua48
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