summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2011-12-04 02:12:45 +0200
committerPerttu Ahola <celeron55@gmail.com>2011-12-04 02:12:45 +0200
commit6145a135bd71425c69d31e6c65112238e08349a5 (patch)
treedc1b839ebd4b35cb84a14b95d339843c11e75bf1
parent97c3bc408be0636b5821b7792957d18272e8f7bb (diff)
downloadminetest-6145a135bd71425c69d31e6c65112238e08349a5.tar.gz
minetest-6145a135bd71425c69d31e6c65112238e08349a5.tar.bz2
minetest-6145a135bd71425c69d31e6c65112238e08349a5.zip
Make ToolItem and MaterialItem to convert names by aliases at creation time too (necessary for eg. crafting)
-rw-r--r--src/inventory.cpp17
-rw-r--r--src/inventory.h7
-rw-r--r--src/nodedef.cpp17
-rw-r--r--src/nodedef.h2
-rw-r--r--src/tooldef.cpp16
-rw-r--r--src/tooldef.h2
6 files changed, 37 insertions, 24 deletions
diff --git a/src/inventory.cpp b/src/inventory.cpp
index e9600ece5..dd2713ca9 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 57af37650..c16b9a310 100644
--- a/src/inventory.h
+++ b/src/inventory.h
@@ -331,12 +331,7 @@ private:
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 d76f9b8ac..d7769700b 100644
--- a/src/nodedef.cpp
+++ b/src/nodedef.cpp
@@ -403,15 +403,8 @@ public:
}
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 @@ public:
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 f69b66c9f..fdf2f8c45 100644
--- a/src/nodedef.h
+++ b/src/nodedef.h
@@ -253,6 +253,7 @@ public:
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 @@ public:
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 3b7863ba1..7d7eceab0 100644
--- a/src/tooldef.cpp
+++ b/src/tooldef.cpp
@@ -96,12 +96,7 @@ public:
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 @@ public:
}
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 e28935e43..c30579cb2 100644
--- a/src/tooldef.h
+++ b/src/tooldef.h
@@ -69,6 +69,7 @@ public:
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 @@ public:
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;