3#include "mc/_HeaderOutputPredefine.h"
6#include "mc/client/renderer/texture/IsotropicFaceData.h"
7#include "mc/common/WeakPtr.h"
8#include "mc/world/level/block/BlockRenderLayer.h"
9#include "mc/world/level/block/BlockShape.h"
10#include "mc/world/phys/AABB.h"
28namespace Bedrock::Threading {
class Mutex; }
29namespace BlockGeometry {
struct Model; }
31namespace ClientBlockPipeline {
struct TextureUVs; }
32namespace Json {
class Value; }
46 using BlockDataValuesMap = ::std::unordered_map<::HashedString, ::std::vector<::Json::Value>>;
48 using BlockTessellationInfoMap =
49 ::std::unordered_map<::HashedString, ::BlockTessellationFallbackUtils::TessellationConfigInfo>;
54 ::ll::TypedStorage<8, 8, ::Block const*> mBlock;
55 ::ll::TypedStorage<4, 4, ::BlockShape> mBlockShape;
56 ::ll::TypedStorage<4, 4, float> mAmbientOcclusionExponent;
57 ::ll::TypedStorage<1, 1, bool> mFancy;
58 ::ll::TypedStorage<1, 1, bool> mAllowSame;
59 ::ll::TypedStorage<1, 1, ::BlockRenderLayer> mRenderLayer;
60 ::ll::TypedStorage<1, 1, ::IsotropicFaceData> mIsotropicFaceData;
61 ::ll::TypedStorage<8, 32, ::std::string> mSoundType;
62 ::ll::TypedStorage<4, 24, ::AABB> mVisualShape;
63 ::ll::TypedStorage<8, 24, ::std::vector<::TextureItem>> mTextureItems;
64 ::ll::TypedStorage<8, 8, uint64> mIconTextureIndex;
74 virtual ~BlockGraphics();
76 virtual ::BlockRenderLayer getRenderLayer(::BlockSource&, ::BlockPos
const&)
const;
78 virtual int getColor(
int)
const;
80 virtual int getColor(::BlockSource&, ::BlockPos
const&)
const;
82 virtual bool isSeasonTinted(::BlockSource&, ::BlockPos
const&)
const;
84 virtual void onGraphicsModeChanged(
bool fancy,
bool fancyBubbles);
86 virtual int getExtraRenderLayers();
88 virtual ::TextureUVCoordinateSet
const& getCarriedTexture(uint64 textureSlot,
int blockVariant)
const;
90 virtual void setVisualShape(::AABB
const& shape);
92 virtual void setVisualShape(::Vec3
const& min, ::Vec3
const& max);
98 MCAPI
explicit BlockGraphics(::std::string
const& nameId);
100 MCAPI
void _logBlockTextureError(::fmt::v11::fstring<char const*>
const& error)
const;
102 MCFOLD
float getAmbientOcclusionExponent()
const;
104 MCAPI ::TextureAtlasItem
const& getAtlasItem(uint64 textureSlot)
const;
106 MCFOLD ::Block
const* getBlock()
const;
108 MCFOLD ::BlockShape getBlockShape()
const;
110 MCAPI ::std::string
const getDefaultTextureName(uint64 textureSlot)
const;
112 MCAPI ::TextureUVCoordinateSet
const& getIconTexture(
int blockVariant)
const;
114 MCFOLD ::BlockRenderLayer getRenderLayer()
const;
116 MCFOLD ::std::string
const& getSoundType()
const;
118 MCAPI ::TextureUVCoordinateSet
const& getTexture(uint64 textureSlot,
int blockVariant)
const;
120 MCAPI ::TextureUVCoordinateSet
const& getTexture(::BlockPos
const& p, uint64 textureSlot,
int blockVariant)
const;
122 MCAPI ::std::vector<::TextureUVCoordinateSet>
const&
123 getTextureDefaultVariations(uint64 textureSlot,
int blockVariant)
const;
125 MCAPI
bool isFull()
const;
127 MCAPI
bool isFullAndOpaque()
const;
129 MCAPI
bool isValid()
const;
131 MCAPI ::BlockGraphics& setCarriedTextureItem(
132 ::std::string
const& nameUp,
133 ::std::string
const& nameDown,
134 ::std::string
const& nameNorth,
135 ::std::string
const& nameSouth,
136 ::std::string
const& nameWest,
137 ::std::string
const& nameEast
140 MCAPI
void setDefaultCarriedTextures();
142 MCFOLD
void setSoundType(::std::string type);
144 MCAPI ::BlockGraphics& setTextureItem(
145 ::std::string
const& nameUp,
146 ::std::string
const& nameDown,
147 ::std::string
const& nameNorth,
148 ::std::string
const& nameSouth,
149 ::std::string
const& nameWest,
150 ::std::string
const& nameEast
157 MCAPI
static void _extractComplexAliasBlockData(
158 ::HashedString
const& blockName,
159 ::Json::Value
const& member,
160 ::std::unordered_map<::HashedString, ::std::vector<::Json::Value>>& output,
161 ::std::vector<::WeakPtr<::BlockType>>& blockTypes
164 MCAPI
static void _initBlockModels(::ResourcePackManager& packManager);
166 MCAPI static ::TextureUVCoordinateSet
const&
167 chooseRandomTexture(
float random, ::std::vector<::TextureUVCoordinateSet>
const& uvsets);
170 chooseRandomTextureIndex(
float random, ::std::vector<::ClientBlockPipeline::TextureUVs>
const& uvsets);
172 MCAPI static ::BlockGraphics* createBlockGraphics(::HashedString
const& name, ::BlockShape defaultBlockShape);
174 MCAPI
static void detectAndRegisterTessellationFallbacks(
175 ::std::unordered_map<::HashedString, ::BlockTessellationFallbackUtils::TessellationConfigInfo>&
176 blockTessellationInfoMap
179 MCAPI
static void disableBlockType(::BlockType
const& blockType);
181 MCAPI static ::std::vector<::WeakPtr<::BlockType>> extractBlockDataValues(
182 ::Json::ValueIterator
const& memberIterator,
183 ::std::unordered_map<::HashedString, ::std::vector<::Json::Value>>& output,
184 ::SemVersion
const& formatVersion
187 MCAPI
static void extractBlockDataValuesFromFileContents(
188 ::Experiments
const& experiments,
189 ::std::vector<::LoadedResourceData>
const& contents,
190 ::std::unordered_map<::HashedString, ::std::vector<::Json::Value>>& blockDataValuesMap,
191 ::std::unordered_map<::HashedString, ::BlockTessellationFallbackUtils::TessellationConfigInfo>&
192 blockTessellationInfoMap
195 MCAPI static ::std::unordered_map<uint, ::BlockGraphics*>
const& getBlocks();
197 MCAPI static ::BlockGraphics
const* getForBlock(::Block
const& block);
199 MCAPI static ::BlockGraphics
const* getForBlock(::BlockType
const& block);
201 MCAPI static ::BlockGraphics
const* getForBlock(uint blockID);
203 MCAPI static ::TextureAtlasItem
const& getTextureItem(
204 ::std::string
const& name,
205 ::std::weak_ptr<::AtlasItemManager> terrainTextureAtlas,
206 ::std::unordered_map<::std::string, ::TextureAtlasItem>& complexTextureItems
209 MCAPI static ::TextureUVCoordinateSet
210 getTextureUVCoordinateSet(::std::string
const& name,
int blockVariant,
int textureVariant);
212 MCAPI
static bool hasOldTessellationFallback(::Block
const& block);
214 MCAPI
static void initBlocks(::ResourcePackManager& packManager, ::Experiments
const& experiments);
216 MCAPI
static bool isFullAndOpaque(::Block
const& block);
218 MCAPI
static bool isInitialized();
220 MCAPI static ::SemVersion loadBlockDataFormatVersion(::Json::Value
const& root);
222 MCAPI static ::BlockGraphics& registerBlockGraphics(
223 ::std::unordered_map<::HashedString, ::std::vector<::Json::Value>>& blockDataValuesMap,
224 ::HashedString
const& name,
225 ::BlockShape defaultBlockShape
229 registerLooseBlockGraphics(::std::unordered_map<::HashedString, ::std::vector<::Json::Value>>& blockDataValuesMap);
231 MCAPI
static void setAtlasItemManager(::std::shared_ptr<::AtlasItemManager> atlasItemManager);
233 MCAPI
static bool setBlockShape(::BlockGraphics& block, ::Json::Value
const& blockShapeData);
235 MCAPI
static bool setCarriedTextures(::BlockGraphics& block, ::Json::Value
const& textureData);
237 MCAPI
static bool setTextures(::BlockGraphics& block, ::Json::Value
const& textureData);
239 MCAPI
static void teardownBlocks();
245 MCAPI static ::std::string
const& NORMAL_SOUND();
247 MCAPI static ::std::unordered_map<::std::string, ::BlockGraphics*>& mBlockLookupMap();
249 MCAPI static ::Bedrock::Threading::Mutex& mBlockModelAccess();
251 MCAPI static ::std::unordered_map<uint, ::BlockGraphics*>& mBlocks();
253 MCAPI static ::std::unique_ptr<::BlockGraphics>& mDummyBlock();
255 MCAPI
static bool& mInitialized();
257 MCAPI static ::std::map<::std::string, ::std::unique_ptr<::BlockGeometry::Model>>& mModels();
259 MCAPI static ::std::vector<::std::unique_ptr<::BlockGraphics>>& mOwnedBlocks();
261 MCAPI static ::std::weak_ptr<::AtlasItemManager>& mTerrainTextureAtlas();
263 MCAPI static ::std::unordered_set<uint>& mVanillaBlocksWithFallbackToOldTessellation();
265 MCAPI static ::std::unordered_map<::std::string, ::TextureAtlasItem>& sComplexTextureItems();
271 MCAPI
void* $ctor(::std::string
const& nameId);
283 MCFOLD ::BlockRenderLayer $getRenderLayer(::BlockSource&, ::BlockPos
const&)
const;
285 MCFOLD
int $getColor(
int)
const;
287 MCFOLD
int $getColor(::BlockSource&, ::BlockPos
const&)
const;
289 MCFOLD
bool $isSeasonTinted(::BlockSource&, ::BlockPos
const&)
const;
291 MCAPI
void $onGraphicsModeChanged(
bool fancy,
bool fancyBubbles);
293 MCFOLD
int $getExtraRenderLayers();
295 MCAPI ::TextureUVCoordinateSet
const& $getCarriedTexture(uint64 textureSlot,
int blockVariant)
const;
297 MCAPI
void $setVisualShape(::AABB
const& shape);
299 MCAPI
void $setVisualShape(::Vec3
const& min, ::Vec3
const& max);
Definition AtlasItemManager.h:5
Definition BlockGraphics.h:5
static MCAPI void ** $vftable()
Definition BlockSource.h:73
Definition BlockType.h:84
Definition Experiments.h:14
Definition HashedString.h:5
Definition ValueIterator.h:16
Definition LoadedResourceData.h:5
Definition ResourcePackManager.h:35
Definition SemVersion.h:15
Definition TextureAtlasItem.h:5
Definition BlockGraphics.h:13
Definition TessellationConfigInfo.h:7
Definition TextureUVs.h:7
Definition TextureItem.h:5
Definition TextureUVCoordinateSet.h:5