// This Header is auto generated by BDSLiteLoader Toolchain
#pragma once
#define AUTO_GENERATED
#include "../Global.h"

#define BEFORE_EXTRA

#undef BEFORE_EXTRA

class ChunkSource {

#define AFTER_EXTRA

#undef AFTER_EXTRA
#ifndef DISABLE_CONSTRUCTOR_PREVENTION_CHUNKSOURCE
public:
    class ChunkSource& operator=(class ChunkSource const &) = delete;
    ChunkSource(class ChunkSource const &) = delete;
    ChunkSource() = delete;
#endif

public:
    /*0*/ virtual ~ChunkSource();
    /*1*/ virtual void shutdown();
    /*2*/ virtual bool isShutdownDone();
    /*3*/ virtual class std::shared_ptr<class LevelChunk> getExistingChunk(class ChunkPos const &);
    /*4*/ virtual class std::shared_ptr<class LevelChunk> getRandomChunk(class Random &);
    /*5*/ virtual class std::shared_ptr<class LevelChunk> createNewChunk(class ChunkPos const &, enum ChunkSource::LoadMode);
    /*6*/ virtual class std::shared_ptr<class LevelChunk> getOrLoadChunk(class ChunkPos const &, enum ChunkSource::LoadMode);
    /*7*/ virtual bool postProcess(class ChunkViewSource &);
    /*8*/ virtual void checkAndReplaceChunk(class ChunkViewSource &, class LevelChunk &);
    /*9*/ virtual void loadChunk(class LevelChunk &, bool);
    /*10*/ virtual void postProcessMobsAt(class BlockSource &, int, int, class Random &);
    /*11*/ virtual bool saveLiveChunk(class LevelChunk &);
    /*12*/ virtual void hintDiscardBatchBegin();
    /*13*/ virtual void hintDiscardBatchEnd();
    /*14*/ virtual void acquireDiscarded(class std::unique_ptr<class LevelChunk, struct LevelChunkFinalDeleter>);
    /*15*/ virtual void compact();
    /*16*/ virtual void flushPendingWrites();
    /*17*/ virtual bool isWithinWorldLimit(class ChunkPos const &) const;
    /*18*/ virtual class std::unordered_map<class ChunkPos, class std::weak_ptr<class LevelChunk>, struct std::hash<class ChunkPos>, struct std::equal_to<class ChunkPos>, class std::allocator<struct std::pair<class ChunkPos const, class std::weak_ptr<class LevelChunk>>>> const * getChunkMap();
    /*19*/ virtual class std::unordered_map<class ChunkPos, class std::weak_ptr<class LevelChunk>, struct std::hash<class ChunkPos>, struct std::equal_to<class ChunkPos>, class std::allocator<struct std::pair<class ChunkPos const, class std::weak_ptr<class LevelChunk>>>> const & getStorage() const;
    /*20*/ virtual void clearDeletedEntities();
    /*21*/ virtual bool canCreateViews() const;
#ifdef ENABLE_VIRTUAL_FAKESYMBOL_CHUNKSOURCE
#endif
    MCAPI ChunkSource(std::unique_ptr<class ChunkSource>);
    MCAPI void checkAndLaunchChunkGenerationTasks(bool);
    MCAPI class GridArea<class std::shared_ptr<class LevelChunk>> createEmptyView(enum ChunkSource::LoadMode, bool, class std::function<void (class buffer_span_mut<class std::shared_ptr<class LevelChunk>>, class buffer_span<unsigned int>)>);
    MCAPI class std::shared_ptr<class LevelChunk> getAvailableChunk(class ChunkPos const &);
    MCAPI class std::shared_ptr<class LevelChunk> getGeneratedChunk(class ChunkPos const &);

//protected:
    MCAPI bool _checkAndDispatchTaskForLevelChunk(struct std::pair<class ChunkPos, enum ChunkState> const &, bool);
    MCAPI bool _checkForReplacementDataTask(class LevelChunk &, class ChunkViewSource &);
    MCAPI void _checkForUnblockingChunks(class LevelChunk const &);
    MCAPI void _checkLevelChunkForNextStage(class LevelChunk const &, class LevelChunkGridAreaElement<class std::weak_ptr<class LevelChunk>> &, enum ChunkState);
    MCAPI void _checkLevelChunkForPostProcessing(class LevelChunk const &, class LevelChunkGridAreaElement<class std::weak_ptr<class LevelChunk>> &);
    MCAPI bool _chunkAtStage(class std::weak_ptr<class LevelChunk>, enum ChunkState);
    MCAPI void _freeChunkGenerationGridMap(class ChunkPos const &);
    MCAPI void _launchGenerationTask(class std::shared_ptr<class LevelChunk> const &, bool);
    MCAPI void _launchLightingTask(class std::shared_ptr<class LevelChunk> const &, class std::shared_ptr<class ChunkViewSource> const &, bool);
    MCAPI void _launchPostProcessingTask(class std::shared_ptr<class LevelChunk> const &, class std::shared_ptr<class ChunkViewSource> const &, bool);
    MCAPI void _launchReplacementDataTask(class std::shared_ptr<class LevelChunk> const &, class std::shared_ptr<class ChunkViewSource> const &, bool);
    MCAPI bool _lightingTask(class std::shared_ptr<class LevelChunk> const &, class ChunkViewSource &);
    MCAPI bool _loadChunkTask(class LevelChunk &);
    MCAPI bool _postProcessingTask(class LevelChunk &, class ChunkViewSource &);
    MCAPI void _spawnChunkGenerationTasks(int, bool);

protected:

};