28class BlockTypeRegistry {
39 enum class LookupByNameImplResolve :
int {
44 struct BlockComplexAliasBlockState {
46 BlockComplexAliasBlockState(
HashedString const& stateName,
int value) noexcept
47 : stateName(stateName),
64 class BlockComplexAliasContent {
68 ::ll::TypedStorage<8, 64, ::std::function<
::Block const*(int)>> mCallback;
69 ::ll::TypedStorage<8, 32, ::BaseGameVersion> mMinRequiredVersion;
70 ::ll::TypedStorage<8, 24, ::SemVersion> mFlattenedInBlocksJsonVersion;
71 ::ll::TypedStorage<4, 4, int> mStartVariant;
76 BlockComplexAliasContent& operator=(BlockComplexAliasContent
const&);
77 BlockComplexAliasContent(BlockComplexAliasContent
const&);
78 BlockComplexAliasContent();
83 MCFOLD ::Block
const* operator()(
int data)
const;
87 MCAPI ~BlockComplexAliasContent();
97 struct DirectAccessBlocks {
101 ::ll::TypedStorage<8, 8, ::BlockType const&> mAirBlock;
106 DirectAccessBlocks& operator=(DirectAccessBlocks
const&);
107 DirectAccessBlocks(DirectAccessBlocks
const&);
108 DirectAccessBlocks();
111 struct LookupByNameImplReturnType {
115 ::ll::TypedStorage<8, 8, ::WeakPtr<::BlockType const>> mBlockType;
116 ::ll::TypedStorage<8, 8, ::Block const*> mBlock;
121 LookupByNameImplReturnType();
126 MCAPI LookupByNameImplReturnType(
::Block const* block,
bool resolveBlockType);
132 MCAPI ~LookupByNameImplReturnType();
138 MCAPI
void* $ctor(
::Block const* block,
bool resolveBlockType);
152 using BlockAliasLookupMap = ::std::unordered_map<::HashedString, ::HashedString>;
154 using BlockComplexAliasCallback = ::std::function<
::Block const*(int)>;
156 using BlockComplexAliasLookupMap = ::entt::dense_map<::HashedString, ::BlockTypeRegistry::BlockComplexAliasContent>;
158 using BlockComplexAliasPostSplitBlockNames = ::std::vector<::std::reference_wrapper<::HashedString const>>;
160 using BlockComplexAliasPostSplitBlockNamesList =
161 ::std::vector<::std::vector<::std::reference_wrapper<::HashedString const>>>;
162 using BlockComplexAliasPostSplitBlockNamesLookupMap = ::entt::dense_map<uint64, uint64>;
164 using BlockLookupMap = ::std::map<::HashedString, ::SharedPtr<::BlockType>>;
166 using BlockNameHashToHashedStringMap = ::entt::dense_map<uint64, ::HashedString>;
171 ::ll::TypedStorage<8, 16, ::std::map<::HashedString, ::SharedPtr<::BlockType>>> mBlockLookupMap;
172 ::ll::TypedStorage<8, 64, ::std::unordered_map<::HashedString, ::HashedString>> mBlockAliasLookupMap;
173 ::ll::TypedStorage<8, 72, ::entt::dense_map<::HashedString, ::BlockTypeRegistry::BlockComplexAliasContent>>
174 mBlockComplexAliasLookupMap;
175 ::ll::TypedStorage<8, 24, ::std::vector<::std::vector<::std::reference_wrapper<::HashedString const>>>>
176 mBlockComplexAliasPostSplitBlockNamesList;
177 ::ll::TypedStorage<8, 72, ::entt::dense_map<uint64, uint64>> mBlockComplexAliasPostSplitBlockNamesLookupMap;
178 ::ll::TypedStorage<8, 16, ::std::map<::HashedString, ::HashedString>> mBlockComplexAliasPreSplitBlockNamesLookupMap;
179 ::ll::TypedStorage<8, 16, ::std::set<::std::string>> mKnownNamespaces;
180 ::ll::TypedStorage<8, 72, ::entt::dense_map<uint64, ::HashedString>> mBlockNameHashToStringMap;
181 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::BlockTypeRegistry::DirectAccessBlocks>> mDirectAccessBlocks;
182 ::ll::TypedStorage<8, 16, ::std::shared_ptr<::BlockTypeRegistryRWLock>> mRWLock;
188 MCAPI BlockTypeRegistry();
190 MCAPI ::BlockTypeRegistryReadLock _lockAgainstRegistryModifications()
const;
192 MCAPI ::BlockTypeRegistryModificationsLock _lockForRegistryModifications()
const;
194 MCAPI ::BlockTypeRegistry::LookupByNameImplReturnType _lookupByNameImpl(
197 ::BlockTypeRegistry::LookupByNameImplResolve resolve,
198 bool logNotFound =
false
204 MCAPI
void checkBlockPermutationCap()
const;
206 MCAPI uint64 computeBlockTypeRegistryChecksum(
::BaseGameVersion const& worldBaseGameVersion)
const;
208 MCAPI
void finalizeBlockComponentStorage();
218 MCAPI ::HashedString
const& getBlockNameFromNameHash(uint64 hash)
const;
220 MCAPI ::std::vector<::std::reference_wrapper<::HashedString const>>
const&
221 getComplexAliasPostSplitBlockNames(
::HashedString const& oldName)
const;
223 MCAPI ::Block
const& getDefaultBlockState(
::HashedString const& name,
bool logNotFound =
false)
const;
225 MCAPI ::BlockTypeRegistry::DirectAccessBlocks
const& getDirectAccessBlocks()
const;
227 MCAPI_C
int getStartVariantForComplexAliasBlock(
::HashedString const& blockName)
const;
229 MCAPI
void initHardCodedBlockComponents(
::Experiments const& experiments);
231 MCAPI
bool isComplexAliasBlock(
::HashedString const& blockName)
const;
236 MCAPI ::WeakPtr<::BlockType> lookupByName(
::HashedString const& name,
bool logNotFound =
false)
const;
238 MCAPI
void prepareBlocks(uint latestUpdaterVersion);
242 MCAPI
void registerComplexAlias(
244 ::std::function<
::Block const*(
int)> callback,
245 ::std::vector<::std::reference_wrapper<::HashedString const>>
const& postSplitBlockNames,
252 MCAPI
void setupDirectAccessBlocks();
254 MCAPI
void setupVoxelShapeRegistryAccessOnAllBlocks(
255 ::std::shared_ptr<::VoxelShapes::VoxelShapeRegistry>
const& voxelShapeRegistry
260 MCAPI
void unregisterBlocks();
262 MCAPI ~BlockTypeRegistry();
268 MCAPI static ::BlockTypeRegistry& get();
274 MCAPI static ::Bedrock::Owner<::BlockTypeRegistry>& mBlockTypeRegistry();