+ /*!
+ * Checks whether a node connects to an adjacent node.
+ * @param from the node to be checked
+ * @param to the adjacent node
+ * @param connect_face a bit field indicating which face of the node is
+ * adjacent to the other node.
+ * Bits: +y (least significant), -y, -z, -x, +z, +x (most significant).
+ * @return true if the node connects, false otherwise
+ */
+ bool nodeboxConnects(MapNode from, MapNode to,
+ u8 connect_face) const;
+
+ /*!
+ * Registers a NodeResolver to wait for the registration of
+ * ContentFeatures. Once the node registration finishes, all
+ * listeners are notified.
+ */
+ void pendNodeResolve(NodeResolver *nr) const;
+
+ /*!
+ * Stops listening to the NodeDefManager.
+ * @return true if the listener was registered before, false otherwise
+ */
+ bool cancelNodeResolveCallback(NodeResolver *nr) const;
+
+ /*!
+ * Registers a new node type with the given name and allocates a new
+ * content ID.
+ * Should not be called with an already existing name.
+ * @param name name of the node, must match with `def.name`.
+ * @param def definition of the registered node type.
+ * @return ID of the registered node or @ref CONTENT_IGNORE if
+ * the function could not allocate an ID.
+ */
+ content_t set(const std::string &name, const ContentFeatures &def);
+
+ /*!
+ * Allocates a blank node ID for the given name.
+ * @param name name of a node
+ * @return allocated ID or @ref CONTENT_IGNORE if could not allocate
+ * an ID.
+ */
+ content_t allocateDummy(const std::string &name);
+
+ /*!
+ * Removes the given node name from the manager.
+ * The node ID will remain in the manager, but won't be linked to any name.
+ * @param name name to be removed
+ */
+ void removeNode(const std::string &name);
+
+ /*!
+ * Regenerates the alias list (a map from names to node IDs).
+ * @param idef the item definition manager containing alias information
+ */
+ void updateAliases(IItemDefManager *idef);
+
+ /*!
+ * Reads the used texture pack's override.txt, and replaces the textures
+ * of registered nodes with the ones specified there.
+ *
+ * Format of the input file: in each line
+ * `node_name top|bottom|right|left|front|back|all|*|sides texture_name.png`
+ *
+ * @param override_filepath path to 'texturepack/override.txt'
+ */
+ void applyTextureOverrides(const std::string &override_filepath);
+
+ /*!
+ * Only the client uses this. Loads textures and shaders required for
+ * rendering the nodes.
+ * @param gamedef must be a Client.
+ * @param progress_cbk called each time a node is loaded. Arguments:
+ * `progress_cbk_args`, number of loaded ContentFeatures, number of
+ * total ContentFeatures.
+ * @param progress_cbk_args passed to the callback function
+ */
+ void updateTextures(IGameDef *gamedef,
+ void (*progress_cbk)(void *progress_args, u32 progress, u32 max_progress),
+ void *progress_cbk_args);
+
+ /*!
+ * Writes the content of this manager to the given output stream.
+ * @param protocol_version serialization version of ContentFeatures
+ */
+ void serialize(std::ostream &os, u16 protocol_version) const;
+
+ /*!
+ * Restores the manager from a serialized stream.
+ * This clears the previous state.
+ * @param is input stream containing a serialized NodeDefManager
+ */
+ void deSerialize(std::istream &is);