+ MapNode getNodeNoEx(v3s16 p)
+ {
+ VoxelArea voxel_area(p);
+ addArea(voxel_area);
+
+ if(m_flags[m_area.index(p)] & VOXELFLAG_NO_DATA)
+ {
+ return MapNode(CONTENT_IGNORE);
+ }
+
+ return m_data[m_area.index(p)];
+ }
+ MapNode getNodeNoExNoEmerge(v3s16 p)
+ {
+ if(m_area.contains(p) == false)
+ return MapNode(CONTENT_IGNORE);
+ if(m_flags[m_area.index(p)] & VOXELFLAG_NO_DATA)
+ return MapNode(CONTENT_IGNORE);
+ return m_data[m_area.index(p)];
+ }
+ // Stuff explodes if non-emerged area is touched with this.
+ // Emerge first, and check VOXELFLAG_NO_DATA if appropriate.
+ MapNode & getNodeRefUnsafe(const v3s16 &p)
+ {
+ return m_data[m_area.index(p)];
+ }
+
+ const MapNode & getNodeRefUnsafeCheckFlags(const v3s16 &p)
+ {
+ s32 index = m_area.index(p);
+
+ if (m_flags[index] & VOXELFLAG_NO_DATA)
+ return ContentIgnoreNode;
+
+ return m_data[index];
+ }
+
+ u8 & getFlagsRefUnsafe(v3s16 p)
+ {
+ return m_flags[m_area.index(p)];
+ }
+ bool exists(v3s16 p)