#include "content_mapnode.h"
//#include "serverobject.h"
#include "content_sao.h"
-
-bool item_material_is_cookable(content_t content, IGameDef *gamedef)
-{
- if(content == CONTENT_TREE)
- return true;
- else if(content == CONTENT_COBBLE)
- return true;
- else if(content == CONTENT_SAND)
- return true;
- return false;
-}
-
-InventoryItem* item_material_create_cook_result(content_t content,
- IGameDef *gamedef)
-{
- if(content == CONTENT_TREE)
- return new CraftItem(gamedef, "lump_of_coal", 1);
- else if(content == CONTENT_COBBLE)
- return new MaterialItem(gamedef, CONTENT_STONE, 1);
- else if(content == CONTENT_SAND)
- return new MaterialItem(gamedef, CONTENT_GLASS, 1);
- return NULL;
-}
+//#include "gamedef.h"
+//#include "nodedef.h"
std::string item_craft_get_image_name(const std::string &subname,
IGameDef *gamedef)
class ServerEnvironment;
class IGameDef;
-bool item_material_is_cookable(content_t content, IGameDef *gamedef);
-InventoryItem* item_material_create_cook_result(content_t content,
- IGameDef *gamedef);
-
std::string item_craft_get_image_name(const std::string &subname,
IGameDef *gamedef);
ServerActiveObject* item_craft_create_object(const std::string &subname,
f->param_type = CPT_MINERAL;
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
+ f->cookresult_item = std::string("MaterialItem2 ")+itos(CONTENT_GLASS)+" 1";
setDirtLikeMaterialProperties(f->material, 1.0);
i = CONTENT_GRAVEL;
f->param_type = CPT_MINERAL;
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
+ f->cookresult_item = "CraftItem lump_of_coal 1";
setWoodLikeMaterialProperties(f->material, 1.0);
i = CONTENT_JUNGLETREE;
f->param_type = CPT_NONE;
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
+ f->cookresult_item = std::string("MaterialItem2 ")+itos(CONTENT_STONE)+" 1";
setStoneLikeMaterialProperties(f->material, 0.9);
i = CONTENT_MOSSYCOBBLE;
bool MaterialItem::isCookable() const
{
- return item_material_is_cookable(m_content, m_gamedef);
+ INodeDefManager *ndef = m_gamedef->ndef();
+ const ContentFeatures &f = ndef->get(m_content);
+ return (f.cookresult_item != "");
}
InventoryItem *MaterialItem::createCookResult() const
{
- return item_material_create_cook_result(m_content, m_gamedef);
+ INodeDefManager *ndef = m_gamedef->ndef();
+ const ContentFeatures &f = ndef->get(m_content);
+ std::istringstream is(f.cookresult_item, std::ios::binary);
+ return InventoryItem::deSerialize(is, m_gamedef);
}
/*
air_equivalent = false;
often_contains_mineral = false;
dug_item = "";
+ extra_dug_item = "";
+ extra_dug_item_rarity = 2;
initial_metadata = NULL;
liquid_type = LIQUID_NONE;
liquid_alternative_flowing = CONTENT_IGNORE;
damage_per_second = 0;
selection_box = NodeBox();
material = MaterialProperties();
+ cookresult_item = "";
}
void ContentFeatures::serialize(std::ostream &os)
writeU32(os, damage_per_second);
selection_box.serialize(os);
material.serialize(os);
+ os<<serializeString(cookresult_item);
}
void ContentFeatures::deSerialize(std::istream &is, IGameDef *gamedef)
damage_per_second = readU32(is);
selection_box.deSerialize(is);
material.deSerialize(is);
+ cookresult_item = deSerializeString(is);
}
void ContentFeatures::setTexture(u16 i, std::string name)
std::string dug_item;
// Extra dug item and its rarity
std::string extra_dug_item;
+ // Usual get interval for extra dug item
s32 extra_dug_item_rarity;
// Initial metadata is cloned from this
NodeMetadata *initial_metadata;
u32 damage_per_second;
NodeBox selection_box;
MaterialProperties material;
+ std::string cookresult_item;
/*
Methods