diff --git a/src/content_nodemeta.cpp b/src/content_nodemeta.cpp index 6b8bf05ef..433e6d04b 100644 --- a/src/content_nodemeta.cpp +++ b/src/content_nodemeta.cpp @@ -178,9 +178,9 @@ std::string FurnaceNodeMetadata::infoText() //return "Furnace"; if(m_fuel_time >= m_fuel_totaltime) { - InventoryList *src_list = m_inventory->getList("src"); + const InventoryList *src_list = m_inventory->getList("src"); assert(src_list); - InventoryItem *src_item = src_list->getItem(0); + const InventoryItem *src_item = src_list->getItem(0); if(src_item) return "Furnace is out of fuel"; @@ -219,7 +219,7 @@ bool FurnaceNodeMetadata::step(float dtime) InventoryList *src_list = m_inventory->getList("src"); assert(src_list); - InventoryItem *src_item = src_list->getItem(0); + const InventoryItem *src_item = src_list->getItem(0); // Start only if there are free slots in dst, so that it can // accomodate any result item @@ -268,7 +268,7 @@ bool FurnaceNodeMetadata::step(float dtime) InventoryList *fuel_list = m_inventory->getList("fuel"); assert(fuel_list); - InventoryItem *fuel_item = fuel_list->getItem(0); + const InventoryItem *fuel_item = fuel_list->getItem(0); if(ItemSpec(ITEM_MATERIAL, CONTENT_TREE).checkItem(fuel_item)) { diff --git a/src/inventory.cpp b/src/inventory.cpp index 30a43e37f..c413cc52f 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -139,12 +139,12 @@ ServerActiveObject* InventoryItem::createSAO(ServerEnvironment *env, u16 id, v3f MaterialItem */ -bool MaterialItem::isCookable() +bool MaterialItem::isCookable() const { return item_material_is_cookable(m_content); } -InventoryItem *MaterialItem::createCookResult() +InventoryItem *MaterialItem::createCookResult() const { return item_material_create_cook_result(m_content); } @@ -176,7 +176,7 @@ ServerActiveObject* CraftItem::createSAO(ServerEnvironment *env, u16 id, v3f pos return InventoryItem::createSAO(env, id, pos); } -u16 CraftItem::getDropCount() +u16 CraftItem::getDropCount() const { // Special cases s16 dc = item_craft_get_drop_count(m_subname); @@ -186,12 +186,12 @@ u16 CraftItem::getDropCount() return InventoryItem::getDropCount(); } -bool CraftItem::isCookable() +bool CraftItem::isCookable() const { return item_craft_is_cookable(m_subname); } -InventoryItem *CraftItem::createCookResult() +InventoryItem *CraftItem::createCookResult() const { return item_craft_create_cook_result(m_subname); } @@ -416,7 +416,7 @@ InventoryList & InventoryList::operator = (const InventoryList &other) return *this; } -std::string InventoryList::getName() +const std::string &InventoryList::getName() const { return m_name; } @@ -443,6 +443,13 @@ u32 InventoryList::getFreeSlots() return getSize() - getUsedSlots(); } +const InventoryItem * InventoryList::getItem(u32 i) const +{ + if(i > m_items.size() - 1) + return NULL; + return m_items[i]; +} + InventoryItem * InventoryList::getItem(u32 i) { if(i > m_items.size() - 1) @@ -545,7 +552,7 @@ InventoryItem * InventoryList::addItem(u32 i, InventoryItem *newitem) bool InventoryList::itemFits(u32 i, InventoryItem *newitem) { // If it is an empty position, it's an easy job. - InventoryItem *to_item = getItem(i); + const InventoryItem *to_item = getItem(i); if(to_item == NULL) { return true; @@ -736,7 +743,15 @@ InventoryList * Inventory::getList(const std::string &name) return m_lists[i]; } -s32 Inventory::getListIndex(const std::string &name) +const InventoryList * Inventory::getList(const std::string &name) const +{ + s32 i = getListIndex(name); + if(i == -1) + return NULL; + return m_lists[i]; +} + +const s32 Inventory::getListIndex(const std::string &name) const { for(u32 i=0; igetName()) != "MaterialItem") return false; @@ -169,7 +169,7 @@ public: return false; return true; } - u16 freeSpace() + u16 freeSpace() const { if(m_count > QUANTITY_ITEM_MAX_COUNT) return 0; @@ -178,8 +178,8 @@ public: /* Other properties */ - bool isCookable(); - InventoryItem *createCookResult(); + bool isCookable() const; + InventoryItem *createCookResult() const; /* Special methods */ @@ -289,9 +289,9 @@ public: } ServerActiveObject* createSAO(ServerEnvironment *env, u16 id, v3f pos); - u16 getDropCount(); + u16 getDropCount() const; - virtual bool addableTo(InventoryItem *other) + virtual bool addableTo(const InventoryItem *other) const { if(std::string(other->getName()) != "CraftItem") return false; @@ -300,7 +300,7 @@ public: return false; return true; } - u16 freeSpace() + u16 freeSpace() const { if(m_count > QUANTITY_ITEM_MAX_COUNT) return 0; @@ -311,8 +311,8 @@ public: Other properties */ - bool isCookable(); - InventoryItem *createCookResult(); + bool isCookable() const; + InventoryItem *createCookResult() const; bool use(ServerEnvironment *env, Player *player); @@ -467,7 +467,7 @@ public: InventoryList(const InventoryList &other); InventoryList & operator = (const InventoryList &other); - std::string getName(); + const std::string &getName() const; u32 getSize(); // Count used slots u32 getUsedSlots(); @@ -477,6 +477,7 @@ public: void setDirty(bool dirty=true){ m_dirty = dirty; }*/ // Get pointer to item + const InventoryItem * getItem(u32 i) const; InventoryItem * getItem(u32 i); // Returns old item (or NULL). Parameter can be NULL. InventoryItem * changeItem(u32 i, InventoryItem *newitem); @@ -529,6 +530,7 @@ public: InventoryList * addList(const std::string &name, u32 size); InventoryList * getList(const std::string &name); + const InventoryList * getList(const std::string &name) const; bool deleteList(const std::string &name); // A shorthand for adding items. // Returns NULL if the item was fully added, leftover otherwise. @@ -542,7 +544,7 @@ public: private: // -1 if not found - s32 getListIndex(const std::string &name); + const s32 getListIndex(const std::string &name) const; core::array m_lists; }; @@ -689,14 +691,14 @@ struct ItemSpec { } - bool checkItem(InventoryItem *item); + bool checkItem(const InventoryItem *item) const; }; /* items: a pointer to an array of 9 pointers to items specs: a pointer to an array of 9 ItemSpecs */ -bool checkItemCombination(InventoryItem **items, ItemSpec *specs); +bool checkItemCombination(const InventoryItem * const*items, const ItemSpec *specs); #endif