}
}
+/*
+ MaterialItem
+*/
+
+InventoryItem *MaterialItem::createCookResult()
+{
+ if(m_content == CONTENT_TREE)
+ {
+ return new CraftItem("lump_of_coal", 1);
+ }
+ return NULL;
+}
+
/*
MapBlockObjectItem
*/
return num;
}
+u32 InventoryList::getFreeSlots()
+{
+ return getSize() - getUsedSlots();
+}
+
InventoryItem * InventoryList::getItem(u32 i)
{
if(i > m_items.size() - 1)
m_inventory = new Inventory();
m_inventory->addList("fuel", 1);
m_inventory->addList("src", 1);
- m_inventory->addList("dst", 1);
+ m_inventory->addList("dst", 4);
m_step_accumulator = 0;
m_fuel_totaltime = 0;
NodeMetadata* FurnaceNodeMetadata::create(std::istream &is)
{
FurnaceNodeMetadata *d = new FurnaceNodeMetadata();
+
d->m_inventory->deSerialize(is);
+
int temp;
is>>temp;
d->m_fuel_totaltime = (float)temp/10;
is>>temp;
d->m_fuel_time = (float)temp/10;
+
return d;
}
void FurnaceNodeMetadata::serializeBody(std::ostream &os)
InventoryList *src_list = m_inventory->getList("src");
assert(src_list);
InventoryItem *src_item = src_list->getItem(0);
-
- if(ItemSpec(ITEM_MATERIAL, CONTENT_TREE).checkItem(src_item)
- && dst_list->itemFits(0, new CraftItem("lump_of_coal", 1)))
+
+ // Start only if there are free slots in dst, so that it can
+ // accomodate any result item
+ if(dst_list->getFreeSlots() > 0)
{
m_src_totaltime = 3;
}
m_src_time += dtime;
if(m_src_time >= m_src_totaltime && m_src_totaltime > 0.001)
{
- if(ItemSpec(ITEM_MATERIAL, CONTENT_TREE).checkItem(src_item))
- {
- src_list->decrementMaterials(1);
- dst_list->addItem(0, new CraftItem("lump_of_coal", 1));
- m_src_time = 0;
- m_src_totaltime = 0;
- }
+ src_list->decrementMaterials(1);
+ InventoryItem *cookresult = src_item->createCookResult();
+ dst_list->addItem(cookresult);
+ m_src_time = 0;
+ m_src_totaltime = 0;
}
return true;
}
{
u8 buf[6];
+ u16 version = 1;
+ writeU16(buf, version);
+ os.write((char*)buf, 2);
+
u16 count = m_data.size();
writeU16(buf, count);
os.write((char*)buf, 2);
u8 buf[6];
+ is.read((char*)buf, 2);
+ u16 version = readU16(buf);
+
+ if(version > 1)
+ {
+ dstream<<__FUNCTION_NAME<<": version "<<version<<" not supported"
+ <<std::endl;
+ throw SerializationError("NodeMetadataList::deSerialize");
+ }
+
is.read((char*)buf, 2);
u16 count = readU16(buf);