aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSmallJoker <SmallJoker@users.noreply.github.com>2017-11-21 20:21:52 +0100
committerGitHub <noreply@github.com>2017-11-21 20:21:52 +0100
commitf7733f41ea36e7d4531fea61a4cd4b679514d263 (patch)
treee75cee0b4cee2d09f1ae5954e0013606a2fe8f09
parent4b553ece09908dfdee59e9841fdc9420350eda9f (diff)
downloadminetest-f7733f41ea36e7d4531fea61a4cd4b679514d263.tar.gz
minetest-f7733f41ea36e7d4531fea61a4cd4b679514d263.tar.bz2
minetest-f7733f41ea36e7d4531fea61a4cd4b679514d263.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 d7e0b6ae2..eccacba4f 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