forked from Mirrorlandia_minetest/minetest
Improved MaterialItem (stores nodename)
This commit is contained in:
parent
df8346ef4d
commit
7a29b14a20
@ -32,6 +32,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
#include "nodedef.h"
|
#include "nodedef.h"
|
||||||
#include "tooldef.h"
|
#include "tooldef.h"
|
||||||
#include "gamedef.h"
|
#include "gamedef.h"
|
||||||
|
#include "strfnd.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
InventoryItem
|
InventoryItem
|
||||||
@ -95,6 +96,16 @@ InventoryItem* InventoryItem::deSerialize(std::istream &is, IGameDef *gamedef)
|
|||||||
throw SerializationError("Too large material number");
|
throw SerializationError("Too large material number");
|
||||||
return new MaterialItem(gamedef, material, count);
|
return new MaterialItem(gamedef, material, count);
|
||||||
}
|
}
|
||||||
|
else if(name == "MaterialItem3")
|
||||||
|
{
|
||||||
|
std::string all;
|
||||||
|
std::getline(is, all, '\n');
|
||||||
|
Strfnd fnd(all);
|
||||||
|
fnd.next("\"");
|
||||||
|
std::string nodename = fnd.next("\"");
|
||||||
|
u16 count = stoi(trim(fnd.next("")));
|
||||||
|
return new MaterialItem(gamedef, nodename, count);
|
||||||
|
}
|
||||||
else if(name == "MBOItem")
|
else if(name == "MBOItem")
|
||||||
{
|
{
|
||||||
std::string inventorystring;
|
std::string inventorystring;
|
||||||
@ -149,24 +160,42 @@ ServerActiveObject* InventoryItem::createSAO(ServerEnvironment *env, u16 id, v3f
|
|||||||
MaterialItem
|
MaterialItem
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
MaterialItem::MaterialItem(IGameDef *gamedef, std::string nodename, u16 count):
|
||||||
|
InventoryItem(gamedef, count)
|
||||||
|
{
|
||||||
|
if(nodename == "")
|
||||||
|
nodename = "unknown_block";
|
||||||
|
m_nodename = nodename;
|
||||||
|
}
|
||||||
|
// Legacy constructor
|
||||||
|
MaterialItem::MaterialItem(IGameDef *gamedef, content_t content, u16 count):
|
||||||
|
InventoryItem(gamedef, count)
|
||||||
|
{
|
||||||
|
INodeDefManager *ndef = m_gamedef->ndef();
|
||||||
|
std::string nodename = ndef->get(content).name;
|
||||||
|
if(nodename == "")
|
||||||
|
nodename = "unknown_block";
|
||||||
|
m_nodename = nodename;
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef SERVER
|
#ifndef SERVER
|
||||||
video::ITexture * MaterialItem::getImage(ITextureSource *tsrc) const
|
video::ITexture * MaterialItem::getImage(ITextureSource *tsrc) const
|
||||||
{
|
{
|
||||||
return m_gamedef->getNodeDefManager()->get(m_content).inventory_texture;
|
return m_gamedef->getNodeDefManager()->get(m_nodename).inventory_texture;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool MaterialItem::isCookable() const
|
bool MaterialItem::isCookable() const
|
||||||
{
|
{
|
||||||
INodeDefManager *ndef = m_gamedef->ndef();
|
INodeDefManager *ndef = m_gamedef->ndef();
|
||||||
const ContentFeatures &f = ndef->get(m_content);
|
const ContentFeatures &f = ndef->get(m_nodename);
|
||||||
return (f.cookresult_item != "");
|
return (f.cookresult_item != "");
|
||||||
}
|
}
|
||||||
|
|
||||||
InventoryItem *MaterialItem::createCookResult() const
|
InventoryItem *MaterialItem::createCookResult() const
|
||||||
{
|
{
|
||||||
INodeDefManager *ndef = m_gamedef->ndef();
|
INodeDefManager *ndef = m_gamedef->ndef();
|
||||||
const ContentFeatures &f = ndef->get(m_content);
|
const ContentFeatures &f = ndef->get(m_nodename);
|
||||||
std::istringstream is(f.cookresult_item, std::ios::binary);
|
std::istringstream is(f.cookresult_item, std::ios::binary);
|
||||||
return InventoryItem::deSerialize(is, m_gamedef);
|
return InventoryItem::deSerialize(is, m_gamedef);
|
||||||
}
|
}
|
||||||
@ -174,17 +203,25 @@ InventoryItem *MaterialItem::createCookResult() const
|
|||||||
float MaterialItem::getCookTime() const
|
float MaterialItem::getCookTime() const
|
||||||
{
|
{
|
||||||
INodeDefManager *ndef = m_gamedef->ndef();
|
INodeDefManager *ndef = m_gamedef->ndef();
|
||||||
const ContentFeatures &f = ndef->get(m_content);
|
const ContentFeatures &f = ndef->get(m_nodename);
|
||||||
return f.furnace_cooktime;
|
return f.furnace_cooktime;
|
||||||
}
|
}
|
||||||
|
|
||||||
float MaterialItem::getBurnTime() const
|
float MaterialItem::getBurnTime() const
|
||||||
{
|
{
|
||||||
INodeDefManager *ndef = m_gamedef->ndef();
|
INodeDefManager *ndef = m_gamedef->ndef();
|
||||||
const ContentFeatures &f = ndef->get(m_content);
|
const ContentFeatures &f = ndef->get(m_nodename);
|
||||||
return f.furnace_burntime;
|
return f.furnace_burntime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
content_t MaterialItem::getMaterial() const
|
||||||
|
{
|
||||||
|
INodeDefManager *ndef = m_gamedef->ndef();
|
||||||
|
content_t id = CONTENT_IGNORE;
|
||||||
|
ndef->getId(m_nodename, id);
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
ToolItem
|
ToolItem
|
||||||
*/
|
*/
|
||||||
|
@ -127,11 +127,9 @@ protected:
|
|||||||
class MaterialItem : public InventoryItem
|
class MaterialItem : public InventoryItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MaterialItem(IGameDef *gamedef, content_t content, u16 count):
|
MaterialItem(IGameDef *gamedef, std::string nodename, u16 count);
|
||||||
InventoryItem(gamedef, count)
|
// Legacy constructor
|
||||||
{
|
MaterialItem(IGameDef *gamedef, content_t content, u16 count);
|
||||||
m_content = content;
|
|
||||||
}
|
|
||||||
/*
|
/*
|
||||||
Implementation interface
|
Implementation interface
|
||||||
*/
|
*/
|
||||||
@ -141,16 +139,26 @@ public:
|
|||||||
}
|
}
|
||||||
virtual void serialize(std::ostream &os) const
|
virtual void serialize(std::ostream &os) const
|
||||||
{
|
{
|
||||||
//os.imbue(std::locale("C"));
|
std::string nodename = m_nodename;
|
||||||
os<<"MaterialItem2";
|
if(nodename == "")
|
||||||
|
nodename = "unknown_block";
|
||||||
|
|
||||||
|
os<<"MaterialItem3";
|
||||||
|
os<<" \"";
|
||||||
|
os<<nodename;
|
||||||
|
os<<"\" ";
|
||||||
|
os<<m_count;
|
||||||
|
|
||||||
|
// Old
|
||||||
|
/*os<<"MaterialItem2";
|
||||||
os<<" ";
|
os<<" ";
|
||||||
os<<(unsigned int)m_content;
|
os<<(unsigned int)m_content;
|
||||||
os<<" ";
|
os<<" ";
|
||||||
os<<m_count;
|
os<<m_count;*/
|
||||||
}
|
}
|
||||||
virtual InventoryItem* clone()
|
virtual InventoryItem* clone()
|
||||||
{
|
{
|
||||||
return new MaterialItem(m_gamedef, m_content, m_count);
|
return new MaterialItem(m_gamedef, m_nodename, m_count);
|
||||||
}
|
}
|
||||||
#ifndef SERVER
|
#ifndef SERVER
|
||||||
video::ITexture * getImage(ITextureSource *tsrc) const;
|
video::ITexture * getImage(ITextureSource *tsrc) const;
|
||||||
@ -167,7 +175,7 @@ public:
|
|||||||
if(std::string(other->getName()) != "MaterialItem")
|
if(std::string(other->getName()) != "MaterialItem")
|
||||||
return false;
|
return false;
|
||||||
MaterialItem *m = (MaterialItem*)other;
|
MaterialItem *m = (MaterialItem*)other;
|
||||||
if(m->getMaterial() != m_content)
|
if(m->m_nodename != m_nodename)
|
||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -185,14 +193,13 @@ public:
|
|||||||
float getCookTime() const;
|
float getCookTime() const;
|
||||||
float getBurnTime() const;
|
float getBurnTime() const;
|
||||||
/*
|
/*
|
||||||
Special methods
|
Special properties (not part of virtual interface)
|
||||||
*/
|
*/
|
||||||
content_t getMaterial()
|
std::string getNodeName() const
|
||||||
{
|
{ return m_nodename; }
|
||||||
return m_content;
|
content_t getMaterial() const;
|
||||||
}
|
|
||||||
private:
|
private:
|
||||||
content_t m_content;
|
std::string m_nodename;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -406,6 +406,12 @@ public:
|
|||||||
{
|
{
|
||||||
return m_name_id_mapping.getId(name, result);
|
return m_name_id_mapping.getId(name, result);
|
||||||
}
|
}
|
||||||
|
virtual const ContentFeatures& get(const std::string &name) const
|
||||||
|
{
|
||||||
|
content_t id = CONTENT_IGNORE;
|
||||||
|
getId(name, id);
|
||||||
|
return get(id);
|
||||||
|
}
|
||||||
// IWritableNodeDefManager
|
// IWritableNodeDefManager
|
||||||
virtual void set(content_t c, const ContentFeatures &def)
|
virtual void set(content_t c, const ContentFeatures &def)
|
||||||
{
|
{
|
||||||
|
@ -254,6 +254,7 @@ public:
|
|||||||
virtual const ContentFeatures& get(content_t c) const=0;
|
virtual const ContentFeatures& get(content_t c) const=0;
|
||||||
virtual const ContentFeatures& get(const MapNode &n) const=0;
|
virtual const ContentFeatures& get(const MapNode &n) const=0;
|
||||||
virtual bool getId(const std::string &name, content_t &result) const=0;
|
virtual bool getId(const std::string &name, content_t &result) const=0;
|
||||||
|
virtual const ContentFeatures& get(const std::string &name) const=0;
|
||||||
|
|
||||||
virtual void serialize(std::ostream &os)=0;
|
virtual void serialize(std::ostream &os)=0;
|
||||||
};
|
};
|
||||||
@ -268,6 +269,8 @@ public:
|
|||||||
virtual const ContentFeatures& get(content_t c) const=0;
|
virtual const ContentFeatures& get(content_t c) const=0;
|
||||||
virtual const ContentFeatures& get(const MapNode &n) const=0;
|
virtual const ContentFeatures& get(const MapNode &n) const=0;
|
||||||
virtual bool getId(const std::string &name, content_t &result) const=0;
|
virtual bool getId(const std::string &name, content_t &result) const=0;
|
||||||
|
// If not found, returns the features of CONTENT_IGNORE
|
||||||
|
virtual const ContentFeatures& get(const std::string &name) const=0;
|
||||||
|
|
||||||
// Register node definition
|
// Register node definition
|
||||||
virtual void set(content_t c, const ContentFeatures &def)=0;
|
virtual void set(content_t c, const ContentFeatures &def)=0;
|
||||||
|
Loading…
Reference in New Issue
Block a user