- if (npos.x >= 0 && npos.x < MAPBLOCK_SIZE && npos.y >= 0 && npos.y < MAPBLOCK_SIZE && npos.z >= 0 && npos.z < MAPBLOCK_SIZE)
- neighbor = block->data[npos.x][npos.y][npos.z].type;
- else {
- MapNode nn = map_get_node(client_map.map, (v3s32) {npos.x + block->pos.x * MAPBLOCK_SIZE, npos.y + block->pos.y * MAPBLOCK_SIZE, npos.z + block->pos.z * MAPBLOCK_SIZE});
- neighbor = nn.type;
- }
+ MapNode neighbor = direct_neighbor
+ ? block->data[npos.x][npos.y][npos.z]
+ : map_get_node(client_map.map, (v3s32) {npos.x + node_bp.x, npos.y + node_bp.y, npos.z + node_bp.z});
+
+ bool transparency_edge = def->visibility != NV_BLEND || neighbor.type != node->type;
+
+ bool render_node = def->visibility == NV_CLIP || (neighbor.type != NODE_UNLOADED
+ && client_node_definitions[neighbor.type].visibility != NV_SOLID
+ && transparency_edge);
+
+ object->visible = object->visible || render_node;
+
+ if (! hide_edges && ! direct_neighbor)
+ render_node = transparency_edge;
+
+ if (render_node) {
+ object->transparent = object->transparent || def->visibility == NV_BLEND;
+ object_set_texture(object, def->tiles.textures[f]);