Skip to content
Snippets Groups Projects
Commit 6145a135 authored by Perttu Ahola's avatar Perttu Ahola
Browse files

Make ToolItem and MaterialItem to convert names by aliases at creation time...

Make ToolItem and MaterialItem to convert names by aliases at creation time too (necessary for eg. crafting)
parent 97c3bc40
No related branches found
No related tags found
No related merge requests found
......@@ -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);
}
......
......@@ -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
*/
......
......@@ -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)
{
......
......@@ -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;
......
......@@ -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;
......
......@@ -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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment