Fixes for colorwallmounted and colorfacedir nodes

Correct node placement prediction for attached colorwallmounted nodes.
Correct placement direction for colorfacedir and colorwallmounted nodes.
Correct detatch mechanism for attached colorwallmounted nodes.
This commit is contained in:
Dániel Juhász 2017-02-18 20:26:19 +01:00 committed by paramat
parent 111e7e1cc8
commit 00123ee04d
3 changed files with 8 additions and 4 deletions

@ -134,7 +134,8 @@ end
function builtin_shared.check_attached_node(p, n) function builtin_shared.check_attached_node(p, n)
local def = core.registered_nodes[n.name] local def = core.registered_nodes[n.name]
local d = {x = 0, y = 0, z = 0} local d = {x = 0, y = 0, z = 0}
if def.paramtype2 == "wallmounted" then if def.paramtype2 == "wallmounted" or
def.paramtype2 == "colorwallmounted" then
-- The fallback vector here is in case 'wallmounted to dir' is nil due -- The fallback vector here is in case 'wallmounted to dir' is nil due
-- to voxelmanip placing a wallmounted node without resetting a -- to voxelmanip placing a wallmounted node without resetting a
-- pre-existing param2 value that is out-of-range for wallmounted. -- pre-existing param2 value that is out-of-range for wallmounted.

@ -262,7 +262,8 @@ function core.item_place_node(itemstack, placer, pointed_thing, param2)
-- Calculate direction for wall mounted stuff like torches and signs -- Calculate direction for wall mounted stuff like torches and signs
if def.place_param2 ~= nil then if def.place_param2 ~= nil then
newnode.param2 = def.place_param2 newnode.param2 = def.place_param2
elseif def.paramtype2 == 'wallmounted' and not param2 then elseif (def.paramtype2 == 'wallmounted' or
def.paramtype2 == 'colorwallmounted') and not param2 then
local dir = { local dir = {
x = under.x - above.x, x = under.x - above.x,
y = under.y - above.y, y = under.y - above.y,
@ -270,7 +271,8 @@ function core.item_place_node(itemstack, placer, pointed_thing, param2)
} }
newnode.param2 = core.dir_to_wallmounted(dir) newnode.param2 = core.dir_to_wallmounted(dir)
-- Calculate the direction for furnaces and chests and stuff -- Calculate the direction for furnaces and chests and stuff
elseif def.paramtype2 == 'facedir' and not param2 then elseif (def.paramtype2 == 'facedir' or
def.paramtype2 == 'colorfacedir') and not param2 then
local placer_pos = placer:getpos() local placer_pos = placer:getpos()
if placer_pos then if placer_pos then
local dir = { local dir = {

@ -884,7 +884,8 @@ bool nodePlacementPrediction(Client &client,
}; };
v3s16 pp; v3s16 pp;
if (nodedef->get(id).param_type_2 == CPT2_WALLMOUNTED) if (nodedef->get(id).param_type_2 == CPT2_WALLMOUNTED ||
nodedef->get(id).param_type_2 == CPT2_COLORED_WALLMOUNTED)
pp = p + wallmounted_dirs[param2]; pp = p + wallmounted_dirs[param2];
else else
pp = p + v3s16(0, -1, 0); pp = p + v3s16(0, -1, 0);