core.rotate_node: Run callbacks like with any regular placed node (#6648)

This commit is contained in:
SmallJoker 2017-11-21 20:21:52 +01:00 committed by GitHub
parent 4b553ece09
commit f7733f41ea
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -345,41 +345,20 @@ if INIT == "game" then
end end
local undef = core.registered_nodes[unode.name] local undef = core.registered_nodes[unode.name]
if undef and undef.on_rightclick then 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) itemstack, pointed_thing)
return
end end
local fdir = placer and core.dir_to_facedir(placer:get_look_dir()) or 0 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 above = pointed_thing.above
local under = pointed_thing.under local under = pointed_thing.under
local iswall = (above.y == under.y) local iswall = (above.y == under.y)
local isceiling = not iswall and (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 if undef and undef.buildable_to then
pos = pointed_thing.under
node = unode
iswall = false iswall = false
end 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 if orient_flags.force_floor then
iswall = false iswall = false
isceiling = false isceiling = false
@ -393,31 +372,26 @@ if INIT == "game" then
iswall = not iswall iswall = not iswall
end end
local param2 = fdir
if iswall then if iswall then
core.set_node(pos, {name = wield_name, param2 = dirs1[fdir + 1]
param2 = dirs1[fdir + 1]})
elseif isceiling then elseif isceiling then
if orient_flags.force_facedir then if orient_flags.force_facedir then
core.set_node(pos, {name = wield_name, cparam2 = 20
param2 = 20})
else else
core.set_node(pos, {name = wield_name, param2 = dirs2[fdir + 1]
param2 = dirs2[fdir + 1]})
end end
else -- place right side up else -- place right side up
if orient_flags.force_facedir then if orient_flags.force_facedir then
core.set_node(pos, {name = wield_name, param2 = 0
param2 = 0})
else
core.set_node(pos, {name = wield_name,
param2 = fdir})
end end
end end
if not infinitestacks then local old_itemstack = ItemStack(itemstack)
itemstack:take_item() local new_itemstack, removed = core.item_place_node(
return itemstack itemstack, placer, pointed_thing, param2
end )
return infinitestacks and old_itemstack or new_itemstack
end end