4jcraft/Minecraft.Client/Network/MultiPlayerChunkCache.h
MatthewBeshay bc6013ab70 Replace all CRITICAL_SECTION usage with std::mutex and std::lock_guard
Migrates 59 files from WinAPI CRITICAL_SECTION to portable C++ std::mutex/std::lock_guard/std::unique_lock. Removes Linux CRITICAL_SECTION shims from winapi_stubs.h.
2026-03-30 18:45:55 +11:00

52 lines
1.8 KiB
C++

#pragma once
#include <mutex>
#include "../../Minecraft.World/Headers/net.minecraft.world.level.h"
#include "../../Minecraft.World/Headers/net.minecraft.world.level.chunk.h"
#include "../../Minecraft.World/Level/RandomLevelSource.h"
class ServerChunkCache;
// 4J - various alterations here to make this thread safe, and operate as a
// fixed sized cache
class MultiPlayerChunkCache : public ChunkSource {
friend class LevelRenderer;
private:
LevelChunk* emptyChunk;
LevelChunk* waterChunk;
std::vector<LevelChunk*> loadedChunkList;
LevelChunk** cache;
// 4J - added for multithreaded support
std::mutex m_csLoadCreate;
// 4J - size of cache is defined by size of one side - must be even
int XZSIZE;
int XZOFFSET;
bool* hasData;
Level* level;
public:
MultiPlayerChunkCache(Level* level);
~MultiPlayerChunkCache();
virtual bool hasChunk(int x, int z);
virtual bool reallyHasChunk(int x, int z);
virtual void drop(int x, int z);
virtual LevelChunk* create(int x, int z);
virtual LevelChunk* getChunk(int x, int z);
virtual bool save(bool force, ProgressListener* progressListener);
virtual bool tick();
virtual bool shouldSave();
virtual void postProcess(ChunkSource* parent, int x, int z);
virtual std::wstring gatherStats();
virtual std::vector<Biome::MobSpawnerData*>* getMobsAt(
MobCategory* mobCategory, int x, int y, int z);
virtual TilePos* findNearestMapFeature(Level* level,
const std::wstring& featureName,
int x, int y, int z);
virtual void recreateLogicStructuresForChunk(int chunkX, int chunkZ);
virtual void dataReceived(int x, int z); // 4J added
virtual LevelChunk** getCache() { return cache; } // 4J added
};