66 public ::std::enable_shared_from_this<::BlockSource> {
68 LLNDAPI std::vector<Actor*> getEntities(
70 float extendDistance = 2.0f,
71 ActorType actorType = ActorType::TypeMask,
72 bool ignoreType =
false
82 ::ll::TypedStorage<4, 4, ::std::thread::id const> mOwnerThreadID;
83 ::ll::TypedStorage<1, 1, bool const> mAllowUnpopulatedChunks;
84 ::ll::TypedStorage<1, 1, bool const> mPublicSource;
85 ::ll::TypedStorage<1, 1, bool> mCheckValidity;
86 ::ll::TypedStorage<8, 8, ::Level&> mLevel;
87 ::ll::TypedStorage<8, 8, ::ChunkSource&> mChunkSource;
88 ::ll::TypedStorage<8, 8, ::Dimension&> mDimension;
89 ::ll::TypedStorage<2, 2, short const> mMaxHeight;
90 ::ll::TypedStorage<2, 2, short const> mMinHeight;
91 ::ll::TypedStorage<8, 24, ::std::vector<::BlockDataFetchResult<::Block>>> mTempBlockFetchResult;
92 ::ll::TypedStorage<1, 1, bool> mAllowTickingChanges;
93 ::ll::TypedStorage<4, 12, ::BlockPos> mPlaceChunkPos;
94 ::ll::TypedStorage<8, 24, ::std::vector<::BlockSourceListener*>> mListeners;
95 ::ll::TypedStorage<8, 8, ::Tick> mCurrentTickForValidityChecks;
96 ::ll::TypedStorage<1, 1, bool> mIsPersistantBlockSource;
97 ::ll::TypedStorage<8, 8, ::ChunkPos> mLastChunkPos;
98 ::ll::TypedStorage<8, 16, ::std::weak_ptr<::LevelChunk>> mLastChunkWeakPtr;
99 ::ll::TypedStorage<8, 8, ::LevelChunk*> mLastChunkDirectPtr;
100 ::ll::TypedStorage<8, 8, ::BlockTickingQueue*> mRandomTickQueue;
101 ::ll::TypedStorage<8, 8, ::BlockTickingQueue*> mTickQueue;
102 ::ll::TypedStorage<1, 2, ::BrightnessPair const> mDefaultBrightness;
103 ::ll::TypedStorage<8, 24, ::std::vector<::Actor*>> mTempEntityList;
104 ::ll::TypedStorage<8, 24, ::std::vector<::BlockActor*>> mTempBlockEntityList;
105 ::ll::TypedStorage<8, 24, ::std::vector<::AABB>> mTempCubeList;
121 virtual ::WeakRef<::BlockSource> getWeakRef() ;
124 virtual ::Level& getLevel() ;
127 virtual ::Dimension& getDimension()
const ;
130 virtual ::Dimension& getDimension() ;
133 virtual ::Dimension
const& getDimensionConst()
const ;
136 virtual ::DimensionType getDimensionId()
const ;
139 virtual bool isInstaticking(
::BlockPos const& pos)
const ;
148 virtual ::LevelChunk* getChunk(
int x,
int z)
const ;
151 virtual ::LevelChunk* getChunk(
::ChunkPos const& pos)
const ;
154 virtual ::LevelChunk* getChunkAt(
::BlockPos const& pos)
const ;
157 virtual short getAboveTopSolidBlock(
161 bool iteratePastInitialBlocking
165 virtual short getAboveTopSolidBlock(
int x,
int z,
bool includeWater,
bool includeLeaves)
const ;
168 virtual short getHeight(::std::function<
bool(
::Block const&)>
const& type,
::BlockPos const& pos)
const
172 virtual short getHeight(::std::function<
bool(
::Block const&)>
const& type,
int x,
int z)
const ;
175 virtual ::Material
const& getMaterial(
::BlockPos const& pos)
const ;
178 virtual ::Material
const& getMaterial(
int x,
int y,
int z)
const ;
181 virtual short getMaxHeight()
const ;
184 virtual short getMinHeight()
const ;
187 virtual bool hasBorderBlock(
::BlockPos const pos)
const ;
190 virtual float getBrightness(
::BlockPos const& pos)
const ;
193 virtual bool mayPlace(
203 virtual bool canDoBlockDrops()
const ;
206 virtual bool canDoContainedItemDrops()
const ;
209 virtual bool hasChunksAt(
::Bounds const& bounds,
bool ignoreClientChunk)
const ;
212 virtual bool hasChunksAt(
::BlockPos const& pos,
int r,
bool ignoreClientChunk)
const ;
215 virtual bool hasChunksAt(
::AABB const& bb,
bool ignoreClientChunk)
const ;
218 virtual bool areChunksFullyLoaded(
::BlockPos const& pos,
int r)
const ;
221 virtual bool containsAnyLiquid(
::AABB const& box)
const ;
224 virtual bool containsMaterial(
::AABB const& box, ::MaterialType material)
const ;
227 virtual ::gsl::span<::gsl::not_null<::Actor*>>
228 fetchEntities(
::Actor const* except,
::AABB const& bb,
bool useHitbox,
bool getDisplayEntities) ;
231 virtual ::gsl::span<::gsl::not_null<::Actor*>>
236 fetchAABBs(::std::vector<::AABB>& shapes,
::AABB const& intersectTestBox,
bool withUnloadedChunks)
const
240 virtual ::std::vector<::AABB>& fetchAABBs(
::AABB const& intersectTestBox,
bool withUnloadedChunks) ;
243 virtual ::std::vector<::AABB>& fetchCollisionShapes(
244 ::AABB const& intersectTestBox,
245 bool withUnloadedChunks,
246 ::std::optional<::EntityContext const> entity,
247 ::std::vector<::AABB>* tempShapes
251 virtual void fetchCollisionShapes(
252 ::std::vector<::AABB>& shapes,
253 ::AABB const& intersectTestBox,
254 bool withUnloadedChunks,
256 ::std::vector<::AABB>* tempShapes
260 virtual void fetchCollisionShapesAndBlocks(
261 ::std::vector<::BlockSourceVisitor::CollisionShape>& shapes,
262 ::AABB const& intersectTestBox,
263 bool withUnloadedChunks,
265 ::std::vector<::AABB>* tempShapes
269 virtual ::AABB getTallestCollisionShape(
270 ::AABB const& intersectTestBox,
271 float* actualSurfaceOffset,
272 bool withUnloadedChunks,
277 virtual ::HitResult clip(
280 bool checkAgainstLiquid,
281 ::ShapeType shapeType,
283 bool ignoreBorderBlocks,
287 bool stopOnFirstLiquidHit
294 virtual bool isInWall(
::Vec3 const& pos)
const ;
297 virtual bool isUnderWater(
::Vec3 const& pos,
::Block const& block)
const ;
300 virtual ::Block
const& getBlock(
::BlockPos const& pos)
const ;
303 virtual ::Block
const& getBlock(
::BlockPos const& pos, uint layer)
const ;
306 virtual ::BlockActor
const* getBlockEntity(
::BlockPos const& pos)
const ;
309 virtual ::Block
const& getExtraBlock(
::BlockPos const& pos)
const ;
312 virtual ::Block
const& getLiquidBlock(
::BlockPos const& pos)
const ;
315 virtual bool hasBlock(
::BlockPos const& pos)
const ;
318 virtual bool setBlock(
327 virtual bool removeBlock(
::BlockPos const& pos) ;
330 virtual bool isSolidBlockingBlock(
int x,
int y,
int z)
const ;
333 virtual bool isSolidBlockingBlock(
::BlockPos const& p)
const ;
336 virtual ::ILevel& getILevel()
const ;
339 virtual ::LevelSeed64 getLevelSeed64()
const ;
342 virtual ::ChunkSource& getChunkSource() ;
345 virtual bool checkBlockPermissions(
350 bool generateParticle
354 virtual float getVisualLiquidHeight(
::Vec3 const& pos)
const ;
357 virtual void postGameEvent(
365 virtual void updateCheckForValidityState(
bool checkForValidity) ;
376 bool allowUnpopulatedChunks,
377 bool allowClientTickingChanges
380 MCAPI
void _addToTickingQueue(
385 ::TickingQueueType queueType,
389 MCAPI
void _blockChanged(
399 MCAPI
void _checkValidity(
bool forceCheckForValidity)
const;
401 MCAPI
void _fetchBorderBlockCollisions(
402 ::std::vector<::AABB>& shapes,
403 ::AABB const& intersectTestBox,
408 MCAPI
void _fetchEntityHelper(
410 ::gsl::span<::gsl::not_null<::Actor const*>>
const& ignoredEntities,
415 MCAPI
void _fetchEntityHelper(
417 ::ActorType entityTypeId,
420 ::std::function<
bool(
::Actor*)> selector
423 MCAPI
bool _getBlockPermissions(
::BlockPos const& pos,
bool currentState);
426 _getRawBrightness(
::BlockPos const& pos,
::Brightness skyDarken,
bool propagate,
bool accountForNight)
const;
428 MCAPI
void _removeFromTickingQueue(
::BlockPos const& pos,
::Block const& block, ::TickingQueueType queueType);
430 MCAPI
void _updateTallestCollisionShapeWithBorderBlockCollisions(
431 ::AABB const& intersectTestBox,
434 ::Vec3 const& posToMinimizeDistanceToIfMatchingHeight,
435 float& currentDistanceSqr
438 MCAPI
void addToRandomTickingQueuePercentChance(
446 MCAPI
void addToTickingQueue(
456 MCAPI
void blockEvent(
::BlockPos const& pos,
int b0,
int b1);
458 MCAPI
bool canSeeSky(
::BlockPos const& pos)
const;
460 MCAPI
bool canSeeSkyFromBelowWater(
::BlockPos const& pos);
462 MCAPI
bool checkBlockDestroyPermissions(
466 bool generateParticle
469 MCAPI
bool containsAnyBlockInBox(
::BoundingBox const& box, ::std::function<
bool(
::Block const&)> predicate);
473 MCAPI
bool containsAnySolidBlocking(
::AABB const& box)
const;
475 MCAPI uint64 countBlocksOfType(
482 MCAPI ::gsl::span<::gsl::not_null<::Actor*>>
485 MCAPI ::std::vector<::BlockActor*> fetchBlockEntities(::BlockActorType blockActorTypeId,
::AABB const& bb)
const;
487 MCAPI ::std::vector<::BlockActor*>
const& fetchBlockEntities(
::AABB const& bb);
491 MCAPI ::gsl::span<::BlockDataFetchResult<::Block>
const>
494 MCAPI ::gsl::span<::BlockDataFetchResult<::Block>
const>
495 fetchBlocksInBoxSorted(
::BoundingBox const& box, ::std::function<
bool(
::Block const&)> predicate);
497 MCAPI ::gsl::span<::BlockDataFetchResult<::Block>
const> fetchBlocksInCylinder(
501 ::std::function<
bool(
::Block const&)> predicate
504 MCAPI ::gsl::span<::BlockDataFetchResult<::Block>
const> fetchBlocksInCylinderSorted(
508 ::std::function<
bool(
::Block const&)> predicate
511 MCAPI ::gsl::span<::gsl::not_null<::Actor*>> fetchEntities(
512 ::gsl::span<::gsl::not_null<::Actor const*>> ignoredEntities,
515 bool getDisplayEntities
518 MCAPI ::std::vector<::Actor*>
const& fetchEntities2(::ActorType type,
::AABB const& aabb,
bool ignoreTargetType);
520 MCAPI ::Actor* fetchNearestEntityOfType(
::Actor const* except,
::AABB const& bb, ::ActorType entityTypeId);
522 MCAPI ::gsl::span<::gsl::not_null<::Actor*>>
523 fetchPlayers(
::AABB const& bb,
::Actor const* except, ::std::function<
bool(
::Actor*)> selector);
525 MCAPI
bool findNextTopSolidBlockUnder(
::BlockPos& pos);
527 MCAPI
void fireBlockChanged(
533 ::BlockChangedEventTarget eventTarget,
540 MCAPI ::Biome
const& getBiome(
::BlockPos const& pos)
const;
542 MCAPI ::BlockActor* getBlockEntity(
::BlockPos const&);
544 MCAPI
float getSeenPercent(
::Vec3 const& center,
::AABB const& bb);
546 MCAPI
int getSkylightBrightness(
::BlockPos const& pos)
const;
548 MCAPI
void getTallestCollisionShapeFromUnloadedChunksAABBs(
549 ::AABB const& intersectTestBox,
550 ::AABB& tallestCollisionShape,
551 ::Vec3 const& posToMinimizeDistanceToIfMatchingHeight,
552 float& currentDistanceSqr
555 MCAPI
bool hasChunksAt(
::BlockPos const& min,
::BlockPos const& max,
bool ignoreClientChunk)
const;
557 MCAPI ::std::pair<bool, ::std::optional<::SubChunkPos>>
560 MCAPI
bool hasTickInCurrentTick(
::BlockPos const& pos, ::TickingQueueType queueType)
const;
562 MCAPI
bool hasTickInPendingTicks(
::BlockPos const& pos, ::TickingQueueType queueType)
const;
564 MCAPI
bool hasTickInPendingTicks(
::BlockPos const& pos,
::Block const& block, ::TickingQueueType queueType)
const;
567 hasTickInPendingTicks(
::BlockPos const& pos,
::BlockType const& block, ::TickingQueueType queueType)
const;
569 MCAPI
bool hasUntickedNeighborChunk(
::ChunkPos const& pos,
int chunkRadius)
const;
571 MCAPI
bool isNearUnloadedChunks(
::ChunkPos const& pos)
const;
573 MCAPI
bool isTouchingMaterial(
::BlockPos const& pos, ::MaterialType type)
const;
575 MCAPI
bool isWithinHeightLimits(
int y)
const;
582 MCAPI ::std::shared_ptr<::BlockActor> removeBlockEntity(
::BlockPos const& blockPos);
588 ::std::shared_ptr<::BlockActor> blockEntity,
593 MCAPI
bool setBlockAndRetainCompatibleBlockActor(
::BlockPos const& pos,
::Block const& block,
int updateFlags);
595 MCAPI
void setBorderBlock(
::BlockPos const& pos,
bool val);
597 MCAPI
bool setExtraBlock(
::BlockPos const& pos,
::Block const& block,
int updateFlags);
601 MCAPI
void updateNeighborsAt(
::BlockPos const& pos);
611 MCFOLD static ::Block
const& getEmptyBlock();
622 bool allowUnpopulatedChunks,
623 bool allowClientTickingChanges
636 MCAPI ::WeakRef<::BlockSource> $getWeakRef();
638 MCFOLD ::Level& $getLevel();
640 MCFOLD ::Dimension& $getDimension()
const;
642 MCFOLD ::Dimension& $getDimension();
644 MCFOLD ::Dimension
const& $getDimensionConst()
const;
646 MCAPI ::DimensionType $getDimensionId()
const;
648 MCAPI
bool $isInstaticking(
::BlockPos const& pos)
const;
654 MCAPI ::LevelChunk* $getChunk(
int x,
int z)
const;
656 MCAPI ::LevelChunk* $getChunk(
::ChunkPos const& pos)
const;
658 MCAPI ::LevelChunk* $getChunkAt(
::BlockPos const& pos)
const;
660 MCAPI
short $getAboveTopSolidBlock(
664 bool iteratePastInitialBlocking
667 MCAPI
short $getAboveTopSolidBlock(
int x,
int z,
bool includeWater,
bool includeLeaves)
const;
669 MCAPI
short $getHeight(::std::function<
bool(
::Block const&)>
const& type,
::BlockPos const& pos)
const;
671 MCAPI
short $getHeight(::std::function<
bool(
::Block const&)>
const& type,
int x,
int z)
const;
673 MCAPI ::Material
const& $getMaterial(
::BlockPos const& pos)
const;
675 MCAPI ::Material
const& $getMaterial(
int x,
int y,
int z)
const;
677 MCAPI
short $getMaxHeight()
const;
679 MCAPI
short $getMinHeight()
const;
681 MCAPI
bool $hasBorderBlock(
::BlockPos const pos)
const;
683 MCAPI
float $getBrightness(
::BlockPos const& pos)
const;
685 MCAPI
bool $mayPlace(
694 MCAPI
bool $canDoBlockDrops()
const;
696 MCAPI
bool $canDoContainedItemDrops()
const;
698 MCAPI
bool $hasChunksAt(
::Bounds const& bounds,
bool ignoreClientChunk)
const;
700 MCAPI
bool $hasChunksAt(
::BlockPos const& pos,
int r,
bool ignoreClientChunk)
const;
702 MCAPI
bool $hasChunksAt(
::AABB const& bb,
bool ignoreClientChunk)
const;
704 MCAPI
bool $areChunksFullyLoaded(
::BlockPos const& pos,
int r)
const;
706 MCAPI
bool $containsAnyLiquid(
::AABB const& box)
const;
708 MCAPI
bool $containsMaterial(
::AABB const& box, ::MaterialType material)
const;
710 MCAPI ::gsl::span<::gsl::not_null<::Actor*>>
711 $fetchEntities(
::Actor const* except,
::AABB const& bb,
bool useHitbox,
bool getDisplayEntities);
714 $fetchAABBs(::std::vector<::AABB>& shapes,
::AABB const& intersectTestBox,
bool withUnloadedChunks)
const;
716 MCAPI ::std::vector<::AABB>& $fetchAABBs(
::AABB const& intersectTestBox,
bool withUnloadedChunks);
718 MCAPI ::std::vector<::AABB>& $fetchCollisionShapes(
719 ::AABB const& intersectTestBox,
720 bool withUnloadedChunks,
721 ::std::optional<::EntityContext const> entity,
722 ::std::vector<::AABB>* tempShapes
725 MCAPI
void $fetchCollisionShapes(
726 ::std::vector<::AABB>& shapes,
727 ::AABB const& intersectTestBox,
728 bool withUnloadedChunks,
730 ::std::vector<::AABB>* tempShapes
733 MCAPI
void $fetchCollisionShapesAndBlocks(
734 ::std::vector<::BlockSourceVisitor::CollisionShape>& shapes,
735 ::AABB const& intersectTestBox,
736 bool withUnloadedChunks,
738 ::std::vector<::AABB>* tempShapes
741 MCAPI ::AABB $getTallestCollisionShape(
742 ::AABB const& intersectTestBox,
743 float* actualSurfaceOffset,
744 bool withUnloadedChunks,
748 MCAPI ::HitResult $clip(
751 bool checkAgainstLiquid,
752 ::ShapeType shapeType,
754 bool ignoreBorderBlocks,
758 bool stopOnFirstLiquidHit
763 MCAPI
bool $isInWall(
::Vec3 const& pos)
const;
765 MCAPI
bool $isUnderWater(
::Vec3 const& pos,
::Block const& block)
const;
767 MCAPI ::Block
const& $getBlock(
::BlockPos const& pos)
const;
769 MCAPI ::Block
const& $getBlock(
::BlockPos const& pos, uint layer)
const;
771 MCFOLD ::BlockActor
const* $getBlockEntity(
::BlockPos const& pos)
const;
773 MCAPI ::Block
const& $getExtraBlock(
::BlockPos const& pos)
const;
775 MCAPI ::Block
const& $getLiquidBlock(
::BlockPos const& pos)
const;
777 MCAPI
bool $hasBlock(
::BlockPos const& pos)
const;
779 MCAPI
bool $setBlock(
787 MCAPI
bool $removeBlock(
::BlockPos const& pos);
789 MCAPI
bool $isSolidBlockingBlock(
int x,
int y,
int z)
const;
791 MCAPI
bool $isSolidBlockingBlock(
::BlockPos const& p)
const;
793 MCFOLD ::ILevel& $getILevel()
const;
795 MCAPI ::LevelSeed64 $getLevelSeed64()
const;
797 MCFOLD ::ChunkSource& $getChunkSource();
799 MCAPI
bool $checkBlockPermissions(
804 bool generateParticle
807 MCFOLD
float $getVisualLiquidHeight(
::Vec3 const& pos)
const;
809 MCAPI
void $postGameEvent(
816 MCAPI
void $updateCheckForValidityState(
bool checkForValidity);
822 MCAPI
static void** $vftable();