diff options
-rw-r--r-- | src/craftitemdef.cpp | 15 | ||||
-rw-r--r-- | src/craftitemdef.h | 1 | ||||
-rw-r--r-- | src/inventory.cpp | 9 | ||||
-rw-r--r-- | src/inventory.h | 6 |
4 files changed, 20 insertions, 11 deletions
diff --git a/src/craftitemdef.cpp b/src/craftitemdef.cpp index 8d4cbea3c..4461e38a7 100644 --- a/src/craftitemdef.cpp +++ b/src/craftitemdef.cpp @@ -88,12 +88,7 @@ public: virtual const CraftItemDefinition* getCraftItemDefinition(const std::string &itemname_) const { // Convert name according to possible alias - std::string itemname = itemname_; - std::map<std::string, std::string>::const_iterator i; - i = m_aliases.find(itemname); - if(i != m_aliases.end()){ - itemname = i->second; - } + std::string itemname = getAlias(itemname_); // Get the definition core::map<std::string, CraftItemDefinition*>::Node *n; n = m_item_definitions.find(itemname); @@ -108,6 +103,14 @@ public: return ""; return def->imagename; } + 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; + } virtual bool registerCraftItem(std::string itemname, const CraftItemDefinition &def) { infostream<<"registerCraftItem: registering CraftItem \""<<itemname<<"\""<<std::endl; diff --git a/src/craftitemdef.h b/src/craftitemdef.h index ee3d97aec..b5d4b9348 100644 --- a/src/craftitemdef.h +++ b/src/craftitemdef.h @@ -49,6 +49,7 @@ public: virtual ~ICraftItemDefManager(){} virtual const CraftItemDefinition* getCraftItemDefinition(const std::string &itemname) const=0; virtual std::string getImagename(const std::string &itemname) const =0; + virtual std::string getAlias(const std::string &name) const =0; virtual void serialize(std::ostream &os)=0; }; diff --git a/src/inventory.cpp b/src/inventory.cpp index a913430e6..e9600ece5 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -354,6 +354,15 @@ bool ToolItem::isKnown() const CraftItem */ +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 + m_subname = gamedef->cidef()->getAlias(subname); +} + #ifndef SERVER video::ITexture * CraftItem::getImage() const { diff --git a/src/inventory.h b/src/inventory.h index 3f3c5435b..57af37650 100644 --- a/src/inventory.h +++ b/src/inventory.h @@ -238,11 +238,7 @@ private: class CraftItem : public InventoryItem { public: - CraftItem(IGameDef *gamedef, std::string subname, u16 count): - InventoryItem(gamedef, count) - { - m_subname = subname; - } + CraftItem(IGameDef *gamedef, std::string subname, u16 count); /* Implementation interface */ |