#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(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, std::vector &unformattedStrings); 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; };