summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormadmaxoft <github@xoft.cz>2013-08-03 20:26:50 +0200
committermadmaxoft <github@xoft.cz>2013-08-03 20:26:50 +0200
commit4f26f11dc77ab032feec8c746fc6ddaa1ea44057 (patch)
tree19a62e06c11061af47273e8c9d159f38f5f2cc58
parentRemoved the unused BlockY parameter from cChunkDef::BlockToChunk() (diff)
downloadcuberite-4f26f11dc77ab032feec8c746fc6ddaa1ea44057.tar
cuberite-4f26f11dc77ab032feec8c746fc6ddaa1ea44057.tar.gz
cuberite-4f26f11dc77ab032feec8c746fc6ddaa1ea44057.tar.bz2
cuberite-4f26f11dc77ab032feec8c746fc6ddaa1ea44057.tar.lz
cuberite-4f26f11dc77ab032feec8c746fc6ddaa1ea44057.tar.xz
cuberite-4f26f11dc77ab032feec8c746fc6ddaa1ea44057.tar.zst
cuberite-4f26f11dc77ab032feec8c746fc6ddaa1ea44057.zip
-rw-r--r--source/ChunkMap.cpp15
-rw-r--r--source/ChunkMap.h4
-rw-r--r--source/World.cpp9
-rw-r--r--source/World.h3
4 files changed, 31 insertions, 0 deletions
diff --git a/source/ChunkMap.cpp b/source/ChunkMap.cpp
index 9a9e0dcf6..0d49ce9c4 100644
--- a/source/ChunkMap.cpp
+++ b/source/ChunkMap.cpp
@@ -713,6 +713,21 @@ void cChunkMap::UseBlockEntity(cPlayer * a_Player, int a_BlockX, int a_BlockY, i
+bool cChunkMap::DoWithChunk(int a_ChunkX, int a_ChunkZ, cChunkCallback & a_Callback)
+{
+ cCSLock Lock(m_CSLayers);
+ cChunkPtr Chunk = GetChunkNoLoad(a_ChunkX, ZERO_CHUNK_Y, a_ChunkZ);
+ if (Chunk == NULL)
+ {
+ return false;
+ }
+ return a_Callback.Item(Chunk);
+}
+
+
+
+
+
void cChunkMap::WakeUpSimulators(int a_BlockX, int a_BlockY, int a_BlockZ)
{
cCSLock Lock(m_CSLayers);
diff --git a/source/ChunkMap.h b/source/ChunkMap.h
index 899f290c5..183031808 100644
--- a/source/ChunkMap.h
+++ b/source/ChunkMap.h
@@ -35,6 +35,7 @@ typedef cItemCallback<cDispenserEntity> cDispenserCallback;
typedef cItemCallback<cDropperEntity> cDropperCallback;
typedef cItemCallback<cDropSpenserEntity> cDropSpenserCallback;
typedef cItemCallback<cFurnaceEntity> cFurnaceCallback;
+typedef cItemCallback<cChunk> cChunkCallback;
@@ -79,6 +80,9 @@ public:
/// a_Player rclked block entity at the coords specified, handle it
void UseBlockEntity(cPlayer * a_Player, int a_X, int a_Y, int a_Z);
+ /// 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
+ bool DoWithChunk(int a_ChunkX, int a_ChunkZ, cChunkCallback & a_Callback);
+
/// Wakes up simulators for the specified block
void WakeUpSimulators(int a_BlockX, int a_BlockY, int a_BlockZ);
diff --git a/source/World.cpp b/source/World.cpp
index 880f6e5b2..03e086148 100644
--- a/source/World.cpp
+++ b/source/World.cpp
@@ -832,6 +832,15 @@ 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);
+}
+
+
+
+
+
void cWorld::GrowTree(int a_X, int a_Y, int a_Z)
{
if (GetBlock(a_X, a_Y, a_Z) == E_BLOCK_SAPLING)
diff --git a/source/World.h b/source/World.h
index 9de00ceec..52d634769 100644
--- a/source/World.h
+++ b/source/World.h
@@ -404,6 +404,9 @@ public:
/// 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); }
+
+ /// 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
+ bool DoWithChunk(int a_ChunkX, int a_ChunkZ, cChunkCallback & a_Callback);
void GrowTree (int a_BlockX, int a_BlockY, int a_BlockZ); // tolua_export
void GrowTreeFromSapling(int a_BlockX, int a_BlockY, int a_BlockZ, char a_SaplingMeta); // tolua_export