34class DBChunkStorage :
public ::ChunkSource {
42 enum class ChunkCacheStatus :
int {
48 struct PreCavesAndCliffsMetaData {
58 PreCavesAndCliffsMetaData& operator=(PreCavesAndCliffsMetaData
const&);
59 PreCavesAndCliffsMetaData(PreCavesAndCliffsMetaData
const&);
60 PreCavesAndCliffsMetaData();
66 ::ll::TypedStorage<8, 64, ::std::unordered_map<::DBChunkStorageKey, ::DBChunkStorage::ChunkCacheStatus>>
68 ::ll::TypedStorage<8, 8, ::std::shared_mutex> mHasChunkCacheSharedMutex;
69 ::ll::TypedStorage<8, 64, ::std::unordered_map<::ChunkPos, ::std::pair<bool, ::std::shared_ptr<::BlendingData>>>>
70 mChunkBlendingDataCache;
71 ::ll::TypedStorage<8, 8, ::std::shared_mutex> mChunkBlendingDataSharedMutex;
72 ::ll::TypedStorage<8, 8, ::std::shared_mutex> mAttenuatorSharedMutex;
73 ::ll::TypedStorage<8, 8, ::DBStorage&> mStorage;
74 ::ll::TypedStorage<8, 24, ::std::vector<::std::shared_ptr<::LevelStorageWriteBatch>>> mBufferPool;
75 ::ll::TypedStorage<8, 24, ::std::vector<::std::unique_ptr<::LevelChunk, ::LevelChunkFinalDeleter>>> mDiscardBatch;
76 ::ll::TypedStorage<8, 64, ::std::unordered_set<::ChunkPos>> mLiveChunksBeingSaved;
78 TypedStorage<8, 64, ::std::unordered_map<::ChunkPos, ::std::unique_ptr<::LevelChunk, ::LevelChunkFinalDeleter>>>
79 mDiscardedWhileLiveSaved;
80 ::ll::TypedStorage<1, 1, bool> mBatch;
81 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::TaskGroup>> mIOTaskGroup;
82 ::ll::TypedStorage<8, 32, ::BaseGameVersion> mCurrentLevelVersion;
87 DBChunkStorage& operator=(DBChunkStorage
const&);
88 DBChunkStorage(DBChunkStorage
const&);
94 virtual ~DBChunkStorage() =
default;
96 virtual void shutdown() ;
98 virtual bool isShutdownDone() ;
100 virtual void loadChunk(
::LevelChunk& lc,
bool forceImmediateReplacementDataLoad) ;
102 virtual bool isChunkKnown(
::ChunkPos const& chunkPos) ;
104 virtual bool isChunkSaved(
::ChunkPos const& chunkPos) ;
112 virtual bool verifyChunkNeedsNeighborAwareUpgrade(
::LevelChunk& lc) ;
116 virtual void deleteAllChunkData(
117 ::std::unordered_set<::ChunkPos> excludedChunks,
118 ::std::function<
void()> completionCallback,
119 ::std::shared_ptr<::ChunkDeletionMetadata> metadata
122 virtual void deleteStoredChunkData(
123 ::std::unordered_set<::ChunkPos> chunksToDelete,
124 ::std::function<
void()> completionCallback,
125 ::std::shared_ptr<::ChunkDeletionMetadata> metadata
130 virtual void writeEntityChunkTransfer(
::LevelChunk& lc) ;
132 virtual void writeEntityChunkTransfersToUnloadedChunk(
134 ::std::vector<::ActorUnloadedChunkTransferEntry>
const& transfers
137 virtual void acquireDiscarded(::std::unique_ptr<::LevelChunk, ::LevelChunkFinalDeleter> ptr) ;
139 virtual void hintDiscardBatchBegin() ;
141 virtual void hintDiscardBatchEnd() ;
143 virtual void flushPendingDiscardedChunkWrites() ;
145 virtual void flushThreadBatch() ;
147 virtual ::std::unique_ptr<::BlendingDataProvider> tryGetBlendingDataProvider() ;
149 virtual ::std::shared_ptr<::LevelChunkMetaDataDictionary> loadLevelChunkMetaDataDictionary() ;
151 virtual void deserializeActorStorageToLevelChunk(
::LevelChunk& levelChunk) ;
153 virtual bool chunkPosNeedsBlending(
::ChunkPos const& cp) ;
155 virtual ::std::shared_ptr<::br::worldgen::StructureInstance>
162 MCAPI ::std::pair<bool, ::std::shared_ptr<::BlendingData>> _cacheSeamlessChunkBlendingData(
165 ::std::shared_ptr<::BlendingData> blendingData
170 MCAPI
void _deserializeIndependentActorStorage(
::LevelChunk& lc, ::std::string
const& storageKeyDigestBuffer);
180 MCAPI
void _saveBlendData(
182 ::std::string_view prefix,
190 MCAPI
void _serializeEntities(
194 bool markEntitiesProcesedOnChunkDiscard
197 MCAPI ::std::string _upgradeActorStorage(
::ChunkKey chunkKey, ::std::string_view& legacyActorData);
199 MCAPI
void _writeDiscardChunksBatch();
205 MCAPI static ::std::vector<::std::string> _deserializeChunkActorStorageKeys(
::IDataInput& digestStream);
210 MCAPI static ::std::string deserializeActorStorageToString(
211 bool hasActorDigestVersionTag,
212 ::std::string
const& storageKeyDigestBuffer,
213 ::std::function<
bool(::std::string_view, ::std::string&)> loadDataCallback
221 MCFOLD
void $shutdown();
223 MCAPI
void $shutdown();
226 MCAPI
bool $isShutdownDone();
228 MCAPI
void $loadChunk(
::LevelChunk& lc,
bool forceImmediateReplacementDataLoad);
230 MCAPI
bool $isChunkKnown(
::ChunkPos const& chunkPos);
232 MCAPI
bool $isChunkSaved(
::ChunkPos const& chunkPos);
240 MCAPI
bool $verifyChunkNeedsNeighborAwareUpgrade(
::LevelChunk& lc);
244 MCAPI
void $deleteAllChunkData(
245 ::std::unordered_set<::ChunkPos> excludedChunks,
246 ::std::function<
void()> completionCallback,
247 ::std::shared_ptr<::ChunkDeletionMetadata> metadata
250 MCAPI
void $deleteStoredChunkData(
251 ::std::unordered_set<::ChunkPos> chunksToDelete,
252 ::std::function<
void()> completionCallback,
253 ::std::shared_ptr<::ChunkDeletionMetadata> metadata
260 MCAPI
void $writeEntityChunkTransfersToUnloadedChunk(
262 ::std::vector<::ActorUnloadedChunkTransferEntry>
const& transfers
265 MCAPI
void $acquireDiscarded(::std::unique_ptr<::LevelChunk, ::LevelChunkFinalDeleter> ptr);
267 MCAPI
void $hintDiscardBatchBegin();
269 MCAPI
void $hintDiscardBatchEnd();
271 MCAPI
void $flushPendingDiscardedChunkWrites();
273 MCAPI
void $flushThreadBatch();
275 MCAPI ::std::unique_ptr<::BlendingDataProvider> $tryGetBlendingDataProvider();
277 MCAPI ::std::shared_ptr<::LevelChunkMetaDataDictionary> $loadLevelChunkMetaDataDictionary();
279 MCAPI
void $deserializeActorStorageToLevelChunk(
::LevelChunk& levelChunk);
281 MCAPI
bool $chunkPosNeedsBlending(
::ChunkPos const& cp);
283 MCAPI ::std::shared_ptr<::br::worldgen::StructureInstance>