40 enum class LoadMode :
int {
48 ::ll::TypedStorage<4, 4, int> mChunkSide;
49 ::ll::TypedStorage<8, 8, ::Level*> mLevel;
50 ::ll::TypedStorage<8, 8, ::Dimension*> mDimension;
51 ::ll::TypedStorage<8, 8, ::ChunkSource*> mParent;
52 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::ChunkSource>> mOwnedParent;
53 ::ll::TypedStorage<8, 8, ::LevelChunkBuilderData*> mLevelChunkBuilderData;
54 ::ll::TypedStorage<1, 1, ::std::atomic<bool>> mShuttingDown;
55 ::ll::TypedStorage<8, 16, ::Bedrock::PubSub::Subscription> mOnSaveSubscription;
56 ::ll::TypedStorage<8, 16, ::Bedrock::PubSub::Subscription> mOnLevelStorageAppSuspendSubscription;
66 virtual ~ChunkSource() ;
68 virtual void shutdown();
70 virtual bool isShutdownDone();
72 virtual ::std::shared_ptr<::LevelChunk> getExistingChunk(
::ChunkPos const& pos);
74 virtual ::std::shared_ptr<::LevelChunk> getRandomChunk(
::Random& random);
76 virtual bool isChunkKnown(
::ChunkPos const& chunkPos);
78 virtual bool isChunkSaved(
::ChunkPos const& chunkPos);
80 virtual ::std::shared_ptr<::LevelChunk>
81 createNewChunk(
::ChunkPos const& cp, ::ChunkSource::LoadMode lm,
bool readOnly);
83 virtual ::std::shared_ptr<::LevelChunk>
84 getOrLoadChunk(
::ChunkPos const& cp, ::ChunkSource::LoadMode lm,
bool readOnly);
92 virtual bool verifyChunkNeedsNeighborAwareUpgrade(
::LevelChunk& lc);
96 virtual void loadChunk(
::LevelChunk& lc,
bool forceImmediateReplacementDataLoad);
98 virtual void postProcessMobsAt(
::BlockSource& region,
int chunkWestBlock,
int chunkNorthBlock,
::Random& random);
102 virtual void deleteAllChunkData(
103 ::std::unordered_set<::ChunkPos> chunksToDelete,
104 ::std::function<
void()> completionCallback,
105 ::std::shared_ptr<::ChunkDeletionMetadata> metadata
108 virtual void deleteStoredChunkData(
109 ::std::unordered_set<::ChunkPos> chunksToDelete,
110 ::std::function<
void()> completionCallback,
111 ::std::shared_ptr<::ChunkDeletionMetadata> metadata
116 virtual void writeEntityChunkTransfer(
::LevelChunk& levelChunk);
118 virtual void writeEntityChunkTransfersToUnloadedChunk(
120 ::std::vector<::ActorUnloadedChunkTransferEntry>
const& transfers
123 virtual void deserializeActorStorageToLevelChunk(
::LevelChunk& levelChunk);
125 virtual void hintDiscardBatchBegin();
127 virtual void hintDiscardBatchEnd();
129 virtual void acquireDiscarded(::std::unique_ptr<::LevelChunk, ::LevelChunkFinalDeleter> ptr);
131 virtual void compact();
133 virtual void flushPendingDiscardedChunkWrites();
135 virtual void flushThreadBatch();
137 virtual bool isWithinWorldLimit(
::ChunkPos const& cp)
const;
139 virtual ::std::unordered_map<::ChunkPos, ::std::weak_ptr<::LevelChunk>>
const* getChunkMap();
141 virtual ::std::unordered_map<::ChunkPos, ::std::weak_ptr<::LevelChunk>>
const& getStorage()
const;
143 virtual void clearDeletedEntities();
145 virtual bool canCreateViews()
const;
147 virtual ::std::unique_ptr<::BlendingDataProvider> tryGetBlendingDataProvider();
149 virtual ::std::shared_ptr<::LevelChunkMetaDataDictionary> loadLevelChunkMetaDataDictionary();
151 virtual void setLevelChunk(::std::shared_ptr<::LevelChunk> lc);
153 virtual bool canLaunchTasks()
const;
155 virtual bool chunkPosNeedsBlending(
::ChunkPos const& cp);
157 virtual void _clearBlendingCache();
163 MCAPI
explicit ChunkSource(::std::unique_ptr<::ChunkSource> parent);
165 MCAPI ChunkSource(
::Dimension* dimension,
int side);
167 MCAPI
bool _checkAndDispatchTaskForLevelChunk(
168 ::std::pair<::ChunkPos, ::ChunkState>
const& chunkPosAndExpectedState,
174 MCAPI
void _checkForUnblockingChunks(
::LevelChunk const& lc);
176 MCAPI
void _checkLevelChunkForNextStage(
179 ::ChunkState stateToCheck
182 MCAPI
void _checkLevelChunkForPostProcessing(
187 MCAPI
bool _chunkAtStage(::std::weak_ptr<::LevelChunk> lcwp, ::ChunkState stateToCheck);
189 MCAPI
void _createOrReplaceGridAreaMap(::std::shared_ptr<::LevelChunk> lc,
bool createNeighbourGridsIfMissing);
193 MCAPI
void _dispatchTaskForLevelChunk(
194 ::std::shared_ptr<::LevelChunk>
const& lc,
195 ::std::shared_ptr<::ChunkViewSource>
const& chunks,
199 MCAPI
void _freeChunkGenerationGridMap(
::ChunkPos const& cp,
bool isLevelChunkDeletion);
201 MCAPI
void _handleTaskFailure(
::LevelChunk& levelChunk, ::ChunkState currentState, ::ChunkState previousState);
203 MCAPI
void _launchChunkTask(
204 ::std::string_view areInTask,
210 MCAPI
void _launchDecorationPostProcessingTask(
211 ::std::shared_ptr<::LevelChunk>
const& lc,
212 ::std::shared_ptr<::ChunkViewSource>
const& chunks,
216 MCAPI
void _launchGenerationTask(::std::shared_ptr<::LevelChunk>
const& lc,
bool areInTask);
218 MCAPI
void _launchLightingTask(
219 ::std::shared_ptr<::LevelChunk>
const& lc,
220 ::std::shared_ptr<::ChunkViewSource>
const& chunks,
224 MCAPI
void _launchNeighborAwareUpgradeTask(
225 ::std::shared_ptr<::LevelChunk>
const& lc,
226 ::std::shared_ptr<::ChunkViewSource>
const& chunks,
230 MCAPI
void _launchReplacementDataTask(
231 ::std::shared_ptr<::LevelChunk>
const& lc,
232 ::std::shared_ptr<::ChunkViewSource>
const& chunks,
236 MCAPI
void _launchStructurePostProcessingTask(
237 ::std::shared_ptr<::LevelChunk>
const& lc,
238 ::std::shared_ptr<::ChunkViewSource>
const& chunks,
242 MCAPI
void _lightingTask(::std::shared_ptr<::LevelChunk>
const& lc,
::ChunkViewSource& chunks);
250 MCAPI
void _spawnChunkGenerationTasks(
int numTasks,
bool calledFromTask);
255 MCAPI
void addEmptyChunkPosForProcessingNeighbours(::std::shared_ptr<::LevelChunk> lc);
258 MCAPI
void checkAndLaunchChunkGenerationTasks(
bool calledFromTask);
260 MCAPI ::GridArea<::std::shared_ptr<::LevelChunk>> createEmptyView(
261 ::ChunkSource::LoadMode lm,
263 ::std::function<
void(::gsl::span<::std::shared_ptr<::LevelChunk>>)> add,
264 ::ChunkSourceViewGenerateMode chunkViewGenerateMode,
265 float const* serverBuildRatio
268 MCAPI ::std::shared_ptr<::LevelChunk> getAvailableChunk(
::ChunkPos const& cp);
270 MCAPI ::std::shared_ptr<::LevelChunk> getAvailableChunkAt(
::BlockPos const& pos);
272 MCFOLD
int getChunkSide()
const;
274 MCFOLD ::Dimension& getDimension()
const;
276 MCAPI ::std::shared_ptr<::LevelChunk> getGeneratedChunk(
::ChunkPos const& cp);
278 MCFOLD ::Level& getLevel()
const;
283 MCAPI
void setShuttingDown(
bool value);
285 MCAPI
bool shouldServerGeneratePos(
::ChunkPos const& chunkPos,
float serverBuildRatio,
int viewRadius);
291 MCAPI
static bool& gPerfIsClientSide();
297 MCAPI
void* $ctor(::std::unique_ptr<::ChunkSource> parent);
299 MCAPI
void* $ctor(
::Dimension* dimension,
int side);
311 MCAPI
void $shutdown();
313 MCAPI
bool $isShutdownDone();
315 MCFOLD ::std::shared_ptr<::LevelChunk> $getExistingChunk(
::ChunkPos const& pos);
317 MCFOLD ::std::shared_ptr<::LevelChunk> $getRandomChunk(
::Random& random);
319 MCAPI
bool $isChunkKnown(
::ChunkPos const& chunkPos);
321 MCAPI
bool $isChunkSaved(
::ChunkPos const& chunkPos);
323 MCAPI ::std::shared_ptr<::LevelChunk>
324 $createNewChunk(
::ChunkPos const& cp, ::ChunkSource::LoadMode lm,
bool readOnly);
326 MCAPI ::std::shared_ptr<::LevelChunk>
327 $getOrLoadChunk(
::ChunkPos const& cp, ::ChunkSource::LoadMode lm,
bool readOnly);
335 MCFOLD
bool $verifyChunkNeedsNeighborAwareUpgrade(
::LevelChunk& lc);
339 MCAPI
void $loadChunk(
::LevelChunk& lc,
bool forceImmediateReplacementDataLoad);
341 MCAPI
void $postProcessMobsAt(
::BlockSource& region,
int chunkWestBlock,
int chunkNorthBlock,
::Random& random);
345 MCAPI
void $deleteAllChunkData(
346 ::std::unordered_set<::ChunkPos> chunksToDelete,
347 ::std::function<
void()> completionCallback,
348 ::std::shared_ptr<::ChunkDeletionMetadata> metadata
351 MCAPI
void $deleteStoredChunkData(
352 ::std::unordered_set<::ChunkPos> chunksToDelete,
353 ::std::function<
void()> completionCallback,
354 ::std::shared_ptr<::ChunkDeletionMetadata> metadata
359 MCAPI
void $writeEntityChunkTransfer(
::LevelChunk& levelChunk);
361 MCAPI
void $writeEntityChunkTransfersToUnloadedChunk(
363 ::std::vector<::ActorUnloadedChunkTransferEntry>
const& transfers
366 MCAPI
void $deserializeActorStorageToLevelChunk(
::LevelChunk& levelChunk);
368 MCAPI
void $hintDiscardBatchBegin();
370 MCAPI
void $hintDiscardBatchEnd();
372 MCAPI
void $acquireDiscarded(::std::unique_ptr<::LevelChunk, ::LevelChunkFinalDeleter> ptr);
374 MCAPI
void $compact();
376 MCAPI
void $flushPendingDiscardedChunkWrites();
378 MCAPI
void $flushThreadBatch();
380 MCFOLD
bool $isWithinWorldLimit(
::ChunkPos const& cp)
const;
382 MCFOLD ::std::unordered_map<::ChunkPos, ::std::weak_ptr<::LevelChunk>>
const* $getChunkMap();
384 MCAPI ::std::unordered_map<::ChunkPos, ::std::weak_ptr<::LevelChunk>>
const& $getStorage()
const;
386 MCFOLD
void $clearDeletedEntities();
388 MCFOLD
bool $canCreateViews()
const;
390 MCAPI ::std::unique_ptr<::BlendingDataProvider> $tryGetBlendingDataProvider();
392 MCAPI ::std::shared_ptr<::LevelChunkMetaDataDictionary> $loadLevelChunkMetaDataDictionary();
394 MCFOLD
void $setLevelChunk(::std::shared_ptr<::LevelChunk> lc);
396 MCAPI
bool $canLaunchTasks()
const;
398 MCAPI
bool $chunkPosNeedsBlending(
::ChunkPos const& cp);
400 MCAPI
void $_clearBlendingCache();