Skip to content

Commit

Permalink
Fixes for colorwallmounted and colorfacedir nodes
Browse files Browse the repository at this point in the history
Correct node placement prediction for attached colorwallmounted nodes.
Correct placement direction for colorfacedir and colorwallmounted nodes.
Correct detatch mechanism for attached colorwallmounted nodes.
  • Loading branch information
juhdanad authored and paramat committed Feb 18, 2017
1 parent 111e7e1 commit 00123ee
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 4 deletions.
3 changes: 2 additions & 1 deletion builtin/game/falling.lua
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,8 @@ end
function builtin_shared.check_attached_node(p, n)
local def = core.registered_nodes[n.name]
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
-- to voxelmanip placing a wallmounted node without resetting a
-- pre-existing param2 value that is out-of-range for wallmounted.
Expand Down
6 changes: 4 additions & 2 deletions builtin/game/item.lua
Original file line number Diff line number Diff line change
Expand Up @@ -262,15 +262,17 @@ function core.item_place_node(itemstack, placer, pointed_thing, param2)
-- Calculate direction for wall mounted stuff like torches and signs
if def.place_param2 ~= nil then
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 = {
x = under.x - above.x,
y = under.y - above.y,
z = under.z - above.z
}
newnode.param2 = core.dir_to_wallmounted(dir)
-- 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()
if placer_pos then
local dir = {
Expand Down
3 changes: 2 additions & 1 deletion src/game.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -884,7 +884,8 @@ bool nodePlacementPrediction(Client &client,
};
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];
else
pp = p + v3s16(0, -1, 0);
Expand Down

0 comments on commit 00123ee

Please sign in to comment.