summaryrefslogtreecommitdiffstats
path: root/src/Bindings
diff options
context:
space:
mode:
authortycho <work.tycho@gmail.com>2015-09-24 16:43:31 +0200
committertycho <work.tycho@gmail.com>2015-09-24 16:54:32 +0200
commit6e86d20f730aa46e0fa6b13b26a3b2586d21e513 (patch)
treef9067a30d91f764c92a5b77c2bca2cf00dd53162 /src/Bindings
parentMerge pull request #2488 from cuberite/ChatFlag (diff)
downloadcuberite-6e86d20f730aa46e0fa6b13b26a3b2586d21e513.tar
cuberite-6e86d20f730aa46e0fa6b13b26a3b2586d21e513.tar.gz
cuberite-6e86d20f730aa46e0fa6b13b26a3b2586d21e513.tar.bz2
cuberite-6e86d20f730aa46e0fa6b13b26a3b2586d21e513.tar.lz
cuberite-6e86d20f730aa46e0fa6b13b26a3b2586d21e513.tar.xz
cuberite-6e86d20f730aa46e0fa6b13b26a3b2586d21e513.tar.zst
cuberite-6e86d20f730aa46e0fa6b13b26a3b2586d21e513.zip
Diffstat (limited to 'src/Bindings')
-rw-r--r--src/Bindings/ManualBindings_World.cpp54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/Bindings/ManualBindings_World.cpp b/src/Bindings/ManualBindings_World.cpp
index e2902b81a..e007a9689 100644
--- a/src/Bindings/ManualBindings_World.cpp
+++ b/src/Bindings/ManualBindings_World.cpp
@@ -110,6 +110,59 @@ static int tolua_cWorld_ChunkStay(lua_State * tolua_S)
+static int tolua_cWorld_ForEachLoadedChunk(lua_State * tolua_S)
+{
+ // Exported manually, because tolua doesn't support converting functions to functor types.
+ // Function signature: ForEachLoadedChunk(callback) -> bool
+
+ cLuaState L(tolua_S);
+ if (
+ !L.CheckParamUserType(1, "cWorld") ||
+ !L.CheckParamFunction(2)
+ )
+ {
+ return 0;
+ }
+
+ cPluginLua * Plugin = cManualBindings::GetLuaPlugin(tolua_S);
+ if (Plugin == nullptr)
+ {
+ return 0;
+ }
+
+ // Read the params:
+ cWorld * World = (cWorld *)tolua_tousertype(tolua_S, 1, nullptr);
+ if (World == nullptr)
+ {
+ LOGWARNING("World:ForEachLoadedChunk(): invalid world parameter");
+ L.LogStackTrace();
+ return 0;
+ }
+ cLuaState::cRef FnRef;
+ L.GetStackValues(2, FnRef);
+ if (!FnRef.IsValid())
+ {
+ return cManualBindings::lua_do_error(tolua_S, "Error in function call '#funcname#': Could not get function reference of parameter #2");
+ }
+
+ // Call the enumeration:
+ bool ret = World->ForEachLoadedChunk(
+ [&L, &FnRef](int a_ChunkX, int a_ChunkZ) -> bool
+ {
+ bool res = false; // By default continue the enumeration
+ L.Call(FnRef, a_ChunkX, a_ChunkZ, cLuaState::Return, res);
+ return res;
+ }
+ );
+
+ // Push the return value:
+ L.Push(ret);
+ return 1;
+}
+
+
+
+
static int tolua_cWorld_GetBlockInfo(lua_State * tolua_S)
{
@@ -580,6 +633,7 @@ void cManualBindings::BindWorld(lua_State * tolua_S)
tolua_function(tolua_S, "ForEachEntityInChunk", ForEachInChunk<cWorld, cEntity, &cWorld::ForEachEntityInChunk>);
tolua_function(tolua_S, "ForEachFurnaceInChunk", ForEachInChunk<cWorld, cFurnaceEntity, &cWorld::ForEachFurnaceInChunk>);
tolua_function(tolua_S, "ForEachPlayer", ForEach< cWorld, cPlayer, &cWorld::ForEachPlayer>);
+ tolua_function(tolua_S, "ForEachLoadedChunk", tolua_cWorld_ForEachLoadedChunk);
tolua_function(tolua_S, "GetBlockInfo", tolua_cWorld_GetBlockInfo);
tolua_function(tolua_S, "GetBlockTypeMeta", tolua_cWorld_GetBlockTypeMeta);
tolua_function(tolua_S, "GetSignLines", tolua_cWorld_GetSignLines);