#pragma once #include "TexturePack.h" class Minecraft; class TexturePackRepository { public: static constexpr std::uint32_t DEFAULT_TEXTURE_PACK_ID = 0; static constexpr std::uint32_t FOLDER_TEST_TEXTURE_PACK_ID = 1; static constexpr std::uint32_t DLC_TEST_TEXTURE_PACK_ID = 2; private: static TexturePack* DEFAULT_TEXTURE_PACK; TexturePack* m_dummyTexturePack; TexturePack* m_dummyDLCTexturePack; Minecraft* minecraft; File workDir; File multiplayerDir; std::vector* texturePacks; std::vector m_texturePacksToDelete; std::unordered_map cacheById; TexturePack* selected; TexturePack* lastSelected; bool usingWeb; static const int MAX_WEB_FILESIZE = 10 * 1000 * 1000; // 10 Megabytes public: TexturePackRepository(File workingDirectory, Minecraft* minecraft); void addDebugPacks(); private: void createWorkingDirecoryUnlessExists(); public: bool selectSkin(TexturePack* skin); void selectWebSkin(const std::wstring& url); private: void downloadWebSkin(const std::wstring& url, File file); public: bool isUsingWebSkin(); void resetWebSkin(); void updateList(); private: std::wstring getIdOrNull(File file); std::vector getWorkDirContents(); public: std::vector* getAll(); TexturePack* getSelected(); bool shouldPromptForWebSkin(); bool canUseWebSkin(); bool isUsingDefaultSkin() { return selected == DEFAULT_TEXTURE_PACK; } // 4J Added TexturePack* getDefault() { return DEFAULT_TEXTURE_PACK; } // 4J Added std::vector >* getTexturePackIdNames(); bool selectTexturePackById(std::uint32_t id); // 4J Added TexturePack* getTexturePackById(std::uint32_t id); // 4J Added TexturePack* addTexturePackFromDLC(DLCPack* dlcPack, std::uint32_t id); void clearInvalidTexturePacks(); void updateUI(); bool needsUIUpdate(); private: void removeTexturePackById(std::uint32_t id); public: unsigned int getTexturePackCount(); TexturePack* getTexturePackByIndex(unsigned int index); unsigned int getTexturePackIndex(std::uint32_t id); };