#pragma once #include "Container.h" #include "../IO/NBT/ListTag.h" #include "../Items/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); int clearInventory(int id, int data); 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); std::wstring getName(); std::wstring getCustomName(); bool hasCustomName(); int getMaxStackSize(); bool canDestroy(Tile* tile); std::shared_ptr getArmor(int layer); int getArmorValue(); void hurtArmor(float 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(); bool canPlaceItem(int slot, std::shared_ptr item); void replaceWith(std::shared_ptr other); int countMatches(std::shared_ptr itemInstance); // 4J Added };