71 public ::std::enable_shared_from_this<::BlockSource> {
73 LLNDAPI std::vector<Actor*> getEntities(
75 float extendDistance = 2.0f,
76 ActorType actorType = ActorType::TypeMask,
77 bool ignoreType =
false
84 LLNDAPI
bool findNextTopSolidBlockAbove(
::BlockPos& pos)
const;
86 LLAPI
void addToTickingQueue(
90 int priorityOffset = 0,
91 bool skipOverrides =
false
97 ::ll::TypedStorage<4, 4, ::std::thread::id const> mOwnerThreadID;
98 ::ll::TypedStorage<1, 1, bool const> mAllowUnpopulatedChunks;
99 ::ll::TypedStorage<1, 1, bool const> mPublicSource;
100 ::ll::TypedStorage<1, 1, bool const> mMarkChangedBlocksForSaving;
101 ::ll::TypedStorage<8, 8, ::Level&> mLevel;
102 ::ll::TypedStorage<8, 8, ::ChunkSource&> mChunkSource;
103 ::ll::TypedStorage<8, 8, ::Dimension&> mDimension;
104 ::ll::TypedStorage<2, 2, short const> mMaxHeight;
105 ::ll::TypedStorage<2, 2, short const> mMinHeight;
106 ::ll::TypedStorage<8, 24, ::std::vector<::BlockDataFetchResult<::Block>>> mTempBlockFetchResult;
107 ::ll::TypedStorage<1, 1, bool> mAllowTickingChanges;
108 ::ll::TypedStorage<1, 1, bool> mProcessingConnectionUpdates;
109 ::ll::TypedStorage<8, 40, ::std::deque<::BlockPos>> mPendingConnectionUpdates;
110 ::ll::TypedStorage<4, 12, ::BlockPos> mPlaceChunkPos;
111 ::ll::TypedStorage<8, 24, ::std::vector<::BlockSourceListener*>> mListeners;
112 ::ll::TypedStorage<1, 1, bool> mIsPersistantBlockSource;
113 ::ll::TypedStorage<8, 8, ::ChunkPos> mLastChunkPos;
114 ::ll::TypedStorage<8, 16, ::std::weak_ptr<::LevelChunk>> mLastChunkWeakPtr;
115 ::ll::TypedStorage<8, 8, ::LevelChunk*> mLastChunkDirectPtr;
116 ::ll::TypedStorage<8, 8, ::BlockTickingQueue*> mRandomTickQueue;
117 ::ll::TypedStorage<8, 8, ::BlockTickingQueue*> mTickQueue;
118 ::ll::TypedStorage<1, 2, ::BrightnessPair const> mDefaultBrightness;
119 ::ll::TypedStorage<8, 24, ::std::vector<::Actor*>> mTempEntityList;
120 ::ll::TypedStorage<8, 24, ::std::vector<::BlockActor*>> mTempBlockEntityList;
121 ::ll::TypedStorage<8, 24, ::std::vector<::AABB>> mTempCubeList;
122 ::ll::TypedStorage<8, 64, ::std::unordered_set<::ChunkPos>> mPendingPreservedBlockEntityChunks;
127 BlockSource& operator=(BlockSource
const&);
128 BlockSource(BlockSource
const&);
134 virtual ~BlockSource() ;
136 virtual ::WeakRef<::BlockSource> getWeakRef() ;
138 virtual ::Level& getLevel() ;
140 virtual ::Dimension& getDimension()
const ;
142 virtual ::Dimension& getDimension() ;
144 virtual ::Dimension
const& getDimensionConst()
const ;
146 virtual ::DimensionType getDimensionId()
const ;
148 virtual bool shouldFireEvents(
::LevelChunk const& c)
const ;
150 virtual bool isInstaticking(
::BlockPos const& pos)
const ;
156 virtual ::LevelChunk* getChunk(
int x,
int z)
const ;
158 virtual ::LevelChunk* getChunk(
::ChunkPos const& pos)
const ;
160 virtual ::LevelChunk* getChunkAt(
::BlockPos const& pos)
const ;
162 virtual short getAboveTopSolidBlock(
166 bool iteratePastInitialBlocking
169 virtual short getAboveTopSolidBlock(
int x,
int z,
bool includeWater,
bool includeLeaves)
const ;
176 virtual ::Material
const& getMaterial(
::BlockPos const& pos)
const ;
178 virtual ::Material
const& getMaterial(
int x,
int y,
int z)
const ;
180 virtual short getMaxHeight()
const ;
182 virtual short getMinHeight()
const ;
184 virtual bool hasBorderBlock(
::BlockPos const pos)
const ;
186 virtual float getBrightness(
::BlockPos const& pos)
const ;
188 virtual bool mayPlace(
197 virtual bool canDoBlockDrops(
::Actor const* instigatingActor)
const ;
199 virtual bool canDoContainedItemDrops(
::Actor const* instigatingActor)
const ;
201 virtual bool hasChunk(
::ChunkPos const& pos,
bool serverSideOnly)
const ;
203 virtual bool hasChunksAt(
::Bounds const& bounds,
bool ignoreClientChunk)
const ;
205 virtual bool hasChunksAt(
::BlockPos const& pos,
int r,
bool ignoreClientChunk)
const ;
207 virtual bool hasChunksAt(
::AABB const& bb,
bool ignoreClientChunk)
const ;
209 virtual bool areChunksFullyLoaded(
::BlockPos const& pos,
int r)
const ;
211 virtual bool containsAnyLiquid(
::AABB const& box)
const ;
213 virtual bool containsMaterial(
::AABB const& box, ::SharedTypes::v1_26_20::MaterialType material)
const ;
215 virtual void blockEvent(
::BlockPos const& pos,
int b0,
int b1) ;
217 virtual ::gsl::span<::gsl::not_null<::Actor*>>
218 fetchEntities(
::Actor const* except,
::AABB const& bb,
bool useHitbox,
bool getDisplayEntities) ;
220 virtual ::gsl::span<::gsl::not_null<::Actor*>> fetchEntities(
221 ::ActorType entityTypeId,
224 ::std::function<
bool(
::Actor*)> selector
228 fetchAABBs(::std::vector<::AABB>& shapes,
::AABB const& intersectTestBox,
bool withUnloadedChunks)
const
231 virtual ::std::vector<::AABB>& fetchAABBs(
::AABB const& intersectTestBox,
bool withUnloadedChunks) ;
233 virtual ::std::vector<::AABB>& fetchCollisionShapes(
234 ::AABB const& intersectTestBox,
235 bool withUnloadedChunks,
236 ::std::optional<::EntityContext const> entity,
237 ::std::vector<::AABB>* tempShapes
240 virtual void fetchCollisionShapes(
241 ::std::vector<::AABB>& shapes,
242 ::AABB const& intersectTestBox,
243 bool withUnloadedChunks,
245 ::std::vector<::AABB>* tempShapes
248 virtual void fetchCollisionShapesAndBlocks(
249 ::std::vector<::BlockSourceVisitor::CollisionShape>& shapes,
250 ::AABB const& intersectTestBox,
251 bool withUnloadedChunks,
253 ::std::vector<::AABB>* tempShapes
256 virtual ::AABB getTallestCollisionShape(
257 ::AABB const& intersectTestBox,
258 float* actualSurfaceOffset,
259 bool withUnloadedChunks,
263 virtual ::HitResult clip(
266 bool checkAgainstLiquid,
267 ::ShapeType shapeType,
269 bool ignoreBorderBlocks,
272 ::std::function<
bool(::BlockSource
const&,
::Block const&,
bool)>
const& shouldCheckBlock,
273 bool stopOnFirstLiquidHit
278 virtual bool isInWall(
::Vec3 const& pos)
const ;
282 virtual void fireBlockChanged(
288 ::BlockChangedEventTarget eventTarget,
295 virtual ::Block
const& getBlock(
::BlockPos const& pos)
const ;
297 virtual ::Block
const& getBlock(
::BlockPos const& pos, uint layer)
const ;
299 virtual ::BlockActor
const* getBlockEntity(
::BlockPos const& pos)
const ;
301 virtual ::Block
const& getExtraBlock(
::BlockPos const& pos)
const ;
303 virtual ::Block
const& getLiquidBlock(
::BlockPos const& pos)
const ;
305 virtual bool hasBlock(
::BlockPos const& pos)
const ;
307 virtual bool setBlock(
315 virtual bool setExtraBlock(
::BlockPos const& pos,
::Block const& block,
int updateFlags) ;
319 virtual bool isSolidBlockingBlock(
int x,
int y,
int z)
const ;
321 virtual bool isSolidBlockingBlock(
::BlockPos const& p)
const ;
323 virtual ::ILevel& getILevel()
const ;
325 virtual ::LevelSeed64 getLevelSeed64()
const ;
327 virtual ::ChunkSource& getChunkSource() ;
329 virtual bool checkBlockDestroyPermissions(
333 bool generateParticle
336 virtual bool checkBlockPermissions(
341 bool generateParticle
344 virtual void postGameEvent(
360 bool allowUnpopulatedChunks,
361 bool allowClientTickingChanges,
362 bool markChangedBlocksForSaving
365 MCAPI
void _blockChanged(
376 MCAPI
void _fetchEntityHelper(
378 ::gsl::span<::gsl::not_null<::Actor const*>>
const& ignoredEntities,
381 ::std::function<
bool(
::Actor*)> selector
384 MCAPI ::Brightness _getRawBrightness(
::BlockPos const& pos,
::Brightness skyDarken,
bool accountForNight)
const;
386 MCAPI
void addToRandomTickingQueue(
394 MCAPI
void addToRandomTickingQueuePercentChance(
406 MCAPI
bool canProvideSupport(
::BlockPos const& pos, uchar face, ::BlockSupportType type)
const;
408 MCAPI
bool canSeeSky(
::BlockPos const& pos)
const;
410 MCAPI
bool canSeeSkyFromBelowWater(
::BlockPos const& pos);
414 MCAPI
bool containsAnySolidBlocking(
::AABB const& box)
const;
416 MCAPI uint64 countBlocksOfType(
423 MCAPI ::gsl::span<::gsl::not_null<::Actor*>>
426 MCAPI ::std::vector<::BlockActor*> fetchBlockEntities(::BlockActorType blockActorTypeId,
::AABB const& bb)
const;
429 fetchBlockEntities(
::AABB const& bb, ::std::vector<::BlockActor*>& blockEntityList,
bool withPreservedEntities);
431 MCAPI ::gsl::span<::BlockDataFetchResult<::Block>
const>
434 MCAPI ::gsl::span<::BlockDataFetchResult<::Block>
const> fetchBlocksInCylinder(
441 MCAPI ::gsl::span<::gsl::not_null<::Actor*>> fetchEntities(
442 ::gsl::span<::gsl::not_null<::Actor const*>> ignoredEntities,
445 bool getDisplayEntities,
446 ::std::function<
bool(
::Actor*)> selector
449 MCAPI ::std::vector<::Actor*>
const& fetchEntities2(::ActorType type,
::AABB const& aabb,
bool ignoreTargetType);
451 MCAPI ::gsl::span<::gsl::not_null<::Actor*>>
452 fetchPlayers(
::AABB const& bb,
::Actor const* except, ::std::function<
bool(
::Actor*)> selector);
455 MCAPI
void fetchRenderBlockActorComponents(
457 ::std::vector<::gsl::not_null<::IVanillaRenderBlockActorComponent*>>& blockEntityList,
458 bool withPreservedEntities
462 MCAPI
bool findNextTopSolidBlockUnder(
::BlockPos& pos);
465 MCAPI
void fireBlockEntityAboutToBeRemoved(::std::shared_ptr<::BlockActor> te);
468 MCAPI ::Biome
const& getBiome(
::BlockPos const& pos)
const;
471 MCAPI ::BiomeIdLatticeBatch getBiomeIdsInBatch(
::BlockPos const& centerPos,
int areaOffset,
int gridOffset)
const;
474 MCFOLD ::BlockActor* getBlockEntity(
::BlockPos const& pos);
476 MCAPI ::BrightnessPair getBrightnessPair(
::BlockPos const& pos)
const;
478 MCAPI ::BlockPos getHeightmapPos(
::BlockPos const& xzPos)
const;
484 MCAPI
float getSeenPercent(
::Vec3 const& center,
::AABB const& bb);
486 MCAPI
int getSkylightBrightness(
::BlockPos const& pos)
const;
489 MCAPI ::Biome
const& getSurfaceBiome(
::BlockPos const& pos)
const;
492 MCAPI ::std::pair<bool, ::std::optional<::SubChunkPos>>
495 MCAPI
bool hasTickInCurrentTick(
::BlockPos const& pos)
const;
497 MCAPI
bool hasTickInPendingTicks(
::BlockPos const& pos, ::TickingQueueType queueType)
const;
499 MCAPI
bool hasTickInPendingTicks(
::BlockPos const& pos,
::Block const& block, ::TickingQueueType queueType)
const;
502 hasTickInPendingTicks(
::BlockPos const& pos,
::BlockType const& block, ::TickingQueueType queueType)
const;
505 MCAPI
bool isPositionUnderSnow(
::Vec3 const& p);
508 MCAPI
bool isTouchingMaterial(
::BlockPos const& pos, ::SharedTypes::v1_26_20::MaterialType type)
const;
510 MCAPI
bool isUnobstructedByEntities(
::AABB const& aabb,
::Actor const* ignoreEntity);
518 ::std::shared_ptr<::BlockActor> blockEntity,
523 MCAPI
bool setBlockAndRetainCompatibleBlockActor(
::BlockPos const& pos,
::Block const& block,
int updateFlags);
525 MCAPI
void tickPreservedBlockEntities();
527 MCAPI
void updateConnectionsAt(
::BlockPos const& pos);
529 MCAPI
void updateNeighborsAt(
::BlockPos const& pos);
531 MCAPI
void updateNeighborsAtExceptFromFacing(
::BlockPos const& pos,
int skipFacing);
548 bool allowUnpopulatedChunks,
549 bool allowClientTickingChanges,
550 bool markChangedBlocksForSaving
563 MCAPI ::WeakRef<::BlockSource> $getWeakRef();
565 MCFOLD ::Level& $getLevel();
567 MCFOLD ::Dimension& $getDimension()
const;
569 MCFOLD ::Dimension
const& $getDimensionConst()
const;
571 MCAPI ::DimensionType $getDimensionId()
const;
573 MCAPI
bool $shouldFireEvents(
::LevelChunk const& c)
const;
575 MCAPI
bool $isInstaticking(
::BlockPos const& pos)
const;
581 MCAPI ::LevelChunk* $getChunk(
int x,
int z)
const;
583 MCAPI ::LevelChunk* $getChunk(
::ChunkPos const& pos)
const;
585 MCAPI ::LevelChunk* $getChunkAt(
::BlockPos const& pos)
const;
587 MCAPI
short $getAboveTopSolidBlock(
591 bool iteratePastInitialBlocking
594 MCAPI
short $getAboveTopSolidBlock(
int x,
int z,
bool includeWater,
bool includeLeaves)
const;
600 MCAPI ::Material
const& $getMaterial(
::BlockPos const& pos)
const;
602 MCAPI ::Material
const& $getMaterial(
int x,
int y,
int z)
const;
604 MCAPI
short $getMaxHeight()
const;
606 MCAPI
short $getMinHeight()
const;
608 MCAPI
bool $hasBorderBlock(
::BlockPos const pos)
const;
610 MCAPI
float $getBrightness(
::BlockPos const& pos)
const;
612 MCAPI
bool $mayPlace(
621 MCAPI
bool $canDoBlockDrops(
::Actor const* instigatingActor)
const;
623 MCAPI
bool $canDoContainedItemDrops(
::Actor const* instigatingActor)
const;
625 MCAPI
bool $hasChunk(
::ChunkPos const& pos,
bool serverSideOnly)
const;
627 MCAPI
bool $hasChunksAt(
::Bounds const& bounds,
bool ignoreClientChunk)
const;
629 MCAPI
bool $hasChunksAt(
::BlockPos const& pos,
int r,
bool ignoreClientChunk)
const;
631 MCAPI
bool $hasChunksAt(
::AABB const& bb,
bool ignoreClientChunk)
const;
633 MCAPI
bool $areChunksFullyLoaded(
::BlockPos const& pos,
int r)
const;
635 MCAPI
bool $containsAnyLiquid(
::AABB const& box)
const;
637 MCAPI
bool $containsMaterial(
::AABB const& box, ::SharedTypes::v1_26_20::MaterialType material)
const;
639 MCAPI
void $blockEvent(
::BlockPos const& pos,
int b0,
int b1);
641 MCAPI ::gsl::span<::gsl::not_null<::Actor*>>
642 $fetchEntities(
::Actor const* except,
::AABB const& bb,
bool useHitbox,
bool getDisplayEntities);
644 MCAPI ::gsl::span<::gsl::not_null<::Actor*>> $fetchEntities(
645 ::ActorType entityTypeId,
648 ::std::function<
bool(
::Actor*)> selector
652 $fetchAABBs(::std::vector<::AABB>& shapes,
::AABB const& intersectTestBox,
bool withUnloadedChunks)
const;
654 MCAPI ::std::vector<::AABB>& $fetchAABBs(
::AABB const& intersectTestBox,
bool withUnloadedChunks);
656 MCAPI ::std::vector<::AABB>& $fetchCollisionShapes(
657 ::AABB const& intersectTestBox,
658 bool withUnloadedChunks,
659 ::std::optional<::EntityContext const> entity,
660 ::std::vector<::AABB>* tempShapes
663 MCAPI
void $fetchCollisionShapes(
664 ::std::vector<::AABB>& shapes,
665 ::AABB const& intersectTestBox,
666 bool withUnloadedChunks,
668 ::std::vector<::AABB>* tempShapes
671 MCAPI
void $fetchCollisionShapesAndBlocks(
672 ::std::vector<::BlockSourceVisitor::CollisionShape>& shapes,
673 ::AABB const& intersectTestBox,
674 bool withUnloadedChunks,
676 ::std::vector<::AABB>* tempShapes
679 MCAPI ::AABB $getTallestCollisionShape(
680 ::AABB const& intersectTestBox,
681 float* actualSurfaceOffset,
682 bool withUnloadedChunks,
686 MCAPI ::HitResult $clip(
689 bool checkAgainstLiquid,
690 ::ShapeType shapeType,
692 bool ignoreBorderBlocks,
695 ::std::function<
bool(::BlockSource
const&,
::Block const&,
bool)>
const& shouldCheckBlock,
696 bool stopOnFirstLiquidHit
701 MCAPI
bool $isInWall(
::Vec3 const& pos)
const;
705 MCAPI
void $fireBlockChanged(
711 ::BlockChangedEventTarget eventTarget,
718 MCAPI ::Block
const& $getBlock(
::BlockPos const& pos)
const;
720 MCAPI ::Block
const& $getBlock(
::BlockPos const& pos, uint layer)
const;
722 MCFOLD ::BlockActor
const* $getBlockEntity(
::BlockPos const& pos)
const;
724 MCAPI ::Block
const& $getExtraBlock(
::BlockPos const& pos)
const;
726 MCAPI ::Block
const& $getLiquidBlock(
::BlockPos const& pos)
const;
728 MCAPI
bool $hasBlock(
::BlockPos const& pos)
const;
730 MCAPI
bool $setBlock(
738 MCAPI
bool $setExtraBlock(
::BlockPos const& pos,
::Block const& block,
int updateFlags);
742 MCAPI
bool $isSolidBlockingBlock(
int x,
int y,
int z)
const;
744 MCAPI
bool $isSolidBlockingBlock(
::BlockPos const& p)
const;
746 MCFOLD ::ILevel& $getILevel()
const;
748 MCAPI ::LevelSeed64 $getLevelSeed64()
const;
750 MCFOLD ::ChunkSource& $getChunkSource();
752 MCAPI
bool $checkBlockDestroyPermissions(
756 bool generateParticle
759 MCAPI
bool $checkBlockPermissions(
764 bool generateParticle
767 MCAPI
void $postGameEvent(