3#include "mc/_HeaderOutputPredefine.h"
6#include "mc/client/persona/ISkinRepository.h"
7#include "mc/client/persona/defaults/DefaultSkinType.h"
8#include "mc/client/persona/pack_cache/PackEvictionState.h"
9#include "mc/deps/core/file/PathBuffer.h"
10#include "mc/deps/core/sem_ver/SemVersion.h"
11#include "mc/deps/core/string/BasicStackString.h"
12#include "mc/deps/core/threading/Async.h"
13#include "mc/deps/core/utility/NonOwnerPointer.h"
14#include "mc/deps/shared_types/persona/ArmSizeType.h"
15#include "mc/platform/ImagePickingCallback.h"
16#include "mc/platform/UUID.h"
23class IEntitlementManager;
50 public ::std::enable_shared_from_this<::SkinRepository> {
59 enum class SkinPackLoadState : uchar {
65 enum class EntryDisposition : uchar {
74 ::ll::TypedStorage<8, 24, ::SemVersion> mVersion;
75 ::ll::TypedStorage<1, 1, ::SkinRepository::SkinPackLoadState> mState;
76 ::ll::TypedStorage<4, 4, uint> mPinCount;
77 ::ll::TypedStorage<8, 8, uint64> mPinGeneration;
78 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::SkinPack>> mSkinPack;
82 ::std::optional<::std::_List_iterator<::std::_List_val<::std::_List_simple_types<::mce::UUID>>>>>
89 MCNAPI
void markLoaded(::std::unique_ptr<::SkinPack> skinPack);
97 ::ll::TypedStorage<8, 16, ::std::weak_ptr<bool>> mExistenceTracker;
98 ::ll::TypedStorage<8, 64, ::std::function<void(
::mce::UUID const&)>> mCallback;
113 ::ll::TypedStorage<8, 16, ::std::weak_ptr<::mce::TextureGroup>> mTextureGroup;
114 ::ll::TypedStorage<8, 24, ::Bedrock::NotNullNonOwnerPtr<::IResourcePackRepository>> mPackRepository;
115 ::ll::TypedStorage<8, 24, ::Bedrock::NotNullNonOwnerPtr<::IPackManifestFactory>> mManifestFactory;
116 ::ll::TypedStorage<8, 24, ::Bedrock::NotNullNonOwnerPtr<::IPackSourceFactory>> mPackSourceFactory;
117 ::ll::TypedStorage<8, 24, ::Bedrock::NotNullNonOwnerPtr<::IEntitlementManager>> mEntitlementManager;
118 ::ll::TypedStorage<8, 24, ::Bedrock::NotNullNonOwnerPtr<::IContentKeyProvider const>> mKeyProvider;
119 ::ll::TypedStorage<8, 24, ::Bedrock::NotNullNonOwnerPtr<::Core::FilePathManager>> mFilePathManager;
120 ::ll::TypedStorage<8, 64, ::std::unordered_map<::mce::UUID, ::SkinRepository::SkinPackEntry>> mPackEntryMap;
121 ::ll::TypedStorage<8, 16, ::std::list<::mce::UUID>> mLoadedPackLru;
122 ::ll::TypedStorage<1, 1, bool> mLoadedPackLruDirty;
123 ::ll::TypedStorage<8, 8, uint64> mMaxLoadedSkinPacks;
124 ::ll::TypedStorage<8, 8, uint64> mNextPinGeneration;
125 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::PackSource>> mAllSkinPacksSource;
126 ::ll::TypedStorage<8, 8, ::DirectoryPackSource*> mPremiumSkinPackSource;
127 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::SkinPackDiskLRUIndex>> mSkinPackDiskLRUIndex;
128 ::ll::TypedStorage<1, 1, bool> mAutoEvictionEnabled;
129 ::ll::TypedStorage<8, 192, ::persona::PackEvictionState> mEvictionState;
130 ::ll::TypedStorage<8, 16, ::std::shared_ptr<::Pack>> mLoadingPack;
131 ::ll::TypedStorage<8, 24, ::std::vector<::gsl::not_null<::std::shared_ptr<::Pack>>>> mPendingLoads;
132 ::ll::TypedStorage<8, 64, ::std::function<void(
bool, ::std::string)>> mOnPickSkin;
133 ::ll::TypedStorage<1, 1, bool> mIsPickingSkin;
134 ::ll::TypedStorage<8, 16, ::std::weak_ptr<::IToastManager>> mToastManager;
135 ::ll::TypedStorage<8, 24, ::std::vector<::SkinRepository::LoadListener>> mLoadListeners;
136 ::ll::TypedStorage<1, 1, bool> mInitialized;
137 ::ll::TypedStorage<8, 16, ::Bedrock::Threading::Async<void>> mLocRefreshTask;
138 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::TaskGroup>> mTaskGroup;
139 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::TaskGroup>> mDiskTaskGroup;
151 virtual void flushResourceLoaderTasks() ;
153 virtual ::Core::PathBuffer<::std::string> getCustomSkinDirectoryPath() const ;
155 virtual ::
std::optional<::Core::PathBuffer<::
std::
string>> getSharedCustomSkinDirectoryPath() const ;
159 virtual
void addLoadListener(
160 ::
std::weak_ptr<
bool> existanceTracker,
161 ::
std::function<
void(::mce::UUID const&)> callback
164 virtual
bool importSkinPack(::gsl::not_null<::
std::shared_ptr<::
Pack>> pack,
bool isTitleLocked) ;
166 virtual
bool loadCustomSkin(
167 ::
std::
string const& customSkinId,
168 ::SharedTypes::persona::ArmSizeType customSkinArmSize
171 virtual
bool tryLoadSkinPack(::mce::UUID const& packId,
bool shouldNotifyPlayer) ;
173 virtual
bool loadSkinPack(::mce::UUID const& packId) ;
175 virtual
void loadSkinPackAsync(::mce::UUID const& packId, ::
SkinPackMeta const& metadata) ;
177 virtual
void unloadAndDeleteSkinPack(::mce::UUID const& packId) ;
179 virtual
void unloadAndDeleteSkinPackForReimport(::mce::UUID const& packId) ;
181 virtual
void cancelPendingLoads() ;
183 virtual ::
std::vector<::
Pack const*> const getKnownSkinPacks() const ;
185 virtual ::
std::vector<::
Pack const*> const getKnownSkinPacksInPackage() const ;
187 virtual ::
std::vector<::
Pack const*> const getKnownSkinPacksInUserDir() const ;
189 virtual ::
std::vector<::
Pack const*> const getKnownSkinPacksInPremiumDir() const ;
191 virtual
void forEachPack(::
std::function<
void(::
Pack const&)> const& callback) const ;
193 virtual
void forEachLoadedSkinPack(::
std::function<
void(::
SkinPack const&)> const& callback) const ;
195 virtual ::
SkinPack* getSkinPackById(::mce::UUID const& packId) const ;
197 virtual ::
SkinPack* getSkinPackByIdHash(uint64 packIdHash) const ;
199 virtual ::
SemVersion const& getVersionOfKnownSkinPack(::mce::UUID const& packId) const ;
201 virtual
bool isSkinPackKnown(::mce::UUID const& packId) const ;
203 virtual
bool isSkinPackLoaded(::mce::UUID const& packId) const ;
205 virtual
bool isKnownSkinPackUnLoaded(::mce::UUID const& packId) const ;
207 virtual
bool isSkinPackLoading(::mce::UUID const& packId) const ;
209 virtual
bool isSkinPackOwned(::
ContentIdentity const& contentIdentity) const ;
211 virtual ::
Skin const* getSkinBySerializableName(::
std::
string const& serializableName) const ;
213 virtual ::
Skin const* getSkin(::
SkinHandle const& skinHandle) const ;
215 virtual
bool canUseSkin(::
Skin const* skin) const ;
217 virtual
bool canUseSkin(::
SkinHandle const& skinHandle) const ;
219 virtual ::Core::PathBuffer<::Core::BasicStackString<
char, 1024>>
225 addCustomSkin(::persona::DefaultSkinType bodySkinType, ::
ResourceLocation const& customImageLocation) ;
232 virtual
bool canPickSkin() const ;
234 virtual
void pickSkin(::
std::function<
void(
bool, ::
std::
string)> onPickSkin) ;
236 virtual
void reloadSkinPackLocText() ;
238 virtual ::Bedrock::NotNullNonOwnerPtr<::
IContentKeyProvider const> getSkinKeyProvider() const ;
246 virtual
bool loadCustomSkinTexture(::
ResourceLocation const& skinLocation) ;
248 virtual
void beginAsyncInit(::
TaskGroup& taskGroup) ;
250 virtual
bool isInitialized() const ;
252 virtual uint64 getLoadedSkinPackCount() const ;
254 virtual uint64 getLoadingSkinPackCount() const ;
256 virtual uint64 getUnloadedSkinPackCount() const ;
258 virtual
void deleteUnreferencedCustomSkinFiles(::
std::vector<::
SkinHandle> const& referencedSkins) ;
260 virtual
void onImagePickingSuccess(::
std::
string const& temporaryFilePath) ;
262 virtual
void onImagePickingCanceled() ;
268 MCNAPI SkinRepository(
269 ::
std::shared_ptr<::mce::TextureGroup> textureGroup,
273 ::Bedrock::NotNullNonOwnerPtr<::IEntitlementManager> entitlementManager,
275 ::Bedrock::NotNullNonOwnerPtr<::Core::FilePathManager> filePathManager
294 ::
std::shared_ptr<::mce::TextureGroup> textureGroup,
298 ::Bedrock::NotNullNonOwnerPtr<::IEntitlementManager> entitlementManager,
300 ::Bedrock::NotNullNonOwnerPtr<::Core::FilePathManager> filePathManager
321 $loadCustomSkin(::
std::
string const& customSkinId, ::SharedTypes::persona::ArmSizeType customSkinArmSize);
371 MCNAPI ::Core::PathBuffer<::Core::BasicStackString<
char, 1024>>
Definition ContentIdentity.h:8
Definition FilePathManager.h:18
Definition DirectoryPackSource.h:24
Definition IContentKeyProvider.h:13
Definition IPackManifestFactory.h:17
Definition IPackSourceFactory.h:29
Definition IResourcePackRepository.h:36
Definition ISkinRepository.h:5
Definition IToastManager.h:5
Definition ImagePickingCallback.h:5
Definition PackSource.h:28
Definition ResourceLocation.h:15
Definition ResourcePackManager.h:29
Definition SemVersion.h:15
Definition SerializedSkinRef.h:26
Definition SkinHandle.h:5
Definition SkinPackDiskLRUIndex.h:5
Definition SkinPackPin.h:5
Definition SkinRepository.h:5
MCAPI bool $tryLoadSkinPack(::mce::UUID const &packId, bool shouldNotifyPlayer)
MCAPI void $deleteUnreferencedCustomSkinFiles(::std::vector<::SkinHandle > const &referencedSkins)
MCAPI ::std::vector<::Pack const * > const $getKnownSkinPacksInUserDir() const
MCAPI ::std::vector<::Pack const * > const $getKnownSkinPacksInPackage() const
MCAPI::Skin const * $getSkinBySerializableName(::std::string const &serializableName) const
MCAPI ::Bedrock::NotNullNonOwnerPtr<::IContentKeyProvider const > $getSkinKeyProvider() const
MCAPI void $loadSkinPackAsync(::mce::UUID const &packId, ::SkinPackMeta const &metadata)
MCAPI void $unloadAndDeleteSkinPack(::mce::UUID const &packId)
MCAPI void $addLoadListener(::std::weak_ptr< bool > existanceTracker, ::std::function< void(::mce::UUID const &)> callback)
MCAPI void $flushResourceLoaderTasks()
MCAPI void $pickSkin(::std::function< void(bool, ::std::string)> onPickSkin)
MCAPI void $update(::ResourcePackManager &resourcePackManager)
MCAPI void $beginAsyncInit(::TaskGroup &taskGroup)
MCAPI::SkinPackPin pinSkinPack(::mce::UUID const &packId)
MCAPI bool $loadCustomSkin(::std::string const &customSkinId, ::SharedTypes::persona::ArmSizeType customSkinArmSize)
MCAPI uint64 $getLoadedSkinPackCount() const
MCAPI void $unloadSkin(::ResourceLocation const &skinLocation)
MCAPI void $onImagePickingSuccess(::std::string const &temporaryFilePath)
MCAPI ::std::vector<::Pack const * > const $getKnownSkinPacksInPremiumDir() const
MCAPI ::Core::PathBuffer<::std::string > $getCustomSkinDirectoryPath() const
MCAPI bool $canUseSkin(::Skin const *skin) const
MCAPI bool $isInitialized() const
MCAPI::SkinHandle $addCustomSkin(::SkinHandle const &customSkinHandle)
MCAPI void $onImagePickingCanceled()
MCAPI ::std::optional<::Core::PathBuffer<::std::string > > $getSharedCustomSkinDirectoryPath() const
MCAPI::SkinPack * $getSkinPackByIdHash(uint64 packIdHash) const
MCAPI void $forEachLoadedSkinPack(::std::function< void(::SkinPack const &)> const &callback) const
MCAPI uint64 $getUnloadedSkinPackCount() const
MCAPI bool $isSkinPackLoading(::mce::UUID const &packId) const
MCAPI bool _loadSkinPack(::gsl::not_null<::std::shared_ptr<::Pack > > pack, bool)
MCAPI::SkinPack * $getSkinPackById(::mce::UUID const &packId) const
MCAPI bool $isSkinPackOwned(::ContentIdentity const &contentIdentity) const
MCAPI void $unloadAndDeleteSkinPackForReimport(::mce::UUID const &packId)
MCAPI::SemVersion const & $getVersionOfKnownSkinPack(::mce::UUID const &packId) const
MCAPI bool _tryLoadSkinPack(::gsl::not_null<::std::shared_ptr<::Pack > > pack, bool loadGeometry, bool notifyPlayerOnFailure)
MCAPI void $loadSkin(::ResourceLocation const &skinLocation)
MCAPI bool $isKnownSkinPackUnLoaded(::mce::UUID const &packId) const
MCAPI bool $loadCustomSkinTexture(::ResourceLocation const &skinLocation)
MCAPI void $reloadSkinPackLocText()
MCAPI void $cancelPendingLoads()
MCAPI void _unloadAndDeleteSkinPack(::mce::UUID const &packId, ::SkinRepository::EntryDisposition disposition)
MCAPI bool $isValidSkin(::ResourceLocation const &skinLocation) const
MCAPI ::Core::PathBuffer<::Core::BasicStackString< char, 1024 > > $storeCustomSkin(::ResourceLocation const &sourceLocation)
MCAPI bool $canPickSkin() const
MCAPI void * $ctor(::std::shared_ptr<::mce::TextureGroup > textureGroup, ::Bedrock::NotNullNonOwnerPtr<::IResourcePackRepository > resourcePackRepository, ::Bedrock::NotNullNonOwnerPtr<::IPackManifestFactory > manifestFactory, ::Bedrock::NotNullNonOwnerPtr<::IPackSourceFactory > packSourceFactory, ::Bedrock::NotNullNonOwnerPtr<::IEntitlementManager > entitlementManager, ::Bedrock::NotNullNonOwnerPtr<::IContentKeyProvider const > keyProvider, ::Bedrock::NotNullNonOwnerPtr<::Core::FilePathManager > filePathManager)
MCAPI void $forEachPack(::std::function< void(::Pack const &)> const &callback) const
MCAPI bool $loadSkinPack(::mce::UUID const &packId)
MCAPI uint64 $getLoadingSkinPackCount() const
MCAPI bool $isSkinPackLoaded(::mce::UUID const &packId) const
MCAPI ::std::vector<::Pack const * > const $getKnownSkinPacks() const
MCAPI bool $importSkinPack(::gsl::not_null<::std::shared_ptr<::Pack > > pack, bool isTitleLocked)
MCAPI bool $isSkinPackKnown(::mce::UUID const &packId) const
MCAPI::Skin const * $getSkin(::SkinHandle const &skinHandle) const
MCAPI void _touchSkinPack(::mce::UUID const &packId, ::SkinRepository::SkinPackEntry const &entry) const
Definition TaskGroup.h:85
Definition TextureGroup.h:7
Definition SkinRepository.h:18
Definition SkinRepository.h:20
MCAPI void markLoaded(::std::unique_ptr<::SkinPack > skinPack)
Definition PackEvictionDrainSnapshot.h:7
Definition PackEvictionPass.h:7
Definition PackEvictionTarget.h:7
Definition PackEvictionTelemetrySnapshot.h:7