71 using BlockStateValueType = std::variant<int, float, bool, std::string>;
72 using BlockStatesType = std::vector<std::pair<std::string, BlockStateValueType>>;
79 tryGetFromRegistry(
HashedString const& name, BlockStatesType
const& states);
82 LLNDAPI
bool isAir()
const;
84 [[nodiscard]]
BlockType const& getBlockType()
const {
return *mBlockType; }
86 [[nodiscard]] std::string
const& getTypeName()
const {
return getBlockType().getTypeName(); }
88 [[nodiscard]]
unsigned short getBlockItemId()
const {
return getBlockType().mID->mValue; }
90 [[nodiscard]] ushort getData()
const {
return mData; }
93 std::optional<T> getState(uint64
id)
const {
94 return mBlockType->getState<T>(id, mData);
98 std::optional<T> getState(
BlockState const& state)
const {
99 return mBlockType->getState<T>(state, mData);
102 template <
typename T>
104 return mBlockType->trySetState(
id, value, mData);
107 template <
typename T>
109 return mBlockType->trySetState(state, value, mData);
112 bool operator==(Block
const& other)
const {
return mSerializationIdHash == other.mSerializationIdHash; }
117 ::ll::TypedStorage<8, 96, ::BlockComponentStorage> mComponents;
118 ::ll::TypedStorage<8, 8, ::gsl::not_null<::BlockType*>> mBlockType;
119 ::ll::TypedStorage<4, 8, ::CachedComponentData> mCachedComponentData;
120 ::ll::TypedStorage<8, 96, ::BlockComponentDirectData> mDirectData;
121 ::ll::TypedStorage<8, 24, ::std::vector<::HashedString>> mTags;
122 ::ll::TypedStorage<8, 24, ::CompoundTag> mSerializationId;
123 ::ll::TypedStorage<8, 8, uint64> mSerializationIdHash;
124 ::ll::TypedStorage<4, 4, uint> mSerializationIdHashForNetwork;
125 ::ll::TypedStorage<4, 4, uint> mNetworkId;
126 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::IClientBlockData>> mClientData;
127 ::ll::TypedStorage<2, 2, ushort const> mData;
128 ::ll::TypedStorage<1, 1, bool> mHasRuntimeId;
144 MCAPI Block(ushort data, ::gsl::not_null<::BlockType*> oldBlock);
146 MCAPI Block(ushort data, ::gsl::not_null<::BlockType*> oldBlock,
::CompoundTag serId, uint
const& runId);
148 MCAPI ::BlockOcclusionType _getBlockOcclusionType()
const;
150 MCAPI
bool _isSolid()
const;
156 MCAPI
void _queueForTickBasedOnComponentConfiguration(
165 MCAPI
bool accumulatesSnow(
bool fromFallingSnow)
const;
170 ::AABB const* intersectTestBox,
171 ::std::vector<::AABB>& inoutBoxes
174 MCAPI
bool addCollisionShapes(
177 ::AABB const* intersectTestBox,
178 ::std::vector<::AABB>& inoutBoxes,
186 MCAPI
bool allowStateMismatchOnPlacement(::Block
const& other)
const;
202 MCAPI ::std::string buildDescriptionId()
const;
204 MCAPI ::std::string buildDescriptionName()
const;
206 MCAPI
void buildSerializationId(uint latestUpdaterVersion);
208 MCAPI
void cacheComponentData();
214 MCAPI
bool canBeBrokenFromFalling()
const;
222 MCAPI
bool canBeOriginalSurface(
bool aboveSeaLevel)
const;
224 MCAPI
bool canConnect(::Block
const& connectionBlock, uchar toOther)
const;
228 MCAPI
bool canHaveExtraData()
const;
230 MCAPI
bool canHurtAndBreakItem()
const;
232 MCAPI
bool canInstatick()
const;
234 MCAPI
bool canProvideFullSupport(uchar face)
const;
236 MCAPI
bool canProvideMultifaceSupport(uchar face)
const;
238 MCAPI
bool canProvideSupport(uchar face, ::BlockSupportType type)
const;
240 MCAPI
bool canReactToNeighborsDuringInstatick()
const;
243 MCAPI
bool canRedstoneWirePassThrough()
const;
245 MCAPI
bool canRenderSelectionOverlay(::BlockRenderLayer heldItemRenderLayer)
const;
252 MCAPI
bool causesFreezeEffect()
const;
258 MCAPI ::HitResult clip(
263 ::ShapeType shapeType,
267 MCAPI uint computeRawSerializationIdHashForNetwork()
const;
269 MCAPI ::Block
const& connectionUpdate(
275 MCAPI ::Block
const& copyState(::Block
const& fromBlock,
::BlockState const& state)
const;
277 MCAPI ::Block
const& copyStates(::Block
const& fromBlock)
const;
279 MCAPI
bool dealsContactDamage(
::Actor const& actor,
bool isPathFinding)
const;
285 MCAPI
void executeItemEvent(
287 ::std::string
const& eventName,
293 MCAPI
void finalizeBlockComponentStorage();
297 MCAPI
bool getAllowsRunes()
const;
299 MCAPI ::BlockActorType getBlockEntityType()
const;
303 MCAPI
int getBurnOdds()
const;
305 MCAPI
bool getClientPredictionOverride(::BlockClientPredictionOverrides type)
const;
307 MCAPI
bool getCollisionShape(
319 MCAPI ::BlockType::HorizontalDirectionBits
322 MCAPI ::std::optional<::ConnectionID> getConnectionID()
const;
325 MCAPI ::std::string getCraftingLabelText()
const;
327 MCAPI ::SharedTypes::CreativeItemCategory getCreativeCategory()
const;
329 MCAPI ::HashedString
const& getCullingLayer()
const;
332 MCAPI
void getDebugText(::std::vector<::std::string>& outputInfo,
::BlockPos const& debugPos)
const;
334 MCAPI ::std::string getDescriptionId()
const;
336 MCAPI
float getDestroySpeed()
const;
342 MCAPI ::std::string getDisplayName()
const;
345 MCAPI ::Brightness getEmissiveBrightness()
const;
348 MCAPI ::BlockEvents::BlockEventManager
const& getEventManager()
const;
350 MCAPI
int getExperienceDrop(
::Random& random)
const;
352 MCAPI
float getExplosionResistance()
const;
355 MCAPI
int getExtraRenderLayers()
const;
358 MCAPI
int getFlameOdds()
const;
360 MCAPI
float getFriction()
const;
362 MCAPI
bool getIgnoresDestroyPermissions(
::Actor& entity,
::BlockPos const& pos)
const;
364 MCAPI ::Brightness getLight()
const;
366 MCAPI ::Brightness getLightEmission()
const;
375 MCAPI uchar getMappedFace(uchar face)
const;
378 MCAPI ::Material
const& getMaterial()
const;
383 MCAPI ::VoxelShapes::VoxelShape
const* getOcclusionFaceShape(uchar face)
const;
385 MCAPI ::VoxelShapes::VoxelShape
const* getOcclusionShape()
const;
387 MCFOLD ::BlockOcclusionType getOcclusionType()
const;
392 MCAPI ::Block
const& getPlacementBlock(
400 MCAPI ::Vec3 getRandomOffset(
::BlockPos const& pos)
const;
402 MCFOLD uint
const& getRuntimeId()
const;
406 MCFOLD ::CompoundTag
const& getSerializationId()
const;
409 MCAPI
float getShadeBrightness()
const;
412 MCAPI
float getThickness()
const;
415 MCAPI ::TintMethod getTintMethod()
const;
418 MCAPI
float getTranslucency()
const;
421 MCAPI ::AABB
const& getUIShape(
::AABB& bufferAABB)
const;
424 MCAPI
int getVariant()
const;
426 MCAPI ::AABB
const& getVisualShape(
::AABB& bufferAABB)
const;
431 MCAPI
bool hasBlockEntity()
const;
433 MCAPI
bool hasComparatorSignal()
const;
435 MCAPI
bool hasProperty(::BlockProperty type)
const;
438 MCAPI
bool const hasRuntimeId()
const;
441 MCAPI
bool hasTag(uint64
const& hash)
const;
446 MCAPI
bool ignoreBlockForInsideCubeRenderer()
const;
449 MCAPI
bool ignoreEntitiesOnPistonMove()
const;
453 MCAPI
bool isButtonBlock()
const;
455 MCAPI
bool isContainerBlock()
const;
458 MCAPI
bool isCraftingBlock()
const;
461 MCAPI
bool isCropBlock()
const;
463 MCAPI
bool isDoorBlock()
const;
465 MCAPI
bool isEmpty()
const;
467 MCAPI
bool isFallingBlock()
const;
469 MCAPI
bool isFenceBlock()
const;
471 MCAPI
bool isFenceGateBlock()
const;
473 MCAPI
bool isFilteredOut(::BlockRenderLayer heldItemRenderLayer)
const;
475 MCAPI
bool isFullBlockGeometry()
const;
477 MCAPI
bool isInteractiveBlock()
const;
479 MCAPI
bool isLavaBlocking()
const;
481 MCAPI
bool isLavaFlammable()
const;
483 MCAPI
bool isLeverBlock()
const;
485 MCAPI
bool isMotionBlockingBlock()
const;
487 MCAPI
bool isMultifaceBlock()
const;
489 MCAPI
bool isOpaqueFullBlock()
const;
493 MCAPI
bool isPreservingMediumWhenPlaced(::Block
const& medium)
const;
495 MCAPI
bool isRailBlock()
const;
501 MCAPI
bool isSignalSource()
const;
503 MCAPI
bool isSlabBlock()
const;
505 MCFOLD
bool isSolid()
const;
507 MCAPI
bool isSolidBlockingBlock()
const;
509 MCAPI
bool isSolidBlockingBlockAndNotSignalSource()
const;
511 MCAPI
bool isStairBlock()
const;
513 MCAPI
bool isStemBlock()
const;
516 MCAPI
bool isThinFenceBlock()
const;
521 MCAPI
bool isUnbreakable()
const;
525 MCAPI
bool isWallBlock()
const;
527 MCAPI ::Block
const& keepStates(::std::vector<::BlockState const*>
const& statesToKeep)
const;
529 MCAPI
bool mayConsumeFertilizer(
::BlockSource& region)
const;
531 MCAPI
bool mayPick()
const;
533 MCAPI
bool mayPick(
::BlockSource const& region,
bool liquid)
const;
545 MCAPI
void onActorEvent(
::BlockPos const& pos, ::std::string
const& eventName,
::Actor& sourceEntity)
const;
547 MCAPI
void onActorInternalEvent(
::BlockPos const& pos, ::std::string
const& eventName,
::Actor& sourceEntity)
const;
563 ::Block
const& previousBlock,
569 MCAPI
void onRedstoneUpdate(
581 MCAPI
void onStateChange(
584 ::Block
const& previousBlock,
594 MCAPI ::Block
const* playerWillDestroy(
::Player& player,
::BlockPos const& pos)
const;
599 MCAPI
bool pushesOutItems()
const;
601 MCAPI
bool pushesUpFallingBlocks()
const;
607 MCAPI ::Vec3 randomlyModifyPosition(
::BlockPos const& pos)
const;
609 MCAPI
bool requiresCorrectToolForDrops()
const;
611 MCAPI
void setRuntimeId(uint
const& runtimeId)
const;
616 MCAPI
bool shouldConnectToRedstone(
::BlockSource& region,
::BlockPos const& pos, ::Direction::Type direction)
const;
619 MCAPI
bool shouldRandomTick()
const;
621 MCAPI
bool shouldRandomTickExtraLayer()
const;
623 MCAPI
bool shouldStopFalling(
::Actor& entity)
const;
625 MCAPI
bool shouldTickOnSetBlock()
const;
627 MCAPI
void spawnResources(
636 MCAPI ::std::string toDebugString()
const;
642 MCAPI ::CopperBehavior
const* tryGetCopperBehavior()
const;
644 MCAPI ::Block
const* tryGetInfested()
const;
646 MCAPI ::Block
const* tryGetUninfested()
const;
652 MCAPI
bool updateTallestCollisionShape(
655 ::AABB const& intersectTestBox,
658 ::Vec3 const& posToMinimizeDistanceToIfMatchingHeight,
659 float& currentDistanceSqr
662 MCAPI
bool use(
::Player& player,
::BlockPos const& pos, uchar face, ::std::optional<::Vec3> hit)
const;
680 MCAPI static ::std::string
const& BLOCK_DESCRIPTION_PREFIX();
686 MCAPI
void* $ctor(ushort data, ::gsl::not_null<::BlockType*> oldBlock);
688 MCAPI
void* $ctor(ushort data, ::gsl::not_null<::BlockType*> oldBlock,
::CompoundTag serId, uint
const& runId);
700 MCAPI
static void** $vftable();