diff --git a/src/inventory.cpp b/src/inventory.cpp index e9600ece5c66733c66a9e0535ebf1e0ec89b3e77..dd2713ca9f6b854f05667922a2e02ff48e452825 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -246,7 +246,9 @@ MaterialItem::MaterialItem(IGameDef *gamedef, std::string nodename, u16 count): { if(nodename == "") nodename = "unknown_block"; - m_nodename = nodename; + + // Convert directly to the correct name through aliases + m_nodename = gamedef->ndef()->getAlias(nodename); } // Legacy constructor MaterialItem::MaterialItem(IGameDef *gamedef, content_t content, u16 count): @@ -309,6 +311,15 @@ content_t MaterialItem::getMaterial() const ToolItem */ +ToolItem::ToolItem(IGameDef *gamedef, std::string toolname, u16 wear): + InventoryItem(gamedef, 1) +{ + // Convert directly to the correct name through aliases + m_toolname = gamedef->tdef()->getAlias(toolname); + + m_wear = wear; +} + std::string ToolItem::getImageBasename() const { return m_gamedef->getToolDefManager()->getImagename(m_toolname); @@ -357,9 +368,7 @@ bool ToolItem::isKnown() const CraftItem::CraftItem(IGameDef *gamedef, std::string subname, u16 count): InventoryItem(gamedef, count) { - // Convert directly to the correct name through aliases. - // This is necessary because CraftItem callbacks are stored in - // Lua refenced by their correct name + // Convert directly to the correct name through aliases m_subname = gamedef->cidef()->getAlias(subname); } diff --git a/src/inventory.h b/src/inventory.h index 57af376501b4d5fec503518bf815cf0afaa7cc19..c16b9a310aa1df57300d9d8f4394198d3b9dee79 100644 --- a/src/inventory.h +++ b/src/inventory.h @@ -331,12 +331,7 @@ class CraftItem : public InventoryItem class ToolItem : public InventoryItem { public: - ToolItem(IGameDef *gamedef, std::string toolname, u16 wear): - InventoryItem(gamedef, 1) - { - m_toolname = toolname; - m_wear = wear; - } + ToolItem(IGameDef *gamedef, std::string toolname, u16 wear); /* Implementation interface */ diff --git a/src/nodedef.cpp b/src/nodedef.cpp index d76f9b8acdbe379553f7f7abd5c796485f63fee6..d7769700b90762139ba4de75f4b3e729e5893e36 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -403,15 +403,8 @@ class CNodeDefManager: public IWritableNodeDefManager } virtual bool getId(const std::string &name_, content_t &result) const { - std::string name = name_; // Convert name according to possible alias - std::map<std::string, std::string>::const_iterator i; - i = m_aliases.find(name); - if(i != m_aliases.end()){ - /*infostream<<"ndef: alias active: "<<name<<" -> "<<i->second - <<std::endl;*/ - name = i->second; - } + std::string name = getAlias(name_); // Get id return m_name_id_mapping.getId(name, result); } @@ -427,6 +420,14 @@ class CNodeDefManager: public IWritableNodeDefManager getId(name, id); return get(id); } + virtual std::string getAlias(const std::string &name) const + { + std::map<std::string, std::string>::const_iterator i; + i = m_aliases.find(name); + if(i != m_aliases.end()) + return i->second; + return name; + } // IWritableNodeDefManager virtual void set(content_t c, const ContentFeatures &def) { diff --git a/src/nodedef.h b/src/nodedef.h index f69b66c9f46d4eab4485f917aad3108120c9b1db..fdf2f8c45b6e1d1525b4f8f81e88e2aa250d0e13 100644 --- a/src/nodedef.h +++ b/src/nodedef.h @@ -253,6 +253,7 @@ class INodeDefManager virtual bool getId(const std::string &name, content_t &result) const=0; virtual content_t getId(const std::string &name) const=0; virtual const ContentFeatures& get(const std::string &name) const=0; + virtual std::string getAlias(const std::string &name) const =0; virtual void serialize(std::ostream &os)=0; }; @@ -270,6 +271,7 @@ class IWritableNodeDefManager : public INodeDefManager virtual content_t getId(const std::string &name) const=0; // If not found, returns the features of CONTENT_IGNORE virtual const ContentFeatures& get(const std::string &name) const=0; + virtual std::string getAlias(const std::string &name) const =0; // Register node definition virtual void set(content_t c, const ContentFeatures &def)=0; diff --git a/src/tooldef.cpp b/src/tooldef.cpp index 3b7863ba14345910e55fa0a3d639d6e352a318aa..7d7eceab0a6e9d364478d68afcaf1fe882b2dbc5 100644 --- a/src/tooldef.cpp +++ b/src/tooldef.cpp @@ -96,12 +96,7 @@ class CToolDefManager: public IWritableToolDefManager virtual const ToolDefinition* getToolDefinition(const std::string &toolname_) const { // Convert name according to possible alias - std::string toolname = toolname_; - std::map<std::string, std::string>::const_iterator i; - i = m_aliases.find(toolname); - if(i != m_aliases.end()){ - toolname = i->second; - } + std::string toolname = getAlias(toolname_); // Get the definition core::map<std::string, ToolDefinition*>::Node *n; n = m_tool_definitions.find(toolname); @@ -130,6 +125,15 @@ class CToolDefManager: public IWritableToolDefManager } return def->properties; } + virtual std::string getAlias(const std::string &name) const + { + std::map<std::string, std::string>::const_iterator i; + i = m_aliases.find(name); + if(i != m_aliases.end()) + return i->second; + return name; + } + // IWritableToolDefManager virtual bool registerTool(std::string toolname, const ToolDefinition &def) { infostream<<"registerTool: registering tool \""<<toolname<<"\""<<std::endl; diff --git a/src/tooldef.h b/src/tooldef.h index e28935e4322b53d3a77a12b383c5e28e7d38c122..c30579cb2358709daa4e69813de5f5a4e3d32fc3 100644 --- a/src/tooldef.h +++ b/src/tooldef.h @@ -69,6 +69,7 @@ class IToolDefManager virtual std::string getImagename(const std::string &toolname) const =0; virtual ToolDiggingProperties getDiggingProperties( const std::string &toolname) const =0; + virtual std::string getAlias(const std::string &name) const =0; virtual void serialize(std::ostream &os)=0; }; @@ -82,6 +83,7 @@ class IWritableToolDefManager : public IToolDefManager virtual std::string getImagename(const std::string &toolname) const =0; virtual ToolDiggingProperties getDiggingProperties( const std::string &toolname) const =0; + virtual std::string getAlias(const std::string &name) const =0; virtual bool registerTool(std::string toolname, const ToolDefinition &def)=0; virtual void clear()=0;