From 00123ee04d19ecc98e0a6a9255e5697a78167360 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A1niel=20Juh=C3=A1sz?= Date: Sat, 18 Feb 2017 20:26:19 +0100 Subject: [PATCH] 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. --- builtin/game/falling.lua | 3 ++- builtin/game/item.lua | 6 ++++-- src/game.cpp | 3 ++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/builtin/game/falling.lua b/builtin/game/falling.lua index 39a74008c..5ef5289be 100644 --- a/builtin/game/falling.lua +++ b/builtin/game/falling.lua @@ -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. diff --git a/builtin/game/item.lua b/builtin/game/item.lua index a8dc51d61..38ef1714f 100644 --- a/builtin/game/item.lua +++ b/builtin/game/item.lua @@ -262,7 +262,8 @@ 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, @@ -270,7 +271,8 @@ function core.item_place_node(itemstack, placer, pointed_thing, param2) } 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 = { diff --git a/src/game.cpp b/src/game.cpp index 1735737de..55b2ccec9 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -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);