#pragma once using namespace std; #include "Container.h" #include "ListTag.h" #include "ItemInstance.h" class Player; class CompoundTag; class Inventory : public Container { public: static const int POP_TIME_DURATION ; static const int MAX_INVENTORY_STACK_SIZE; private: static const int INVENTORY_SIZE; static const int SELECTION_SIZE; public: ItemInstanceArray items; ItemInstanceArray armor; int selected; Player *player; // This is owned by shared_ptrs, but we are owned by it private: std::shared_ptr heldItem; std::shared_ptr carried; public: bool changed; Inventory(Player *player); ~Inventory(); std::shared_ptr getSelected(); // 4J-PB - Added for the in-game tooltips bool IsHeldItem(); static int getSelectionSize(); private: int getSlot(int tileId); int getSlot(int tileId, int data); int getSlotWithRemainingSpace(std::shared_ptr item); public: int getFreeSlot(); void grabTexture(int id, int data, bool checkData, bool mayReplace); void swapPaint(int wheel); void clearInventory(); void replaceSlot(Item *item, int data); private: int addResource(std::shared_ptr itemInstance); public: void tick(); bool removeResource(int type); // 4J-PB added to get the right resource from the inventory for removal bool removeResource(int type,int iAuxVal); void removeResources(std::shared_ptr item); // 4J Added for trading // 4J-Stu added to the get the item that would be affected by the removeResource functions std::shared_ptr getResourceItem(int type); std::shared_ptr getResourceItem(int type,int iAuxVal); bool hasResource(int type); void swapSlots(int from, int to); bool add(std::shared_ptr item); std::shared_ptr removeItem(unsigned int slot, int count); virtual std::shared_ptr removeItemNoUpdate(int slot); void setItem(unsigned int slot, std::shared_ptr item); float getDestroySpeed(Tile *tile); ListTag *save(ListTag *listTag); void load(ListTag *inventoryList); unsigned int getContainerSize(); std::shared_ptr getItem(unsigned int slot); int getName(); int getMaxStackSize(); int getAttackDamage(std::shared_ptr entity); bool canDestroy(Tile *tile); std::shared_ptr getArmor(int layer); int getArmorValue(); void hurtArmor(int dmg); void dropAll(); void setChanged(); bool isSame(std::shared_ptr copy); private: bool isSame(std::shared_ptr a, std::shared_ptr b); public: std::shared_ptr copy(); void setCarried(std::shared_ptr carried); std::shared_ptr getCarried(); bool stillValid(std::shared_ptr player); bool contains(std::shared_ptr itemInstance); virtual void startOpen(); virtual void stopOpen(); void replaceWith(std::shared_ptr other); int countMatches(std::shared_ptr itemInstance); // 4J Added };