summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormadmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6>2013-05-25 13:57:28 +0200
committermadmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6>2013-05-25 13:57:28 +0200
commite3136c2d0f16557370e25a077891df5cca2e020f (patch)
tree747265d0f21da61ca4c5b2f8269639d87f87fa07
parentAdded sound to the vaporize simulator. FS #315 (diff)
downloadcuberite-e3136c2d0f16557370e25a077891df5cca2e020f.tar
cuberite-e3136c2d0f16557370e25a077891df5cca2e020f.tar.gz
cuberite-e3136c2d0f16557370e25a077891df5cca2e020f.tar.bz2
cuberite-e3136c2d0f16557370e25a077891df5cca2e020f.tar.lz
cuberite-e3136c2d0f16557370e25a077891df5cca2e020f.tar.xz
cuberite-e3136c2d0f16557370e25a077891df5cca2e020f.tar.zst
cuberite-e3136c2d0f16557370e25a077891df5cca2e020f.zip
-rw-r--r--source/Chunk.h4
-rw-r--r--source/ChunkMap.h4
-rw-r--r--source/ManualBindings.cpp26
-rw-r--r--source/World.h4
4 files changed, 27 insertions, 11 deletions
diff --git a/source/Chunk.h b/source/Chunk.h
index 09536f099..67a834b26 100644
--- a/source/Chunk.h
+++ b/source/Chunk.h
@@ -197,10 +197,10 @@ public:
/// Calls the callback for the chest at the specified coords; returns false if there's no chest at those coords, true if found
bool DoWithChestAt(int a_BlockX, int a_BlockY, int a_BlockZ, cChestCallback & a_Callback); // Lua-acessible
- /// Calls the callback for the dispenser at the specified coords; returns false if there's no dispenser at those coords, true if found
+ /// Calls the callback for the dispenser at the specified coords; returns false if there's no dispenser at those coords or callback returns true, returns true if found
bool DoWithDispenserAt(int a_BlockX, int a_BlockY, int a_BlockZ, cDispenserCallback & a_Callback);
- /// Calls the callback for the furnace at the specified coords; returns false if there's no furnace at those coords, true if found
+ /// Calls the callback for the furnace at the specified coords; returns false if there's no furnace at those coords or callback returns true, returns true if found
bool DoWithFurnaceAt(int a_BlockX, int a_BlockY, int a_BlockZ, cFurnaceCallback & a_Callback); // Lua-accessible
/// Retrieves the test on the sign at the specified coords; returns false if there's no sign at those coords, true if found
diff --git a/source/ChunkMap.h b/source/ChunkMap.h
index a2fb5abff..0dc18636b 100644
--- a/source/ChunkMap.h
+++ b/source/ChunkMap.h
@@ -216,10 +216,10 @@ public:
/// Calls the callback for the chest at the specified coords; returns false if there's no chest at those coords, true if found
bool DoWithChestAt (int a_BlockX, int a_BlockY, int a_BlockZ, cChestCallback & a_Callback); // Lua-acessible
- /// Calls the callback for the dispenser at the specified coords; returns false if there's no dispenser at those coords, true if found
+ /// Calls the callback for the dispenser at the specified coords; returns false if there's no dispenser at those coords or callback returns true, returns true if found
bool DoWithDispenserAt(int a_BlockX, int a_BlockY, int a_BlockZ, cDispenserCallback & a_Callback);
- /// Calls the callback for the furnace at the specified coords; returns false if there's no furnace at those coords, true if found
+ /// Calls the callback for the furnace at the specified coords; returns false if there's no furnace at those coords or callback returns true, returns true if found
bool DoWithFurnaceAt(int a_BlockX, int a_BlockY, int a_BlockZ, cFurnaceCallback & a_Callback); // Lua-accessible
/// Retrieves the test on the sign at the specified coords; returns false if there's no sign at those coords, true if found
diff --git a/source/ManualBindings.cpp b/source/ManualBindings.cpp
index 659edf23f..db1d65f53 100644
--- a/source/ManualBindings.cpp
+++ b/source/ManualBindings.cpp
@@ -14,6 +14,7 @@
#include "StringMap.h"
#include "ClientHandle.h"
#include "ChestEntity.h"
+#include "DispenserEntity.h"
#include "FurnaceEntity.h"
#include "md5/md5.h"
@@ -211,8 +212,15 @@ static int tolua_DoWith(lua_State* tolua_S)
}
int s = lua_pcall(LuaState, (TableRef == LUA_REFNIL ? 1 : 2), 1, 0);
- report_errors(LuaState, s);
- return true;
+ if (report_errors(LuaState, s))
+ {
+ return true; // Abort enumeration
+ }
+ if (lua_isboolean(LuaState, -1))
+ {
+ return (tolua_toboolean(LuaState, -1, 0) > 0);
+ }
+ return false; /* Continue enumeration */
}
lua_State * LuaState;
int FuncRef;
@@ -299,8 +307,15 @@ static int tolua_DoWithXYZ(lua_State* tolua_S)
}
int s = lua_pcall(LuaState, (TableRef == LUA_REFNIL ? 1 : 2), 1, 0);
- report_errors(LuaState, s);
- return true;
+ if (report_errors(LuaState, s))
+ {
+ return true; // Abort enumeration
+ }
+ if (lua_isboolean(LuaState, -1))
+ {
+ return (tolua_toboolean(LuaState, -1, 0) > 0);
+ }
+ return false; /* Continue enumeration */
}
lua_State * LuaState;
int FuncRef;
@@ -392,7 +407,7 @@ static int tolua_ForEachInChunk(lua_State* tolua_S)
if (lua_isboolean(LuaState, -1))
{
- return (tolua_toboolean( LuaState, -1, 0) > 0);
+ return (tolua_toboolean(LuaState, -1, 0) > 0);
}
return false; /* Continue enumeration */
}
@@ -1160,6 +1175,7 @@ void ManualBindings::Bind( lua_State* tolua_S )
tolua_function(tolua_S, "DoWithPlayer", tolua_DoWith<cWorld, cPlayer, &cWorld::DoWithPlayer>);
tolua_function(tolua_S, "FindAndDoWithPlayer", tolua_DoWith<cWorld, cPlayer, &cWorld::FindAndDoWithPlayer>);
tolua_function(tolua_S, "DoWithChestAt", tolua_DoWithXYZ<cWorld, cChestEntity, &cWorld::DoWithChestAt>);
+ tolua_function(tolua_S, "DoWithDispenserAt", tolua_DoWithXYZ<cWorld, cDispenserEntity, &cWorld::DoWithDispenserAt>);
tolua_endmodule(tolua_S);
tolua_beginmodule(tolua_S, "cPlugin");
diff --git a/source/World.h b/source/World.h
index 4f55be48a..a79da3923 100644
--- a/source/World.h
+++ b/source/World.h
@@ -348,10 +348,10 @@ public:
/// Calls the callback for the chest at the specified coords; returns false if there's no chest at those coords, true if found
bool DoWithChestAt (int a_BlockX, int a_BlockY, int a_BlockZ, cChestCallback & a_Callback); // Exported in ManualBindings.cpp
- /// Calls the callback for the dispenser at the specified coords; returns false if there's no dispenser at those coords, true if found
+ /// Calls the callback for the dispenser at the specified coords; returns false if there's no dispenser at those coords or callback returns true, returns true if found
bool DoWithDispenserAt(int a_BlockX, int a_BlockY, int a_BlockZ, cDispenserCallback & a_Callback);
- /// Calls the callback for the furnace at the specified coords; returns false if there's no furnace at those coords, true if found
+ /// Calls the callback for the furnace at the specified coords; returns false if there's no furnace at those coords or callback returns true, returns true if found
bool DoWithFurnaceAt(int a_BlockX, int a_BlockY, int a_BlockZ, cFurnaceCallback & a_Callback); // Exported in ManualBindings.cpp
/// Retrieves the test on the sign at the specified coords; returns false if there's no sign at those coords, true if found