summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Chunk.cpp4
-rw-r--r--src/Chunk.h8
-rw-r--r--src/ChunkMap.cpp34
-rw-r--r--src/ChunkMap.h25
-rw-r--r--src/World.cpp211
-rw-r--r--src/World.h28
6 files changed, 144 insertions, 166 deletions
diff --git a/src/Chunk.cpp b/src/Chunk.cpp
index 7bf7f0567..eb44828e2 100644
--- a/src/Chunk.cpp
+++ b/src/Chunk.cpp
@@ -270,7 +270,7 @@ void cChunk::MarkLoadFailed(void)
-void cChunk::GetAllData(cChunkDataCallback & a_Callback)
+void cChunk::GetAllData(cChunkDataCallback & a_Callback) const
{
ASSERT(m_Presence == cpPresent);
@@ -2027,7 +2027,7 @@ void cChunk::GetBlockTypeMeta(Vector3i a_RelPos, BLOCKTYPE & a_BlockType, NIBBLE
-void cChunk::GetBlockInfo(Vector3i a_RelPos, BLOCKTYPE & a_BlockType, NIBBLETYPE & a_Meta, NIBBLETYPE & a_SkyLight, NIBBLETYPE & a_BlockLight)
+void cChunk::GetBlockInfo(Vector3i a_RelPos, BLOCKTYPE & a_BlockType, NIBBLETYPE & a_Meta, NIBBLETYPE & a_SkyLight, NIBBLETYPE & a_BlockLight) const
{
a_BlockType = GetBlock(a_RelPos);
a_Meta = m_ChunkData.GetMeta(a_RelPos);
diff --git a/src/Chunk.h b/src/Chunk.h
index bfd860b1c..28f7b0bec 100644
--- a/src/Chunk.h
+++ b/src/Chunk.h
@@ -111,7 +111,7 @@ public:
void MarkLoadFailed(void);
/** Gets all chunk data, calls the a_Callback's methods for each data type */
- void GetAllData(cChunkDataCallback & a_Callback);
+ void GetAllData(cChunkDataCallback & a_Callback) const;
/** Sets all chunk data as either loaded from the storage or generated.
BlockLight and BlockSkyLight are optional, if not present, chunk will be marked as unlighted.
@@ -172,11 +172,7 @@ public:
GetBlockTypeMeta({ a_RelX, a_RelY, a_RelZ }, a_BlockType, a_BlockMeta);
}
- void GetBlockInfo(Vector3i a_RelPos, BLOCKTYPE & a_BlockType, NIBBLETYPE & a_Meta, NIBBLETYPE & a_SkyLight, NIBBLETYPE & a_BlockLight);
- void GetBlockInfo(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE & a_BlockType, NIBBLETYPE & a_Meta, NIBBLETYPE & a_SkyLight, NIBBLETYPE & a_BlockLight)
- {
- GetBlockInfo({ a_RelX, a_RelY, a_RelZ }, a_BlockType, a_Meta, a_SkyLight, a_BlockLight);
- }
+ void GetBlockInfo(Vector3i a_RelPos, BLOCKTYPE & a_BlockType, NIBBLETYPE & a_Meta, NIBBLETYPE & a_SkyLight, NIBBLETYPE & a_BlockLight) const;
/** Convert absolute coordinates into relative coordinates.
Returns false on failure to obtain a valid chunk. Returns true otherwise.
diff --git a/src/ChunkMap.cpp b/src/ChunkMap.cpp
index aaa8cc0b1..facfe8a31 100644
--- a/src/ChunkMap.cpp
+++ b/src/ChunkMap.cpp
@@ -101,6 +101,18 @@ cChunk * cChunkMap::FindChunk(int a_ChunkX, int a_ChunkZ)
+const cChunk * cChunkMap::FindChunk(int a_ChunkX, int a_ChunkZ) const
+{
+ ASSERT(m_CSChunks.IsLockedByCurrentThread());
+
+ const auto Chunk = m_Chunks.find({ a_ChunkX, a_ChunkZ });
+ return (Chunk == m_Chunks.end()) ? nullptr : &Chunk->second;
+}
+
+
+
+
+
void cChunkMap::SendBlockEntity(int a_BlockX, int a_BlockY, int a_BlockZ, cClientHandle & a_Client)
{
cCSLock Lock(m_CSChunks);
@@ -285,7 +297,7 @@ void cChunkMap::ChunkLighted(
-bool cChunkMap::GetChunkData(cChunkCoords a_Coords, cChunkDataCallback & a_Callback)
+bool cChunkMap::GetChunkData(cChunkCoords a_Coords, cChunkDataCallback & a_Callback) const
{
if (!a_Callback.Coords(a_Coords.m_ChunkX, a_Coords.m_ChunkZ))
{
@@ -323,7 +335,7 @@ bool cChunkMap::GetChunkBlockTypes(int a_ChunkX, int a_ChunkZ, BLOCKTYPE * a_Blo
-bool cChunkMap::IsChunkQueued(int a_ChunkX, int a_ChunkZ)
+bool cChunkMap::IsChunkQueued(int a_ChunkX, int a_ChunkZ) const
{
cCSLock Lock(m_CSChunks);
const auto Chunk = FindChunk(a_ChunkX, a_ChunkZ);
@@ -334,7 +346,7 @@ bool cChunkMap::IsChunkQueued(int a_ChunkX, int a_ChunkZ)
-bool cChunkMap::IsChunkValid(int a_ChunkX, int a_ChunkZ)
+bool cChunkMap::IsChunkValid(int a_ChunkX, int a_ChunkZ) const
{
cCSLock Lock(m_CSChunks);
const auto Chunk = FindChunk(a_ChunkX, a_ChunkZ);
@@ -345,7 +357,7 @@ bool cChunkMap::IsChunkValid(int a_ChunkX, int a_ChunkZ)
-bool cChunkMap::HasChunkAnyClients(int a_ChunkX, int a_ChunkZ)
+bool cChunkMap::HasChunkAnyClients(int a_ChunkX, int a_ChunkZ) const
{
cCSLock Lock(m_CSChunks);
const auto Chunk = FindChunk(a_ChunkX, a_ChunkZ);
@@ -448,7 +460,7 @@ void cChunkMap::CollectPickupsByPlayer(cPlayer & a_Player)
-BLOCKTYPE cChunkMap::GetBlock(Vector3i a_BlockPos)
+BLOCKTYPE cChunkMap::GetBlock(Vector3i a_BlockPos) const
{
auto chunkPos = cChunkDef::BlockToChunk(a_BlockPos);
auto relPos = cChunkDef::AbsoluteToRelative(a_BlockPos, chunkPos);
@@ -467,7 +479,7 @@ BLOCKTYPE cChunkMap::GetBlock(Vector3i a_BlockPos)
-NIBBLETYPE cChunkMap::GetBlockMeta(Vector3i a_BlockPos)
+NIBBLETYPE cChunkMap::GetBlockMeta(Vector3i a_BlockPos) const
{
auto chunkPos = cChunkDef::BlockToChunk(a_BlockPos);
auto relPos = cChunkDef::AbsoluteToRelative(a_BlockPos, chunkPos);
@@ -486,7 +498,7 @@ NIBBLETYPE cChunkMap::GetBlockMeta(Vector3i a_BlockPos)
-NIBBLETYPE cChunkMap::GetBlockSkyLight(Vector3i a_BlockPos)
+NIBBLETYPE cChunkMap::GetBlockSkyLight(Vector3i a_BlockPos) const
{
auto chunkPos = cChunkDef::BlockToChunk(a_BlockPos);
auto relPos = cChunkDef::AbsoluteToRelative(a_BlockPos, chunkPos);
@@ -505,7 +517,7 @@ NIBBLETYPE cChunkMap::GetBlockSkyLight(Vector3i a_BlockPos)
-NIBBLETYPE cChunkMap::GetBlockBlockLight(Vector3i a_BlockPos)
+NIBBLETYPE cChunkMap::GetBlockBlockLight(Vector3i a_BlockPos) const
{
auto chunkPos = cChunkDef::BlockToChunk(a_BlockPos);
auto relPos = cChunkDef::AbsoluteToRelative(a_BlockPos, chunkPos);
@@ -559,7 +571,7 @@ void cChunkMap::SetBlock(Vector3i a_BlockPos, BLOCKTYPE a_BlockType, NIBBLETYPE
-bool cChunkMap::GetBlockTypeMeta(Vector3i a_BlockPos, BLOCKTYPE & a_BlockType, NIBBLETYPE & a_BlockMeta)
+bool cChunkMap::GetBlockTypeMeta(Vector3i a_BlockPos, BLOCKTYPE & a_BlockType, NIBBLETYPE & a_BlockMeta) const
{
auto chunkCoord = cChunkDef::BlockToChunk(a_BlockPos);
auto relPos = cChunkDef::AbsoluteToRelative(a_BlockPos, chunkCoord);
@@ -578,7 +590,7 @@ bool cChunkMap::GetBlockTypeMeta(Vector3i a_BlockPos, BLOCKTYPE & a_BlockType, N
-bool cChunkMap::GetBlockInfo(Vector3i a_BlockPos, BLOCKTYPE & a_BlockType, NIBBLETYPE & a_Meta, NIBBLETYPE & a_SkyLight, NIBBLETYPE & a_BlockLight)
+bool cChunkMap::GetBlockInfo(Vector3i a_BlockPos, BLOCKTYPE & a_BlockType, NIBBLETYPE & a_Meta, NIBBLETYPE & a_SkyLight, NIBBLETYPE & a_BlockLight) const
{
auto chunkPos = cChunkDef::BlockToChunk(a_BlockPos);
auto relPos = cChunkDef::AbsoluteToRelative(a_BlockPos, chunkPos);
@@ -633,7 +645,7 @@ void cChunkMap::ReplaceTreeBlocks(const sSetBlockVector & a_Blocks)
-EMCSBiome cChunkMap::GetBiomeAt (int a_BlockX, int a_BlockZ)
+EMCSBiome cChunkMap::GetBiomeAt(int a_BlockX, int a_BlockZ) const
{
int ChunkX, ChunkZ, X = a_BlockX, Y = 0, Z = a_BlockZ;
cChunkDef::AbsoluteToRelative(X, Y, Z, ChunkX, ChunkZ);
diff --git a/src/ChunkMap.h b/src/ChunkMap.h
index 4a7e952b5..38f03255a 100644
--- a/src/ChunkMap.h
+++ b/src/ChunkMap.h
@@ -112,16 +112,16 @@ public:
/** Calls the callback with the chunk's data, if available (with ChunkCS locked).
Returns true if the chunk was reported successfully, false if not (chunk not present or callback failed). */
- bool GetChunkData(cChunkCoords a_Coords, cChunkDataCallback & a_Callback);
+ bool GetChunkData(cChunkCoords a_Coords, cChunkDataCallback & a_Callback) const;
/** Copies the chunk's blocktypes into a_Blocks; returns true if successful */
bool GetChunkBlockTypes (int a_ChunkX, int a_ChunkZ, BLOCKTYPE * a_Blocks);
/** Returns true iff the chunk is in the loader / generator queue. */
- bool IsChunkQueued(int a_ChunkX, int a_ChunkZ);
+ bool IsChunkQueued(int a_ChunkX, int a_ChunkZ) const;
- bool IsChunkValid (int a_ChunkX, int a_ChunkZ);
- bool HasChunkAnyClients (int a_ChunkX, int a_ChunkZ);
+ bool IsChunkValid (int a_ChunkX, int a_ChunkZ) const;
+ bool HasChunkAnyClients (int a_ChunkX, int a_ChunkZ) const;
int GetHeight (int a_BlockX, int a_BlockZ); // Waits for the chunk to get loaded / generated
bool TryGetHeight (int a_BlockX, int a_BlockZ, int & a_Height); // Returns false if chunk not loaded / generated
@@ -134,24 +134,24 @@ public:
/** Makes the specified player collect all the pickups around them. */
void CollectPickupsByPlayer(cPlayer & a_Player);
- BLOCKTYPE GetBlock (Vector3i a_BlockPos);
- NIBBLETYPE GetBlockMeta (Vector3i a_BlockPos);
- NIBBLETYPE GetBlockSkyLight (Vector3i a_BlockPos);
- NIBBLETYPE GetBlockBlockLight(Vector3i a_BlockPos);
+ BLOCKTYPE GetBlock (Vector3i a_BlockPos) const;
+ NIBBLETYPE GetBlockMeta (Vector3i a_BlockPos) const;
+ NIBBLETYPE GetBlockSkyLight (Vector3i a_BlockPos) const;
+ NIBBLETYPE GetBlockBlockLight(Vector3i a_BlockPos) const;
/** Sets the meta for the specified block, while keeping the blocktype.
Ignored if the chunk is invalid. */
void SetBlockMeta(Vector3i a_BlockPos, NIBBLETYPE a_BlockMeta);
void SetBlock (Vector3i a_BlockPos, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta);
- bool GetBlockTypeMeta (Vector3i a_BlockPos, BLOCKTYPE & a_BlockType, NIBBLETYPE & a_BlockMeta);
- bool GetBlockInfo (Vector3i, BLOCKTYPE & a_BlockType, NIBBLETYPE & a_Meta, NIBBLETYPE & a_SkyLight, NIBBLETYPE & a_BlockLight);
+ bool GetBlockTypeMeta (Vector3i a_BlockPos, BLOCKTYPE & a_BlockType, NIBBLETYPE & a_BlockMeta) const;
+ bool GetBlockInfo (Vector3i, BLOCKTYPE & a_BlockType, NIBBLETYPE & a_Meta, NIBBLETYPE & a_SkyLight, NIBBLETYPE & a_BlockLight) const;
/** Special function used for growing trees, replaces only blocks that tree may overwrite */
void ReplaceTreeBlocks(const sSetBlockVector & a_Blocks);
/** Returns the biome at the specified coords. Reads the biome from the chunk, if loaded, otherwise uses the world generator to provide the biome value */
- EMCSBiome GetBiomeAt (int a_BlockX, int a_BlockZ);
+ EMCSBiome GetBiomeAt (int a_BlockX, int a_BlockZ) const;
/** Sets the biome at the specified coords. Returns true if successful, false if not (chunk not loaded).
Doesn't resend the chunk to clients. */
@@ -462,6 +462,9 @@ private:
/** Locates a chunk ptr in the chunkmap; doesn't create it when not found; assumes m_CSChunks is locked. To be called only from cChunkMap. */
cChunk * FindChunk(int a_ChunkX, int a_ChunkZ);
+ /** Locates a chunk ptr in the chunkmap; doesn't create it when not found; assumes m_CSChunks is locked. To be called only from cChunkMap. */
+ const cChunk * FindChunk(int a_ChunkX, int a_ChunkZ) const;
+
/** Adds a new cChunkStay descendant to the internal list of ChunkStays; loads its chunks.
To be used only by cChunkStay; others should use cChunkStay::Enable() instead */
void AddChunkStay(cChunkStay & a_ChunkStay);
diff --git a/src/World.cpp b/src/World.cpp
index ba2f159a0..9aa31a14d 100644
--- a/src/World.cpp
+++ b/src/World.cpp
@@ -92,7 +92,7 @@ namespace World
// cWorld::cLock:
cWorld::cLock::cLock(cWorld & a_World) :
- Super(&(a_World.m_ChunkMap->GetCS()))
+ Super(&(a_World.m_ChunkMap.GetCS()))
{
}
@@ -184,7 +184,7 @@ cWorld::cWorld(
m_FireSimulator(),
m_RedstoneSimulator(nullptr),
m_MaxPlayers(10),
- m_ChunkMap(),
+ m_ChunkMap(this),
m_bAnimals(true),
m_Weather(eWeather_Sunny),
m_WeatherInterval(24000), // Guaranteed 1 game-day of sunshine at server start :)
@@ -227,9 +227,7 @@ cWorld::cWorld(
cFile::CreateFolderRecursive(m_DataPath);
- // TODO: unique ptr unnecessary
- m_ChunkMap = std::make_unique<cChunkMap>(this);
- m_ChunkMap->TrackInDeadlockDetect(a_DeadlockDetect, m_WorldName);
+ m_ChunkMap.TrackInDeadlockDetect(a_DeadlockDetect, m_WorldName);
// Load the scoreboard
cScoreboardSerializer Serializer(m_DataPath, &m_Scoreboard);
@@ -581,7 +579,7 @@ bool cWorld::IsWeatherWetAtXYZ(Vector3i a_Pos)
void cWorld::SetNextBlockToTick(const Vector3i a_BlockPos)
{
- return m_ChunkMap->SetNextBlockToTick(a_BlockPos);
+ return m_ChunkMap.SetNextBlockToTick(a_BlockPos);
}
@@ -957,7 +955,7 @@ void cWorld::Stop(cDeadlockDetect & a_DeadlockDetect)
a_DeadlockDetect.UntrackCriticalSection(m_CSClients);
a_DeadlockDetect.UntrackCriticalSection(m_CSTasks);
- m_ChunkMap->UntrackInDeadlockDetect(a_DeadlockDetect);
+ m_ChunkMap.UntrackInDeadlockDetect(a_DeadlockDetect);
if (IsSavingEnabled())
{
@@ -1022,7 +1020,7 @@ void cWorld::Tick(std::chrono::milliseconds a_Dt, std::chrono::milliseconds a_La
}
for (auto & Entity : EntitiesToAdd)
{
- m_ChunkMap->AddEntity(std::move(Entity));
+ m_ChunkMap.AddEntity(std::move(Entity));
}
EntitiesToAdd.clear();
@@ -1031,7 +1029,7 @@ void cWorld::Tick(std::chrono::milliseconds a_Dt, std::chrono::milliseconds a_La
TickClients(static_cast<float>(a_Dt.count()));
TickQueuedBlocks();
- m_ChunkMap->Tick(a_Dt); // Tick chunk after clients to apply at least one round of queued ticks (e.g. cBlockHandler::Check) this tick
+ m_ChunkMap.Tick(a_Dt); // Tick chunk after clients to apply at least one round of queued ticks (e.g. cBlockHandler::Check) this tick
TickMobs(a_Dt);
m_MapManager.TickMaps();
TickQueuedTasks();
@@ -1103,7 +1101,7 @@ void cWorld::TickMobs(std::chrono::milliseconds a_Dt)
// before every Mob action, we have to count them depending on the distance to players, on their family ...
cMobCensus MobCensus;
- m_ChunkMap->CollectMobCensus(MobCensus);
+ m_ChunkMap.CollectMobCensus(MobCensus);
if (m_bAnimals)
{
// Spawning is enabled, spawn now:
@@ -1129,7 +1127,7 @@ void cWorld::TickMobs(std::chrono::milliseconds a_Dt)
cMobSpawner Spawner(Family, m_AllowedMobs);
if (Spawner.CanSpawnAnything())
{
- m_ChunkMap->SpawnMobs(Spawner);
+ m_ChunkMap.SpawnMobs(Spawner);
// do the spawn
for (auto & Mob : Spawner.getSpawned())
{
@@ -1300,7 +1298,7 @@ void cWorld::UpdateSkyDarkness(void)
void cWorld::WakeUpSimulators(Vector3i a_Block)
{
- return m_ChunkMap->WakeUpSimulators(a_Block);
+ return m_ChunkMap.WakeUpSimulators(a_Block);
}
@@ -1328,7 +1326,7 @@ void cWorld::WakeUpSimulatorsInArea(const cCuboid & a_Area)
bool cWorld::ForEachBlockEntityInChunk(int a_ChunkX, int a_ChunkZ, cBlockEntityCallback a_Callback)
{
- return m_ChunkMap->ForEachBlockEntityInChunk(a_ChunkX, a_ChunkZ, a_Callback);
+ return m_ChunkMap.ForEachBlockEntityInChunk(a_ChunkX, a_ChunkZ, a_Callback);
}
@@ -1337,7 +1335,7 @@ bool cWorld::ForEachBlockEntityInChunk(int a_ChunkX, int a_ChunkZ, cBlockEntityC
bool cWorld::ForEachBrewingstandInChunk(int a_ChunkX, int a_ChunkZ, cBrewingstandCallback a_Callback)
{
- return m_ChunkMap->ForEachBrewingstandInChunk(a_ChunkX, a_ChunkZ, a_Callback);
+ return m_ChunkMap.ForEachBrewingstandInChunk(a_ChunkX, a_ChunkZ, a_Callback);
}
@@ -1346,7 +1344,7 @@ bool cWorld::ForEachBrewingstandInChunk(int a_ChunkX, int a_ChunkZ, cBrewingstan
bool cWorld::ForEachChestInChunk(int a_ChunkX, int a_ChunkZ, cChestCallback a_Callback)
{
- return m_ChunkMap->ForEachChestInChunk(a_ChunkX, a_ChunkZ, a_Callback);
+ return m_ChunkMap.ForEachChestInChunk(a_ChunkX, a_ChunkZ, a_Callback);
}
@@ -1355,7 +1353,7 @@ bool cWorld::ForEachChestInChunk(int a_ChunkX, int a_ChunkZ, cChestCallback a_Ca
bool cWorld::ForEachDispenserInChunk(int a_ChunkX, int a_ChunkZ, cDispenserCallback a_Callback)
{
- return m_ChunkMap->ForEachDispenserInChunk(a_ChunkX, a_ChunkZ, a_Callback);
+ return m_ChunkMap.ForEachDispenserInChunk(a_ChunkX, a_ChunkZ, a_Callback);
}
@@ -1364,7 +1362,7 @@ bool cWorld::ForEachDispenserInChunk(int a_ChunkX, int a_ChunkZ, cDispenserCallb
bool cWorld::ForEachDropperInChunk(int a_ChunkX, int a_ChunkZ, cDropperCallback a_Callback)
{
- return m_ChunkMap->ForEachDropperInChunk(a_ChunkX, a_ChunkZ, a_Callback);
+ return m_ChunkMap.ForEachDropperInChunk(a_ChunkX, a_ChunkZ, a_Callback);
}
@@ -1373,7 +1371,7 @@ bool cWorld::ForEachDropperInChunk(int a_ChunkX, int a_ChunkZ, cDropperCallback
bool cWorld::ForEachDropSpenserInChunk(int a_ChunkX, int a_ChunkZ, cDropSpenserCallback a_Callback)
{
- return m_ChunkMap->ForEachDropSpenserInChunk(a_ChunkX, a_ChunkZ, a_Callback);
+ return m_ChunkMap.ForEachDropSpenserInChunk(a_ChunkX, a_ChunkZ, a_Callback);
}
@@ -1382,7 +1380,7 @@ bool cWorld::ForEachDropSpenserInChunk(int a_ChunkX, int a_ChunkZ, cDropSpenserC
bool cWorld::ForEachFurnaceInChunk(int a_ChunkX, int a_ChunkZ, cFurnaceCallback a_Callback)
{
- return m_ChunkMap->ForEachFurnaceInChunk(a_ChunkX, a_ChunkZ, a_Callback);
+ return m_ChunkMap.ForEachFurnaceInChunk(a_ChunkX, a_ChunkZ, a_Callback);
}
@@ -1426,7 +1424,7 @@ void cWorld::DoExplosionAt(double a_ExplosionSize, double a_BlockX, double a_Blo
bool cWorld::DoWithBlockEntityAt(int a_BlockX, int a_BlockY, int a_BlockZ, cBlockEntityCallback a_Callback)
{
- return m_ChunkMap->DoWithBlockEntityAt(a_BlockX, a_BlockY, a_BlockZ, a_Callback);
+ return m_ChunkMap.DoWithBlockEntityAt(a_BlockX, a_BlockY, a_BlockZ, a_Callback);
}
@@ -1435,7 +1433,7 @@ bool cWorld::DoWithBlockEntityAt(int a_BlockX, int a_BlockY, int a_BlockZ, cBloc
bool cWorld::DoWithBeaconAt(int a_BlockX, int a_BlockY, int a_BlockZ, cBeaconCallback a_Callback)
{
- return m_ChunkMap->DoWithBeaconAt(a_BlockX, a_BlockY, a_BlockZ, a_Callback);
+ return m_ChunkMap.DoWithBeaconAt(a_BlockX, a_BlockY, a_BlockZ, a_Callback);
}
@@ -1444,7 +1442,7 @@ bool cWorld::DoWithBeaconAt(int a_BlockX, int a_BlockY, int a_BlockZ, cBeaconCal
bool cWorld::DoWithBedAt(int a_BlockX, int a_BlockY, int a_BlockZ, cBedCallback a_Callback)
{
- return m_ChunkMap->DoWithBedAt(a_BlockX, a_BlockY, a_BlockZ, a_Callback);
+ return m_ChunkMap.DoWithBedAt(a_BlockX, a_BlockY, a_BlockZ, a_Callback);
}
@@ -1453,7 +1451,7 @@ bool cWorld::DoWithBedAt(int a_BlockX, int a_BlockY, int a_BlockZ, cBedCallback
bool cWorld::DoWithBrewingstandAt(int a_BlockX, int a_BlockY, int a_BlockZ, cBrewingstandCallback a_Callback)
{
- return m_ChunkMap->DoWithBrewingstandAt(a_BlockX, a_BlockY, a_BlockZ, a_Callback);
+ return m_ChunkMap.DoWithBrewingstandAt(a_BlockX, a_BlockY, a_BlockZ, a_Callback);
}
@@ -1462,7 +1460,7 @@ bool cWorld::DoWithBrewingstandAt(int a_BlockX, int a_BlockY, int a_BlockZ, cBre
bool cWorld::DoWithChestAt(int a_BlockX, int a_BlockY, int a_BlockZ, cChestCallback a_Callback)
{
- return m_ChunkMap->DoWithChestAt(a_BlockX, a_BlockY, a_BlockZ, a_Callback);
+ return m_ChunkMap.DoWithChestAt(a_BlockX, a_BlockY, a_BlockZ, a_Callback);
}
@@ -1471,7 +1469,7 @@ bool cWorld::DoWithChestAt(int a_BlockX, int a_BlockY, int a_BlockZ, cChestCallb
bool cWorld::DoWithDispenserAt(int a_BlockX, int a_BlockY, int a_BlockZ, cDispenserCallback a_Callback)
{
- return m_ChunkMap->DoWithDispenserAt(a_BlockX, a_BlockY, a_BlockZ, a_Callback);
+ return m_ChunkMap.DoWithDispenserAt(a_BlockX, a_BlockY, a_BlockZ, a_Callback);
}
@@ -1480,7 +1478,7 @@ bool cWorld::DoWithDispenserAt(int a_BlockX, int a_BlockY, int a_BlockZ, cDispen
bool cWorld::DoWithDropperAt(int a_BlockX, int a_BlockY, int a_BlockZ, cDropperCallback a_Callback)
{
- return m_ChunkMap->DoWithDropperAt(a_BlockX, a_BlockY, a_BlockZ, a_Callback);
+ return m_ChunkMap.DoWithDropperAt(a_BlockX, a_BlockY, a_BlockZ, a_Callback);
}
@@ -1489,7 +1487,7 @@ bool cWorld::DoWithDropperAt(int a_BlockX, int a_BlockY, int a_BlockZ, cDropperC
bool cWorld::DoWithDropSpenserAt(int a_BlockX, int a_BlockY, int a_BlockZ, cDropSpenserCallback a_Callback)
{
- return m_ChunkMap->DoWithDropSpenserAt(a_BlockX, a_BlockY, a_BlockZ, a_Callback);
+ return m_ChunkMap.DoWithDropSpenserAt(a_BlockX, a_BlockY, a_BlockZ, a_Callback);
}
@@ -1498,7 +1496,7 @@ bool cWorld::DoWithDropSpenserAt(int a_BlockX, int a_BlockY, int a_BlockZ, cDrop
bool cWorld::DoWithFurnaceAt(int a_BlockX, int a_BlockY, int a_BlockZ, cFurnaceCallback a_Callback)
{
- return m_ChunkMap->DoWithFurnaceAt(a_BlockX, a_BlockY, a_BlockZ, a_Callback);
+ return m_ChunkMap.DoWithFurnaceAt(a_BlockX, a_BlockY, a_BlockZ, a_Callback);
}
@@ -1507,7 +1505,7 @@ bool cWorld::DoWithFurnaceAt(int a_BlockX, int a_BlockY, int a_BlockZ, cFurnaceC
bool cWorld::DoWithHopperAt(int a_BlockX, int a_BlockY, int a_BlockZ, cHopperCallback a_Callback)
{
- return m_ChunkMap->DoWithHopperAt(a_BlockX, a_BlockY, a_BlockZ, a_Callback);
+ return m_ChunkMap.DoWithHopperAt(a_BlockX, a_BlockY, a_BlockZ, a_Callback);
}
@@ -1516,7 +1514,7 @@ bool cWorld::DoWithHopperAt(int a_BlockX, int a_BlockY, int a_BlockZ, cHopperCal
bool cWorld::DoWithNoteBlockAt(int a_BlockX, int a_BlockY, int a_BlockZ, cNoteBlockCallback a_Callback)
{
- return m_ChunkMap->DoWithNoteBlockAt(a_BlockX, a_BlockY, a_BlockZ, a_Callback);
+ return m_ChunkMap.DoWithNoteBlockAt(a_BlockX, a_BlockY, a_BlockZ, a_Callback);
}
@@ -1525,7 +1523,7 @@ bool cWorld::DoWithNoteBlockAt(int a_BlockX, int a_BlockY, int a_BlockZ, cNoteBl
bool cWorld::DoWithCommandBlockAt(int a_BlockX, int a_BlockY, int a_BlockZ, cCommandBlockCallback a_Callback)
{
- return m_ChunkMap->DoWithCommandBlockAt(a_BlockX, a_BlockY, a_BlockZ, a_Callback);
+ return m_ChunkMap.DoWithCommandBlockAt(a_BlockX, a_BlockY, a_BlockZ, a_Callback);
}
@@ -1534,7 +1532,7 @@ bool cWorld::DoWithCommandBlockAt(int a_BlockX, int a_BlockY, int a_BlockZ, cCom
bool cWorld::DoWithMobHeadAt(int a_BlockX, int a_BlockY, int a_BlockZ, cMobHeadCallback a_Callback)
{
- return m_ChunkMap->DoWithMobHeadAt(a_BlockX, a_BlockY, a_BlockZ, a_Callback);
+ return m_ChunkMap.DoWithMobHeadAt(a_BlockX, a_BlockY, a_BlockZ, a_Callback);
}
@@ -1543,7 +1541,7 @@ bool cWorld::DoWithMobHeadAt(int a_BlockX, int a_BlockY, int a_BlockZ, cMobHeadC
bool cWorld::DoWithFlowerPotAt(int a_BlockX, int a_BlockY, int a_BlockZ, cFlowerPotCallback a_Callback)
{
- return m_ChunkMap->DoWithFlowerPotAt(a_BlockX, a_BlockY, a_BlockZ, a_Callback);
+ return m_ChunkMap.DoWithFlowerPotAt(a_BlockX, a_BlockY, a_BlockZ, a_Callback);
}
@@ -1552,7 +1550,7 @@ bool cWorld::DoWithFlowerPotAt(int a_BlockX, int a_BlockY, int a_BlockZ, cFlower
bool cWorld::GetSignLines(int a_BlockX, int a_BlockY, int a_BlockZ, AString & a_Line1, AString & a_Line2, AString & a_Line3, AString & a_Line4)
{
- return m_ChunkMap->GetSignLines(a_BlockX, a_BlockY, a_BlockZ, a_Line1, a_Line2, a_Line3, a_Line4);
+ return m_ChunkMap.GetSignLines(a_BlockX, a_BlockY, a_BlockZ, a_Line1, a_Line2, a_Line3, a_Line4);
}
@@ -1561,7 +1559,7 @@ bool cWorld::GetSignLines(int a_BlockX, int a_BlockY, int a_BlockZ, AString & a_
bool cWorld::DoWithChunk(int a_ChunkX, int a_ChunkZ, cChunkCallback a_Callback)
{
- return m_ChunkMap->DoWithChunk(a_ChunkX, a_ChunkZ, a_Callback);
+ return m_ChunkMap.DoWithChunk(a_ChunkX, a_ChunkZ, a_Callback);
}
@@ -1570,7 +1568,7 @@ bool cWorld::DoWithChunk(int a_ChunkX, int a_ChunkZ, cChunkCallback a_Callback)
bool cWorld::DoWithChunkAt(Vector3i a_BlockPos, cChunkCallback a_Callback)
{
- return m_ChunkMap->DoWithChunkAt(a_BlockPos, a_Callback);
+ return m_ChunkMap.DoWithChunkAt(a_BlockPos, a_Callback);
}
@@ -1776,7 +1774,7 @@ bool cWorld::GrowTreeImage(const sSetBlockVector & a_Blocks)
} // for itr - b2[]
// All ok, replace blocks with the tree image:
- m_ChunkMap->ReplaceTreeBlocks(a_Blocks);
+ m_ChunkMap.ReplaceTreeBlocks(a_Blocks);
return true;
}
@@ -1786,7 +1784,7 @@ bool cWorld::GrowTreeImage(const sSetBlockVector & a_Blocks)
int cWorld::GrowPlantAt(Vector3i a_BlockPos, int a_NumStages)
{
- return m_ChunkMap->GrowPlantAt(a_BlockPos, a_NumStages);
+ return m_ChunkMap.GrowPlantAt(a_BlockPos, a_NumStages);
}
@@ -1804,7 +1802,7 @@ bool cWorld::GrowRipePlant(Vector3i a_BlockPos)
EMCSBiome cWorld::GetBiomeAt (int a_BlockX, int a_BlockZ)
{
- return m_ChunkMap->GetBiomeAt(a_BlockX, a_BlockZ);
+ return m_ChunkMap.GetBiomeAt(a_BlockX, a_BlockZ);
}
@@ -1813,7 +1811,7 @@ EMCSBiome cWorld::GetBiomeAt (int a_BlockX, int a_BlockZ)
bool cWorld::SetBiomeAt(int a_BlockX, int a_BlockZ, EMCSBiome a_Biome)
{
- return m_ChunkMap->SetBiomeAt(a_BlockX, a_BlockZ, a_Biome);
+ return m_ChunkMap.SetBiomeAt(a_BlockX, a_BlockZ, a_Biome);
}
@@ -1822,7 +1820,7 @@ bool cWorld::SetBiomeAt(int a_BlockX, int a_BlockZ, EMCSBiome a_Biome)
bool cWorld::SetAreaBiome(int a_MinX, int a_MaxX, int a_MinZ, int a_MaxZ, EMCSBiome a_Biome)
{
- return m_ChunkMap->SetAreaBiome(a_MinX, a_MaxX, a_MinZ, a_MaxZ, a_Biome);
+ return m_ChunkMap.SetAreaBiome(a_MinX, a_MaxX, a_MinZ, a_MaxZ, a_Biome);
}
@@ -1853,7 +1851,7 @@ void cWorld::SetMaxViewDistance(unsigned a_MaxViewDistance)
void cWorld::SetBlock(Vector3i a_BlockPos, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
{
- m_ChunkMap->SetBlock(a_BlockPos, a_BlockType, a_BlockMeta);
+ m_ChunkMap.SetBlock(a_BlockPos, a_BlockType, a_BlockMeta);
}
@@ -1862,7 +1860,7 @@ void cWorld::SetBlock(Vector3i a_BlockPos, BLOCKTYPE a_BlockType, NIBBLETYPE a_B
void cWorld::SetBlockMeta(Vector3i a_BlockPos, NIBBLETYPE a_MetaData)
{
- m_ChunkMap->SetBlockMeta(a_BlockPos, a_MetaData);
+ m_ChunkMap.SetBlockMeta(a_BlockPos, a_MetaData);
}
@@ -1871,7 +1869,7 @@ void cWorld::SetBlockMeta(Vector3i a_BlockPos, NIBBLETYPE a_MetaData)
NIBBLETYPE cWorld::GetBlockSkyLight(Vector3i a_BlockPos)
{
- return m_ChunkMap->GetBlockSkyLight(a_BlockPos);
+ return m_ChunkMap.GetBlockSkyLight(a_BlockPos);
}
@@ -1880,7 +1878,7 @@ NIBBLETYPE cWorld::GetBlockSkyLight(Vector3i a_BlockPos)
NIBBLETYPE cWorld::GetBlockBlockLight(Vector3i a_BlockPos)
{
- return m_ChunkMap->GetBlockBlockLight(a_BlockPos);
+ return m_ChunkMap.GetBlockBlockLight(a_BlockPos);
}
@@ -1889,7 +1887,7 @@ NIBBLETYPE cWorld::GetBlockBlockLight(Vector3i a_BlockPos)
bool cWorld::GetBlockTypeMeta(Vector3i a_BlockPos, BLOCKTYPE & a_BlockType, NIBBLETYPE & a_BlockMeta)
{
- return m_ChunkMap->GetBlockTypeMeta(a_BlockPos, a_BlockType, a_BlockMeta);
+ return m_ChunkMap.GetBlockTypeMeta(a_BlockPos, a_BlockType, a_BlockMeta);
}
@@ -1898,7 +1896,7 @@ bool cWorld::GetBlockTypeMeta(Vector3i a_BlockPos, BLOCKTYPE & a_BlockType, NIBB
bool cWorld::GetBlockInfo(Vector3i a_BlockPos, BLOCKTYPE & a_BlockType, NIBBLETYPE & a_Meta, NIBBLETYPE & a_SkyLight, NIBBLETYPE & a_BlockLight)
{
- return m_ChunkMap->GetBlockInfo(a_BlockPos, a_BlockType, a_Meta, a_SkyLight, a_BlockLight);
+ return m_ChunkMap.GetBlockInfo(a_BlockPos, a_BlockType, a_Meta, a_SkyLight, a_BlockLight);
}
@@ -1907,7 +1905,7 @@ bool cWorld::GetBlockInfo(Vector3i a_BlockPos, BLOCKTYPE & a_BlockType, NIBBLETY
bool cWorld::WriteBlockArea(cBlockArea & a_Area, int a_MinBlockX, int a_MinBlockY, int a_MinBlockZ, int a_DataTypes)
{
- return m_ChunkMap->WriteBlockArea(a_Area, a_MinBlockX, a_MinBlockY, a_MinBlockZ, a_DataTypes);
+ return m_ChunkMap.WriteBlockArea(a_Area, a_MinBlockX, a_MinBlockY, a_MinBlockZ, a_DataTypes);
}
@@ -2165,7 +2163,7 @@ void cWorld::PlaceBlock(const Vector3i a_Position, const BLOCKTYPE a_BlockType,
bool cWorld::GetBlocks(sSetBlockVector & a_Blocks, bool a_ContinueOnFailure)
{
- return m_ChunkMap->GetBlocks(a_Blocks, a_ContinueOnFailure);
+ return m_ChunkMap.GetBlocks(a_Blocks, a_ContinueOnFailure);
}
@@ -2178,7 +2176,7 @@ bool cWorld::DigBlock(Vector3i a_BlockPos, const cEntity * a_Digger)
NIBBLETYPE BlockMeta;
GetBlockTypeMeta(a_BlockPos, BlockType, BlockMeta);
- if (!m_ChunkMap->DigBlock(a_BlockPos))
+ if (!m_ChunkMap.DigBlock(a_BlockPos))
{
return false;
}
@@ -2210,7 +2208,7 @@ bool cWorld::DropBlockAsPickups(Vector3i a_BlockPos, const cEntity * a_Digger, c
cItems cWorld::PickupsFromBlock(Vector3i a_BlockPos, const cEntity * a_Digger, const cItem * a_Tool)
{
- return m_ChunkMap->PickupsFromBlock(a_BlockPos, a_Digger, a_Tool);
+ return m_ChunkMap.PickupsFromBlock(a_BlockPos, a_Digger, a_Tool);
}
@@ -2219,7 +2217,7 @@ cItems cWorld::PickupsFromBlock(Vector3i a_BlockPos, const cEntity * a_Digger, c
void cWorld::SendBlockTo(int a_X, int a_Y, int a_Z, cPlayer & a_Player)
{
- m_ChunkMap->SendBlockTo(a_X, a_Y, a_Z, a_Player);
+ m_ChunkMap.SendBlockTo(a_X, a_Y, a_Z, a_Player);
}
@@ -2228,7 +2226,7 @@ void cWorld::SendBlockTo(int a_X, int a_Y, int a_Z, cPlayer & a_Player)
int cWorld::GetHeight(int a_X, int a_Z)
{
- return m_ChunkMap->GetHeight(a_X, a_Z);
+ return m_ChunkMap.GetHeight(a_X, a_Z);
}
@@ -2237,7 +2235,7 @@ int cWorld::GetHeight(int a_X, int a_Z)
bool cWorld::TryGetHeight(int a_BlockX, int a_BlockZ, int & a_Height)
{
- return m_ChunkMap->TryGetHeight(a_BlockX, a_BlockZ, a_Height);
+ return m_ChunkMap.TryGetHeight(a_BlockX, a_BlockZ, a_Height);
}
@@ -2246,7 +2244,7 @@ bool cWorld::TryGetHeight(int a_BlockX, int a_BlockZ, int & a_Height)
void cWorld::SendBlockEntity(int a_BlockX, int a_BlockY, int a_BlockZ, cClientHandle & a_Client)
{
- m_ChunkMap->SendBlockEntity(a_BlockX, a_BlockY, a_BlockZ, a_Client);
+ m_ChunkMap.SendBlockEntity(a_BlockX, a_BlockY, a_BlockZ, a_Client);
}
@@ -2255,7 +2253,7 @@ void cWorld::SendBlockEntity(int a_BlockX, int a_BlockY, int a_BlockZ, cClientHa
void cWorld::MarkChunkDirty(int a_ChunkX, int a_ChunkZ)
{
- m_ChunkMap->MarkChunkDirty(a_ChunkX, a_ChunkZ);
+ m_ChunkMap.MarkChunkDirty(a_ChunkX, a_ChunkZ);
}
@@ -2264,7 +2262,7 @@ void cWorld::MarkChunkDirty(int a_ChunkX, int a_ChunkZ)
void cWorld::MarkChunkSaving(int a_ChunkX, int a_ChunkZ)
{
- m_ChunkMap->MarkChunkSaving(a_ChunkX, a_ChunkZ);
+ m_ChunkMap.MarkChunkSaving(a_ChunkX, a_ChunkZ);
}
@@ -2273,7 +2271,7 @@ void cWorld::MarkChunkSaving(int a_ChunkX, int a_ChunkZ)
void cWorld::MarkChunkSaved (int a_ChunkX, int a_ChunkZ)
{
- m_ChunkMap->MarkChunkSaved (a_ChunkX, a_ChunkZ);
+ m_ChunkMap.MarkChunkSaved (a_ChunkX, a_ChunkZ);
}
@@ -2311,7 +2309,7 @@ void cWorld::SetChunkData(cSetChunkData & a_SetChunkData)
ASSERT(a_SetChunkData.AreBiomesValid());
ASSERT(a_SetChunkData.IsHeightMapValid());
- m_ChunkMap->SetChunkData(a_SetChunkData);
+ m_ChunkMap.SetChunkData(a_SetChunkData);
// Initialize the entities (outside the m_ChunkMap's CS, to fix FS #347):
for (auto & Entity : a_SetChunkData.GetEntities())
@@ -2360,7 +2358,7 @@ void cWorld::ChunkLighted(
const cChunkDef::BlockNibbles & a_SkyLight
)
{
- m_ChunkMap->ChunkLighted(a_ChunkX, a_ChunkZ, a_BlockLight, a_SkyLight);
+ m_ChunkMap.ChunkLighted(a_ChunkX, a_ChunkZ, a_BlockLight, a_SkyLight);
}
@@ -2369,7 +2367,7 @@ void cWorld::ChunkLighted(
bool cWorld::GetChunkData(cChunkCoords a_Coords, cChunkDataCallback & a_Callback) const
{
- return m_ChunkMap->GetChunkData(a_Coords, a_Callback);
+ return m_ChunkMap.GetChunkData(a_Coords, a_Callback);
}
@@ -2378,7 +2376,7 @@ bool cWorld::GetChunkData(cChunkCoords a_Coords, cChunkDataCallback & a_Callback
bool cWorld::GetChunkBlockTypes(int a_ChunkX, int a_ChunkZ, BLOCKTYPE * a_BlockTypes)
{
- return m_ChunkMap->GetChunkBlockTypes(a_ChunkX, a_ChunkZ, a_BlockTypes);
+ return m_ChunkMap.GetChunkBlockTypes(a_ChunkX, a_ChunkZ, a_BlockTypes);
}
@@ -2387,7 +2385,7 @@ bool cWorld::GetChunkBlockTypes(int a_ChunkX, int a_ChunkZ, BLOCKTYPE * a_BlockT
bool cWorld::IsChunkQueued(int a_ChunkX, int a_ChunkZ) const
{
- return m_ChunkMap->IsChunkQueued(a_ChunkX, a_ChunkZ);
+ return m_ChunkMap.IsChunkQueued(a_ChunkX, a_ChunkZ);
}
@@ -2396,7 +2394,7 @@ bool cWorld::IsChunkQueued(int a_ChunkX, int a_ChunkZ) const
bool cWorld::IsChunkValid(int a_ChunkX, int a_ChunkZ) const
{
- return m_ChunkMap->IsChunkValid(a_ChunkX, a_ChunkZ);
+ return m_ChunkMap.IsChunkValid(a_ChunkX, a_ChunkZ);
}
@@ -2405,7 +2403,7 @@ bool cWorld::IsChunkValid(int a_ChunkX, int a_ChunkZ) const
bool cWorld::HasChunkAnyClients(int a_ChunkX, int a_ChunkZ) const
{
- return m_ChunkMap->HasChunkAnyClients(a_ChunkX, a_ChunkZ);
+ return m_ChunkMap.HasChunkAnyClients(a_ChunkX, a_ChunkZ);
}
@@ -2415,7 +2413,7 @@ bool cWorld::HasChunkAnyClients(int a_ChunkX, int a_ChunkZ) const
void cWorld::UnloadUnusedChunks(void)
{
m_LastChunkCheck = std::chrono::duration_cast<cTickTimeLong>(m_WorldAge);
- m_ChunkMap->UnloadUnusedChunks();
+ m_ChunkMap.UnloadUnusedChunks();
}
@@ -2433,7 +2431,7 @@ void cWorld::QueueUnloadUnusedChunks(void)
void cWorld::CollectPickupsByPlayer(cPlayer & a_Player)
{
- m_ChunkMap->CollectPickupsByPlayer(a_Player);
+ m_ChunkMap.CollectPickupsByPlayer(a_Player);
}
@@ -2453,7 +2451,7 @@ void cWorld::AddPlayer(std::unique_ptr<cPlayer> a_Player, cWorld * a_OldWorld)
std::unique_ptr<cPlayer> cWorld::RemovePlayer(cPlayer & a_Player)
{
// Check the chunkmap
- std::unique_ptr<cPlayer> PlayerPtr(static_cast<cPlayer *>(m_ChunkMap->RemoveEntity(a_Player).release()));
+ std::unique_ptr<cPlayer> PlayerPtr(static_cast<cPlayer *>(m_ChunkMap.RemoveEntity(a_Player).release()));
if (PlayerPtr != nullptr)
{
@@ -2489,7 +2487,7 @@ std::unique_ptr<cPlayer> cWorld::RemovePlayer(cPlayer & a_Player)
if (Client != nullptr)
{
Client->RemoveFromWorld();
- m_ChunkMap->RemoveClientFromChunks(Client);
+ m_ChunkMap.RemoveClientFromChunks(Client);
cCSLock Lock(m_CSClients);
m_ClientsToRemove.push_back(Client);
}
@@ -2721,7 +2719,7 @@ void cWorld::SendPlayerList(cPlayer * a_DestPlayer)
bool cWorld::ForEachEntity(cEntityCallback a_Callback)
{
- return m_ChunkMap->ForEachEntity(a_Callback);
+ return m_ChunkMap.ForEachEntity(a_Callback);
}
@@ -2730,7 +2728,7 @@ bool cWorld::ForEachEntity(cEntityCallback a_Callback)
bool cWorld::ForEachEntityInChunk(int a_ChunkX, int a_ChunkZ, cEntityCallback a_Callback)
{
- return m_ChunkMap->ForEachEntityInChunk(a_ChunkX, a_ChunkZ, a_Callback);
+ return m_ChunkMap.ForEachEntityInChunk(a_ChunkX, a_ChunkZ, a_Callback);
}
@@ -2739,7 +2737,7 @@ bool cWorld::ForEachEntityInChunk(int a_ChunkX, int a_ChunkZ, cEntityCallback a_
bool cWorld::ForEachEntityInBox(const cBoundingBox & a_Box, cEntityCallback a_Callback)
{
- return m_ChunkMap->ForEachEntityInBox(a_Box, a_Callback);
+ return m_ChunkMap.ForEachEntityInBox(a_Box, a_Callback);
}
@@ -2762,7 +2760,7 @@ bool cWorld::DoWithEntityByID(UInt32 a_UniqueID, cEntityCallback a_Callback)
}
// Then check the chunkmap:
- return m_ChunkMap->DoWithEntityByID(a_UniqueID, a_Callback);
+ return m_ChunkMap.DoWithEntityByID(a_UniqueID, a_Callback);
}
@@ -2771,7 +2769,7 @@ bool cWorld::DoWithEntityByID(UInt32 a_UniqueID, cEntityCallback a_Callback)
void cWorld::CompareChunkClients(int a_ChunkX1, int a_ChunkZ1, int a_ChunkX2, int a_ChunkZ2, cClientDiffCallback & a_Callback)
{
- m_ChunkMap->CompareChunkClients(a_ChunkX1, a_ChunkZ1, a_ChunkX2, a_ChunkZ2, a_Callback);
+ m_ChunkMap.CompareChunkClients(a_ChunkX1, a_ChunkZ1, a_ChunkX2, a_ChunkZ2, a_Callback);
}
@@ -2780,7 +2778,7 @@ void cWorld::CompareChunkClients(int a_ChunkX1, int a_ChunkZ1, int a_ChunkX2, in
bool cWorld::AddChunkClient(int a_ChunkX, int a_ChunkZ, cClientHandle * a_Client)
{
- return m_ChunkMap->AddChunkClient(a_ChunkX, a_ChunkZ, a_Client);
+ return m_ChunkMap.AddChunkClient(a_ChunkX, a_ChunkZ, a_Client);
}
@@ -2789,7 +2787,7 @@ bool cWorld::AddChunkClient(int a_ChunkX, int a_ChunkZ, cClientHandle * a_Client
void cWorld::RemoveChunkClient(int a_ChunkX, int a_ChunkZ, cClientHandle * a_Client)
{
- m_ChunkMap->RemoveChunkClient(a_ChunkX, a_ChunkZ, a_Client);
+ m_ChunkMap.RemoveChunkClient(a_ChunkX, a_ChunkZ, a_Client);
}
@@ -2798,7 +2796,7 @@ void cWorld::RemoveChunkClient(int a_ChunkX, int a_ChunkZ, cClientHandle * a_Cli
void cWorld::RemoveClientFromChunks(cClientHandle * a_Client)
{
- m_ChunkMap->RemoveClientFromChunks(a_Client);
+ m_ChunkMap.RemoveClientFromChunks(a_Client);
}
@@ -2835,7 +2833,7 @@ void cWorld::RemoveClientFromChunkSender(cClientHandle * a_Client)
void cWorld::PrepareChunk(int a_ChunkX, int a_ChunkZ, std::unique_ptr<cChunkCoordCallback> a_CallAfter)
{
- m_ChunkMap->PrepareChunk(a_ChunkX, a_ChunkZ, std::move(a_CallAfter));
+ m_ChunkMap.PrepareChunk(a_ChunkX, a_ChunkZ, std::move(a_CallAfter));
}
@@ -2844,7 +2842,7 @@ void cWorld::PrepareChunk(int a_ChunkX, int a_ChunkZ, std::unique_ptr<cChunkCoor
void cWorld::ChunkLoadFailed(int a_ChunkX, int a_ChunkZ)
{
- m_ChunkMap->ChunkLoadFailed(a_ChunkX, a_ChunkZ);
+ m_ChunkMap.ChunkLoadFailed(a_ChunkX, a_ChunkZ);
}
@@ -2863,7 +2861,7 @@ bool cWorld::SetSignLines(int a_BlockX, int a_BlockY, int a_BlockZ, const AStrin
return false;
}
- if (m_ChunkMap->SetSignLines(a_BlockX, a_BlockY, a_BlockZ, Line1, Line2, Line3, Line4))
+ if (m_ChunkMap.SetSignLines(a_BlockX, a_BlockY, a_BlockZ, Line1, Line2, Line3, Line4))
{
cRoot::Get()->GetPluginManager()->CallHookUpdatedSign(*this, a_BlockX, a_BlockY, a_BlockZ, Line1, Line2, Line3, Line4, a_Player);
return true;
@@ -2933,7 +2931,7 @@ bool cWorld::SetTrapdoorOpen(int a_BlockX, int a_BlockY, int a_BlockZ, bool a_Op
void cWorld::RegenerateChunk(int a_ChunkX, int a_ChunkZ)
{
- m_ChunkMap->MarkChunkRegenerating(a_ChunkX, a_ChunkZ);
+ m_ChunkMap.MarkChunkRegenerating(a_ChunkX, a_ChunkZ);
m_Generator.QueueGenerateChunk({a_ChunkX, a_ChunkZ}, true);
}
@@ -2943,7 +2941,7 @@ void cWorld::RegenerateChunk(int a_ChunkX, int a_ChunkZ)
void cWorld::GenerateChunk(int a_ChunkX, int a_ChunkZ)
{
- m_ChunkMap->GenerateChunk(a_ChunkX, a_ChunkZ);
+ m_ChunkMap.GenerateChunk(a_ChunkX, a_ChunkZ);
}
@@ -2961,7 +2959,7 @@ void cWorld::QueueLightChunk(int a_ChunkX, int a_ChunkZ, std::unique_ptr<cChunkC
bool cWorld::IsChunkLighted(int a_ChunkX, int a_ChunkZ)
{
- return m_ChunkMap->IsChunkLighted(a_ChunkX, a_ChunkZ);
+ return m_ChunkMap.IsChunkLighted(a_ChunkX, a_ChunkZ);
}
@@ -2970,7 +2968,7 @@ bool cWorld::IsChunkLighted(int a_ChunkX, int a_ChunkZ)
bool cWorld::ForEachChunkInRect(int a_MinChunkX, int a_MaxChunkX, int a_MinChunkZ, int a_MaxChunkZ, cChunkDataCallback & a_Callback)
{
- return m_ChunkMap->ForEachChunkInRect(a_MinChunkX, a_MaxChunkX, a_MinChunkZ, a_MaxChunkZ, a_Callback);
+ return m_ChunkMap.ForEachChunkInRect(a_MinChunkX, a_MaxChunkX, a_MinChunkZ, a_MaxChunkZ, a_Callback);
}
@@ -2979,7 +2977,7 @@ bool cWorld::ForEachChunkInRect(int a_MinChunkX, int a_MaxChunkX, int a_MinChunk
bool cWorld::ForEachLoadedChunk(cFunctionRef<bool(int, int)> a_Callback)
{
- return m_ChunkMap->ForEachLoadedChunk(a_Callback);
+ return m_ChunkMap.ForEachLoadedChunk(a_Callback);
}
@@ -2991,7 +2989,7 @@ void cWorld::SaveAllChunks(void)
if (IsSavingEnabled())
{
m_LastSave = std::chrono::duration_cast<cTickTimeLong>(m_WorldAge);
- m_ChunkMap->SaveAllChunks();
+ m_ChunkMap.SaveAllChunks();
}
}
@@ -3043,37 +3041,10 @@ void cWorld::AddEntity(OwnedEntity a_Entity)
-bool cWorld::HasEntity(UInt32 a_UniqueID)
-{
- // Check if the entity is in the queue to be added to the world:
- {
- cCSLock Lock(m_CSEntitiesToAdd);
- for (cEntityList::const_iterator itr = m_EntitiesToAdd.begin(), end = m_EntitiesToAdd.end(); itr != end; ++itr)
- {
- if ((*itr)->GetUniqueID() == a_UniqueID)
- {
- return true;
- }
- } // for itr - m_EntitiesToAdd[]
- }
-
- // Check if the entity is in the chunkmap:
- if (m_ChunkMap.get() == nullptr)
- {
- // Chunkmap has already been destroyed, there are no entities anymore.
- return false;
- }
- return m_ChunkMap->HasEntity(a_UniqueID);
-}
-
-
-
-
-
OwnedEntity cWorld::RemoveEntity(cEntity & a_Entity)
{
// Check if the entity is in the chunkmap:
- auto Entity = m_ChunkMap->RemoveEntity(a_Entity);
+ auto Entity = m_ChunkMap.RemoveEntity(a_Entity);
if (Entity != nullptr)
{
Entity->OnRemoveFromWorld(*this);
@@ -3103,7 +3074,7 @@ OwnedEntity cWorld::RemoveEntity(cEntity & a_Entity)
size_t cWorld::GetNumChunks(void) const
{
- return m_ChunkMap->GetNumChunks();
+ return m_ChunkMap.GetNumChunks();
}
@@ -3112,7 +3083,7 @@ size_t cWorld::GetNumChunks(void) const
size_t cWorld::GetNumUnusedDirtyChunks(void) const
{
- return m_ChunkMap->GetNumUnusedDirtyChunks();
+ return m_ChunkMap.GetNumUnusedDirtyChunks();
}
@@ -3121,7 +3092,7 @@ size_t cWorld::GetNumUnusedDirtyChunks(void) const
void cWorld::GetChunkStats(int & a_NumValid, int & a_NumDirty, int & a_NumInLightingQueue)
{
- m_ChunkMap->GetChunkStats(a_NumValid, a_NumDirty);
+ m_ChunkMap.GetChunkStats(a_NumValid, a_NumDirty);
a_NumInLightingQueue = static_cast<int>(m_Lighting.GetQueueLength());
}
@@ -3145,7 +3116,7 @@ void cWorld::TickQueuedBlocks(void)
if (Block->TicksToWait <= 0)
{
// TODO: Handle the case when the chunk is already unloaded
- m_ChunkMap->TickBlock({Block->X, Block->Y, Block->Z});
+ m_ChunkMap.TickBlock({Block->X, Block->Y, Block->Z});
delete Block; // We don't have to remove it from the vector, this will happen automatically on the next tick
}
else
@@ -3334,7 +3305,7 @@ void cWorld::TabCompleteUserName(const AString & a_Text, AStringVector & a_Resul
void cWorld::SetChunkAlwaysTicked(int a_ChunkX, int a_ChunkZ, bool a_AlwaysTicked)
{
- m_ChunkMap->SetChunkAlwaysTicked(a_ChunkX, a_ChunkZ, a_AlwaysTicked);
+ m_ChunkMap.SetChunkAlwaysTicked(a_ChunkX, a_ChunkZ, a_AlwaysTicked);
}
@@ -3475,7 +3446,7 @@ void cWorld::AddQueuedPlayers(void)
// Add to chunkmap, if not already there (Spawn vs MoveToWorld):
auto PlayerPtr = Player.get();
- m_ChunkMap->AddPlayer(std::move(Player));
+ m_ChunkMap.AddPlayer(std::move(Player));
PlayerPtr->OnAddToWorld(*this);
ASSERT(!PlayerPtr->IsTicking());
PlayerPtr->SetIsTicking(true);
diff --git a/src/World.h b/src/World.h
index fb2bdfacc..b2d996870 100644
--- a/src/World.h
+++ b/src/World.h
@@ -307,10 +307,6 @@ public:
The entity is added lazily - this function only puts it in a queue that is then processed by the Tick thread. */
void AddEntity(OwnedEntity a_Entity);
- /** Returns true if an entity with the specified UniqueID exists in the world.
- Note: Only loaded chunks are considered. */
- bool HasEntity(UInt32 a_UniqueID);
-
/** Removes the entity from the world.
Returns an owning reference to the found entity. */
OwnedEntity RemoveEntity(cEntity & a_Entity);
@@ -410,7 +406,7 @@ public:
The replaced blocks aren't checked for block entities (block entity is leaked if it exists at this block) */
void FastSetBlock(Vector3i a_BlockPos, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
{
- m_ChunkMap->FastSetBlock(a_BlockPos, a_BlockType, a_BlockMeta);
+ m_ChunkMap.FastSetBlock(a_BlockPos, a_BlockType, a_BlockMeta);
}
/** OBSOLETE, use the Vector3-based overload instead.
@@ -424,32 +420,32 @@ public:
/** Returns the block type at the specified position.
Returns 0 if the chunk is not valid. */
- BLOCKTYPE GetBlock(Vector3i a_BlockPos)
+ BLOCKTYPE GetBlock(Vector3i a_BlockPos) const
{
- return m_ChunkMap->GetBlock(a_BlockPos);
+ return m_ChunkMap.GetBlock(a_BlockPos);
}
/** OBSOLETE, use the Vector3-based overload instead.
Returns the block type at the specified position.
Returns 0 if the chunk is not valid. */
- BLOCKTYPE GetBlock(int a_BlockX, int a_BlockY, int a_BlockZ)
+ BLOCKTYPE GetBlock(int a_BlockX, int a_BlockY, int a_BlockZ) const
{
- return m_ChunkMap->GetBlock({a_BlockX, a_BlockY, a_BlockZ});
+ return m_ChunkMap.GetBlock({a_BlockX, a_BlockY, a_BlockZ});
}
/** Returns the block meta at the specified position.
Returns 0 if the chunk is not valid. */
- NIBBLETYPE GetBlockMeta(Vector3i a_BlockPos)
+ NIBBLETYPE GetBlockMeta(Vector3i a_BlockPos) const
{
- return m_ChunkMap->GetBlockMeta(a_BlockPos);
+ return m_ChunkMap.GetBlockMeta(a_BlockPos);
}
/** OBSOLETE, use the Vector3-based overload instead.
Returns the block meta at the specified position.
Returns 0 if the chunk is not valid. */
- NIBBLETYPE GetBlockMeta(int a_BlockX, int a_BlockY, int a_BlockZ)
+ NIBBLETYPE GetBlockMeta(int a_BlockX, int a_BlockY, int a_BlockZ) const
{
- return m_ChunkMap->GetBlockMeta({a_BlockX, a_BlockY, a_BlockZ});
+ return m_ChunkMap.GetBlockMeta({a_BlockX, a_BlockY, a_BlockZ});
}
/** Sets the meta for the specified block, while keeping the blocktype.
@@ -808,7 +804,7 @@ public:
bool GetSignLines (int a_BlockX, int a_BlockY, int a_BlockZ, AString & a_Line1, AString & a_Line2, AString & a_Line3, AString & a_Line4); // Exported in ManualBindings.cpp
/** a_Player is using block entity at [x, y, z], handle that: */
- void UseBlockEntity(cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ) {m_ChunkMap->UseBlockEntity(a_Player, a_BlockX, a_BlockY, a_BlockZ); } // tolua_export
+ void UseBlockEntity(cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ) { m_ChunkMap.UseBlockEntity(a_Player, a_BlockX, a_BlockY, a_BlockZ); } // tolua_export
/** Calls the callback for the chunk specified, with ChunkMapCS locked.
Returns false if the chunk doesn't exist, otherwise returns the same value as the callback */
@@ -1048,7 +1044,7 @@ public:
cChunkGeneratorThread & GetGenerator(void) { return m_Generator; }
cWorldStorage & GetStorage (void) { return m_Storage; }
- cChunkMap * GetChunkMap (void) { return m_ChunkMap.get(); }
+ cChunkMap * GetChunkMap (void) { return &m_ChunkMap; }
/** Causes the specified block to be ticked on the next Tick() call.
Only one block coord per chunk may be set, a second call overwrites the first call */
@@ -1211,7 +1207,7 @@ private:
unsigned int m_MaxPlayers;
- std::unique_ptr<cChunkMap> m_ChunkMap;
+ cChunkMap m_ChunkMap;
bool m_bAnimals;
std::set<eMonsterType> m_AllowedMobs;