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