#pragma once using namespace std; #include "Item.h" class MobEffectInstance; class PotionItem : public Item { private: static const int DRINK_DURATION = (int) (20 * 1.6); public: static const wstring DEFAULT_ICON; static const wstring THROWABLE_ICON; static const wstring CONTENTS_ICON; private: unordered_map *> cachedMobEffects; Icon *iconThrowable; Icon *iconDrinkable; Icon *iconOverlay; public: PotionItem(int id); virtual vector *getMobEffects(shared_ptr potion); virtual vector *getMobEffects(int auxValue); virtual shared_ptr useTimeDepleted(shared_ptr instance, Level *level, shared_ptr player); virtual int getUseDuration(shared_ptr itemInstance); virtual UseAnim getUseAnimation(shared_ptr itemInstance); virtual shared_ptr use(shared_ptr instance, Level *level, shared_ptr player); virtual bool TestUse(Level *level, shared_ptr player); virtual bool useOn(shared_ptr itemInstance, shared_ptr player, Level *level, int x, int y, int z, int face, float clickX, float clickY, float clickZ, bool bTestUseOnOnly=false); virtual Icon *getIcon(int auxValue); virtual Icon *getLayerIcon(int auxValue, int spriteLayer); static bool isThrowable(int auxValue); int getColor(int data); virtual int getColor(shared_ptr item, int spriteLayer); virtual bool hasMultipleSpriteLayers(); virtual bool hasInstantenousEffects(int itemAuxValue); virtual wstring getHoverName(shared_ptr itemInstance); virtual void appendHoverText(shared_ptr itemInstance, shared_ptr player, vector *lines, bool advanced, vector &unformattedStrings); virtual bool isFoil(shared_ptr itemInstance); virtual unsigned int getUseDescriptionId(shared_ptr instance); //@Override void registerIcons(IconRegister *iconRegister); static Icon *getTexture(const wstring &name); // 4J Stu - Based loosely on a function that gets added in java much later on (1.3) static vector > *getUniquePotionValues(); private: // 4J Stu - Added to support function above, different from Java implementation static vector > s_uniquePotionValues; };