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 Json {
class Value; }
45 using BlockDataValuesMap = ::std::unordered_map<::HashedString, ::std::vector<::Json::Value>>;
47 using BlockTessellationInfoMap =
48 ::std::unordered_map<::HashedString, ::BlockTessellationFallbackUtils::TessellationConfigInfo>;
53 ::ll::TypedStorage<8, 8, ::Block const*> mBlock;
54 ::ll::TypedStorage<4, 4, ::BlockShape> mBlockShape;
55 ::ll::TypedStorage<4, 4, float> mAmbientOcclusionExponent;
56 ::ll::TypedStorage<1, 1, bool> mFancy;
57 ::ll::TypedStorage<1, 1, bool> mAllowSame;
58 ::ll::TypedStorage<1, 1, ::BlockRenderLayer> mRenderLayer;
59 ::ll::TypedStorage<1, 1, ::IsotropicFaceData> mIsotropicFaceData;
60 ::ll::TypedStorage<8, 32, ::std::string> mSoundType;
61 ::ll::TypedStorage<4, 24, ::AABB> mVisualShape;
62 ::ll::TypedStorage<8, 24, ::std::vector<::TextureItem>> mTextureItems;
63 ::ll::TypedStorage<8, 8, uint64> mIconTextureIndex;
73 virtual ~BlockGraphics() =
default;
75 virtual ::BlockRenderLayer getRenderLayer(::BlockSource& region, ::BlockPos
const& pos)
const;
77 virtual int getColor(
int auxData)
const;
79 virtual int getColor(::BlockSource& region, ::BlockPos
const& pos)
const;
81 virtual bool isSeasonTinted(::BlockSource& region, ::BlockPos
const& p)
const;
83 virtual void onGraphicsModeChanged(
bool fancy,
bool fancyBubbles);
85 virtual int getExtraRenderLayers();
87 virtual ::TextureUVCoordinateSet
const& getCarriedTexture(uint64 textureSlot,
int blockVariant)
const;
89 virtual void setVisualShape(::AABB
const& shape);
91 virtual void setVisualShape(::Vec3
const& min, ::Vec3
const& max);
97 MCAPI
explicit BlockGraphics(::std::string
const& nameId);
99 MCAPI
void _logBlockTextureError(::fmt::v11::fstring<char const*>
const& error)
const;
101 MCFOLD ::BlockRenderLayer getRenderLayer()
const;
103 MCAPI ::TextureUVCoordinateSet
const& getTexture(uint64 textureSlot, ::Block
const& block)
const;
105 MCAPI ::TextureUVCoordinateSet
const& getTexture(uint64 textureSlot,
int blockVariant)
const;
107 MCAPI ::TextureUVCoordinateSet
const& getTexture(::BlockPos
const& p, uint64 textureSlot,
int blockVariant)
const;
109 MCAPI ::TextureUVCoordinateSet
const&
110 getTexture(::BlockPos
const& pos, uint64 textureSlot, ::Block
const& block)
const;
112 MCAPI ::std::vector<::TextureUVCoordinateSet>
const&
113 getTextureCarriedVariations(uint64 textureSlot,
int blockVariant)
const;
115 MCAPI ::std::vector<::TextureUVCoordinateSet>
const&
116 getTextureDefaultVariations(uint64 textureSlot,
int blockVariant)
const;
118 MCAPI
bool isFull()
const;
120 MCAPI
bool isFullAndOpaque()
const;
122 MCAPI ::BlockGraphics& setCarriedTextureItem(
123 ::std::string
const& nameUp,
124 ::std::string
const& nameDown,
125 ::std::string
const& nameNorth,
126 ::std::string
const& nameSouth,
127 ::std::string
const& nameWest,
128 ::std::string
const& nameEast
131 MCAPI
void setDefaultCarriedTextures();
133 MCAPI ::BlockGraphics& setTextureItem(
134 ::std::string
const& nameUp,
135 ::std::string
const& nameDown,
136 ::std::string
const& nameNorth,
137 ::std::string
const& nameSouth,
138 ::std::string
const& nameWest,
139 ::std::string
const& nameEast
146 MCAPI
static void _extractComplexAliasBlockData(
147 ::HashedString
const& blockName,
148 ::Json::Value
const& member,
149 ::std::unordered_map<::HashedString, ::std::vector<::Json::Value>>& output,
150 ::std::vector<::WeakPtr<::BlockType>>& blockTypes
153 MCAPI
static void _initBlockModels(::ResourcePackManager& packManager);
155 MCAPI static ::BlockGraphics* createBlockGraphics(::HashedString
const& name, ::BlockShape defaultBlockShape);
157 MCAPI
static void detectAndRegisterTessellationFallbacks(
158 ::std::unordered_map<::HashedString, ::BlockTessellationFallbackUtils::TessellationConfigInfo>&
159 blockTessellationInfoMap
162 MCAPI static ::std::vector<::WeakPtr<::BlockType>> extractBlockDataValues(
163 ::Json::ValueIterator
const& memberIterator,
164 ::std::unordered_map<::HashedString, ::std::vector<::Json::Value>>& output,
165 ::SemVersion
const& formatVersion
168 MCAPI
static void extractBlockDataValuesFromFileContents(
169 ::Experiments
const& experiments,
170 ::std::vector<::LoadedResourceData>
const& contents,
171 ::std::unordered_map<::HashedString, ::std::vector<::Json::Value>>& blockDataValuesMap,
172 ::std::unordered_map<::HashedString, ::BlockTessellationFallbackUtils::TessellationConfigInfo>&
173 blockTessellationInfoMap
176 MCAPI static ::BlockGraphics
const* getForBlock(::Block
const& block);
178 MCAPI static ::TextureAtlasItem
const& getTextureItem(
179 ::std::string
const& name,
180 ::std::weak_ptr<::AtlasItemManager> terrainTextureAtlas,
181 ::std::unordered_map<::std::string, ::TextureAtlasItem>& complexTextureItems
184 MCAPI static ::TextureUVCoordinateSet
185 getTextureUVCoordinateSet(::std::string
const& name,
int blockVariant,
int textureVariant);
187 MCAPI
static bool hasOldTessellationFallback(::Block
const& block);
189 MCAPI
static void initBlocks(::ResourcePackManager& packManager, ::Experiments
const& experiments);
191 MCAPI
static bool isFullAndOpaque(::Block
const& block);
193 MCAPI static ::SemVersion loadBlockDataFormatVersion(::Json::Value
const& root);
195 MCAPI static ::BlockGraphics& registerBlockGraphics(
196 ::std::unordered_map<::HashedString, ::std::vector<::Json::Value>>& blockDataValuesMap,
197 ::HashedString
const& name,
198 ::BlockShape defaultBlockShape
202 registerLooseBlockGraphics(::std::unordered_map<::HashedString, ::std::vector<::Json::Value>>& blockDataValuesMap);
204 MCAPI
static bool setBlockShape(::BlockGraphics& block, ::Json::Value
const& blockShapeData);
206 MCAPI
static bool setCarriedTextures(::BlockGraphics& block, ::Json::Value
const& textureData);
208 MCAPI
static bool setTextures(::BlockGraphics& block, ::Json::Value
const& textureData);
210 MCAPI
static void teardownBlocks();
216 MCAPI static ::std::string
const& NORMAL_SOUND();
218 MCAPI static ::std::unordered_map<::std::string, ::BlockGraphics*>& mBlockLookupMap();
220 MCAPI static ::Bedrock::Threading::Mutex& mBlockModelAccess();
222 MCAPI static ::std::unordered_map<uint, ::BlockGraphics*>& mBlocks();
224 MCAPI static ::std::unique_ptr<::BlockGraphics>& mDummyBlock();
226 MCAPI
static bool& mInitialized();
228 MCAPI static ::std::map<::std::string, ::std::unique_ptr<::BlockGeometry::Model>>& mModels();
230 MCAPI static ::std::vector<::std::unique_ptr<::BlockGraphics>>& mOwnedBlocks();
232 MCAPI static ::std::weak_ptr<::AtlasItemManager>& mTerrainTextureAtlas();
234 MCAPI static ::std::unordered_set<uint>& mVanillaBlocksWithFallbackToOldTessellation();
236 MCAPI static ::std::unordered_map<::std::string, ::TextureAtlasItem>& sComplexTextureItems();
242 MCAPI
void* $ctor(::std::string
const& nameId);
248 MCFOLD ::BlockRenderLayer $getRenderLayer(::BlockSource& region, ::BlockPos
const& pos)
const;
250 MCFOLD
int $getColor(
int auxData)
const;
252 MCFOLD
int $getColor(::BlockSource& region, ::BlockPos
const& pos)
const;
254 MCFOLD
bool $isSeasonTinted(::BlockSource& region, ::BlockPos
const& p)
const;
256 MCAPI
void $onGraphicsModeChanged(
bool fancy,
bool fancyBubbles);
258 MCFOLD
int $getExtraRenderLayers();
260 MCAPI ::TextureUVCoordinateSet
const& $getCarriedTexture(uint64 textureSlot,
int blockVariant)
const;
262 MCAPI
void $setVisualShape(::AABB
const& shape);
264 MCAPI
void $setVisualShape(::Vec3
const& min, ::Vec3
const& max);
Definition AtlasItemManager.h:5
Definition BlockGraphics.h:5
static MCAPI void ** $vftable()
Definition BlockSource.h:71
Definition BlockType.h:84
Definition Experiments.h:14
Definition HashedString.h:5
Definition ValueIterator.h:16
Definition LoadedResourceData.h:5
Definition ResourcePackManager.h:30
Definition SemVersion.h:15
Definition TextureAtlasItem.h:5
Definition BlockGraphics.h:13
Definition TessellationConfigInfo.h:7
Definition TextureItem.h:5
Definition TextureUVCoordinateSet.h:5