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);
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;
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;
};
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
{
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
*/