forked from Mirrorlandia_minetest/minetest
core.rotate_node: Run callbacks like with any regular placed node (#6648)
This commit is contained in:
parent
4b553ece09
commit
f7733f41ea
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user