]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/nodemetadata.cpp
random comment updates
[dragonfireclient.git] / src / nodemetadata.cpp
index 21b4ed01d527042217e93f674ca2ba5ba7ba8f3b..308a3385432a5126ee6e4010158e24dbd4f6bdda 100644 (file)
@@ -99,6 +99,9 @@ void NodeMetadata::registerType(u16 id, Factory f)
        SignNodeMetadata
 */
 
+// Prototype
+SignNodeMetadata proto_SignNodeMetadata("");
+
 SignNodeMetadata::SignNodeMetadata(std::string text):
        m_text(text)
 {
@@ -130,6 +133,9 @@ std::string SignNodeMetadata::infoText()
        ChestNodeMetadata
 */
 
+// Prototype
+ChestNodeMetadata proto_ChestNodeMetadata;
+
 ChestNodeMetadata::ChestNodeMetadata()
 {
        NodeMetadata::registerType(typeId(), create);
@@ -165,11 +171,26 @@ std::string ChestNodeMetadata::infoText()
 {
        return "Chest";
 }
+bool ChestNodeMetadata::nodeRemovalDisabled()
+{
+       /*
+               Disable removal if chest contains something
+       */
+       InventoryList *list = m_inventory->getList("0");
+       if(list == NULL)
+               return false;
+       if(list->getUsedSlots() == 0)
+               return false;
+       return true;
+}
 
 /*
        FurnaceNodeMetadata
 */
 
+// Prototype
+FurnaceNodeMetadata proto_FurnaceNodeMetadata;
+
 FurnaceNodeMetadata::FurnaceNodeMetadata()
 {
        NodeMetadata::registerType(typeId(), create);
@@ -266,7 +287,7 @@ bool FurnaceNodeMetadata::step(float dtime)
        
        // Start only if there are free slots in dst, so that it can
        // accomodate any result item
-       if(dst_list->getFreeSlots() > 0)
+       if(dst_list->getFreeSlots() > 0 && src_item && src_item->isCookable())
        {
                m_src_totaltime = 3;
        }
@@ -281,11 +302,12 @@ bool FurnaceNodeMetadata::step(float dtime)
                //dstream<<"Furnace is active"<<std::endl;
                m_fuel_time += dtime;
                m_src_time += dtime;
-               if(m_src_time >= m_src_totaltime && m_src_totaltime > 0.001)
+               if(m_src_time >= m_src_totaltime && m_src_totaltime > 0.001
+                               && src_item)
                {
-                       src_list->decrementMaterials(1);
                        InventoryItem *cookresult = src_item->createCookResult();
                        dst_list->addItem(cookresult);
+                       src_list->decrementMaterials(1);
                        m_src_time = 0;
                        m_src_totaltime = 0;
                }