summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMattes D <github@xoft.cz>2015-06-18 23:30:41 +0200
committerMattes D <github@xoft.cz>2015-06-19 16:15:59 +0200
commit8df31067d4703beb3225b7d9787385d58f893c5d (patch)
treeab6863dece3d5741b8ea1989700f29188a4f8098
parentPrefabPiecePool: Added loading from cubeset file. (diff)
downloadcuberite-8df31067d4703beb3225b7d9787385d58f893c5d.tar
cuberite-8df31067d4703beb3225b7d9787385d58f893c5d.tar.gz
cuberite-8df31067d4703beb3225b7d9787385d58f893c5d.tar.bz2
cuberite-8df31067d4703beb3225b7d9787385d58f893c5d.tar.lz
cuberite-8df31067d4703beb3225b7d9787385d58f893c5d.tar.xz
cuberite-8df31067d4703beb3225b7d9787385d58f893c5d.tar.zst
cuberite-8df31067d4703beb3225b7d9787385d58f893c5d.zip
-rw-r--r--CMakeLists.txt50
-rw-r--r--src/Bindings/BindingsProcessor.lua4
-rw-r--r--src/Bindings/LuaState.h7
-rw-r--r--src/Blocks/BlockHandler.cpp1
-rw-r--r--src/Generating/CMakeLists.txt2
-rw-r--r--src/Generating/PrefabPiecePool.cpp29
-rw-r--r--src/Globals.h16
-rw-r--r--src/WorldStorage/CMakeLists.txt6
-rw-r--r--src/WorldStorage/SchematicFileSerializer.cpp24
-rw-r--r--tests/CMakeLists.txt1
-rw-r--r--tests/LoadablePieces/Bindings.h15
-rw-r--r--tests/LoadablePieces/CMakeLists.txt93
-rw-r--r--tests/LoadablePieces/LoadablePieces.cpp57
-rw-r--r--tests/LoadablePieces/LuaState_Declaration.inc4
-rw-r--r--tests/LoadablePieces/LuaState_Typedefs.inc19
-rw-r--r--tests/LoadablePieces/Stubs.cpp283
-rw-r--r--tests/LoadablePieces/Test.cubeset154
-rw-r--r--tests/LoadablePieces/Test1.schematicbin0 -> 184 bytes
18 files changed, 708 insertions, 57 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 53e836262..db397a2d2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -197,13 +197,53 @@ if(${SELF_TEST})
add_subdirectory (tests)
endif()
-# Put project into solution folders in MSVC:
+# Put projects into solution folders in MSVC:
if (MSVC)
- set_target_properties(event_core event_extra expat jsoncpp lua luaexpat mbedtls sqlite SQLiteCpp tolualib zlib PROPERTIES FOLDER Lib)
- set_target_properties(luaproxy tolua PROPERTIES FOLDER Support)
+ set_target_properties(
+ event_core
+ event_extra
+ expat
+ jsoncpp
+ lua
+ luaexpat
+ mbedtls
+ sqlite
+ SQLiteCpp
+ tolualib
+ zlib
+ PROPERTIES FOLDER Lib
+ )
+ set_target_properties(
+ luaproxy
+ tolua
+ PROPERTIES FOLDER Support
+ )
if (${SELF_TEST})
- set_target_properties(Network PROPERTIES FOLDER Lib)
- set_target_properties(arraystocoords-exe coordinates-exe copies-exe copyblocks-exe creatable-exe EchoServer Google-exe ChunkBuffer NameLookup PROPERTIES FOLDER Tests)
+ set_target_properties(
+ Network
+ PROPERTIES FOLDER Lib
+ )
+ set_target_properties(
+ arraystocoords-exe
+ ChunkBuffer
+ coordinates-exe
+ copies-exe
+ copyblocks-exe
+ creatable-exe
+ EchoServer
+ Google-exe
+ LoadablePieces
+ NameLookup
+ PROPERTIES FOLDER Tests
+ )
+ endif()
+
+ if(${BUILD_TOOLS})
+ set_target_properties(
+ MCADefrag
+ ProtoProxy
+ PROPERTIES FOLDER Tools
+ )
endif()
endif()
diff --git a/src/Bindings/BindingsProcessor.lua b/src/Bindings/BindingsProcessor.lua
index fba992082..a398f5026 100644
--- a/src/Bindings/BindingsProcessor.lua
+++ b/src/Bindings/BindingsProcessor.lua
@@ -98,7 +98,9 @@ local function OutputLuaStateHelpers(a_Package)
f:write("// This file expects to be included form inside the cLuaState class definition\n")
f:write("\n\n\n\n\n")
for _, item in ipairs(types) do
- f:write("void Push(" .. item.name .. " * a_Value);\n")
+ if not(g_HasCustomPushImplementation[item.name]) then
+ f:write("void Push(" .. item.name .. " * a_Value);\n")
+ end
end
for _, item in ipairs(types) do
f:write("bool GetStackValue(int a_StackPos, Ptr" .. item.lname .. " & a_ReturnedVal);\n")
diff --git a/src/Bindings/LuaState.h b/src/Bindings/LuaState.h
index f6addad11..cc8214646 100644
--- a/src/Bindings/LuaState.h
+++ b/src/Bindings/LuaState.h
@@ -242,13 +242,14 @@ public:
// Push a simple value onto the stack (keep alpha-sorted):
void Push(bool a_Value);
+ void Push(cEntity * a_Entity);
+ void Push(cLuaServerHandle * a_ServerHandle);
+ void Push(cLuaTCPLink * a_TCPLink);
+ void Push(cLuaUDPEndpoint * a_UDPEndpoint);
void Push(double a_Value);
void Push(int a_Value);
void Push(void * a_Ptr);
void Push(std::chrono::milliseconds a_time);
- void Push(cLuaServerHandle * a_ServerHandle);
- void Push(cLuaTCPLink * a_TCPLink);
- void Push(cLuaUDPEndpoint * a_UDPEndpoint);
// GetStackValue() retrieves the value at a_StackPos, if it is a valid type. If not, a_Value is unchanged.
// Returns whether value was changed
diff --git a/src/Blocks/BlockHandler.cpp b/src/Blocks/BlockHandler.cpp
index 452cc94a5..105765b5f 100644
--- a/src/Blocks/BlockHandler.cpp
+++ b/src/Blocks/BlockHandler.cpp
@@ -427,6 +427,7 @@ void cBlockHandler::NeighborChanged(cChunkInterface & a_ChunkInterface, int a_Bl
+
void cBlockHandler::ConvertToPickups(cItems & a_Pickups, NIBBLETYPE a_BlockMeta)
{
// Setting the meta to a_BlockMeta keeps most textures. The few other blocks have to override this.
diff --git a/src/Generating/CMakeLists.txt b/src/Generating/CMakeLists.txt
index ebba4cce8..f3fe5c55c 100644
--- a/src/Generating/CMakeLists.txt
+++ b/src/Generating/CMakeLists.txt
@@ -101,5 +101,5 @@ endif()
if(NOT MSVC)
add_library(Generating ${SRCS} ${HDRS})
- target_link_libraries(Generating OSSupport Blocks)
+ target_link_libraries(Generating OSSupport Blocks Bindings)
endif()
diff --git a/src/Generating/PrefabPiecePool.cpp b/src/Generating/PrefabPiecePool.cpp
index c98eaaa5e..3f0ec8549 100644
--- a/src/Generating/PrefabPiecePool.cpp
+++ b/src/Generating/PrefabPiecePool.cpp
@@ -24,33 +24,6 @@
-#if SELF_TEST
-static class cPrefabPiecePoolTest
-{
-public:
- cPrefabPiecePoolTest(void)
- {
- cSelfTests::Get().Register(cSelfTests::SelfTestFunction(cPrefabPiecePoolTest::TestLoading), "PrefabPiecePool loading test");
- }
-
- static void TestLoading(void)
- {
- cPrefabPiecePool test;
- auto res = test.LoadFromFile("test.cubeset", true);
- if (!res)
- {
- LOGWARNING("Loading from file \"test.cubeset\" failed.");
- return;
- }
- LOG("Loaded %u pieces and %u starting pieces", static_cast<unsigned>(test.GetAllPiecesCount()), static_cast<unsigned>(test.GetStartingPiecesCount()));
- }
-} g_Test;
-#endif
-
-
-
-
-
/** Returns the map of string => eMergeStrategy used when translating cubeset file merge strategies. */
static std::map<AString, cBlockArea::eMergeStrategy> & GetMergeStrategyMap(void)
{
@@ -173,6 +146,7 @@ bool cPrefabPiecePool::LoadFromFile(const AString & a_FileName, bool a_LogWarnin
cFile f;
if (!f.Open(a_FileName, cFile::fmRead))
{
+ CONDWARNING(a_LogWarnings, "Cannot open file %s for reading", a_FileName.c_str());
return false;
}
char buf[4096];
@@ -184,6 +158,7 @@ bool cPrefabPiecePool::LoadFromFile(const AString & a_FileName, bool a_LogWarnin
{
return LoadFromCubesetFile(a_FileName, a_LogWarnings);
}
+ CONDWARNING(a_LogWarnings, "Cannot load prefabs from file %s, unknown file format", a_FileName.c_str());
return false;
}
diff --git a/src/Globals.h b/src/Globals.h
index b787a94da..f0e370d2c 100644
--- a/src/Globals.h
+++ b/src/Globals.h
@@ -261,14 +261,15 @@ template class SizeChecker<UInt8, 1>;
+// Common headers (part 1, without macros):
+#include "StringUtils.h"
+#include "OSSupport/CriticalSection.h"
+#include "OSSupport/Event.h"
+#include "OSSupport/File.h"
+#include "OSSupport/StackTrace.h"
+
#ifndef TEST_GLOBALS
- // Common headers (part 1, without macros):
- #include "StringUtils.h"
- #include "OSSupport/CriticalSection.h"
- #include "OSSupport/Event.h"
- #include "OSSupport/File.h"
#include "Logger.h"
- #include "OSSupport/StackTrace.h"
#else
// Logging functions
void inline LOGERROR(const char * a_Format, ...) FORMATSTRING(1, 2);
@@ -315,6 +316,9 @@ void inline LOG(const char * a_Format, ...)
va_end(argList);
}
+#define LOGINFO LOG
+#define LOGWARN LOGWARNING
+
#endif
diff --git a/src/WorldStorage/CMakeLists.txt b/src/WorldStorage/CMakeLists.txt
index 074958191..017d85f27 100644
--- a/src/WorldStorage/CMakeLists.txt
+++ b/src/WorldStorage/CMakeLists.txt
@@ -14,7 +14,8 @@ SET (SRCS
ScoreboardSerializer.cpp
StatSerializer.cpp
WSSAnvil.cpp
- WorldStorage.cpp)
+ WorldStorage.cpp
+)
SET (HDRS
EnchantmentSerializer.h
@@ -26,7 +27,8 @@ SET (HDRS
ScoreboardSerializer.h
StatSerializer.h
WSSAnvil.h
- WorldStorage.h)
+ WorldStorage.h
+)
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
set_source_files_properties(EnchantmentSerializer.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=old-style-cast")
diff --git a/src/WorldStorage/SchematicFileSerializer.cpp b/src/WorldStorage/SchematicFileSerializer.cpp
index 199873968..3e9ed5bef 100644
--- a/src/WorldStorage/SchematicFileSerializer.cpp
+++ b/src/WorldStorage/SchematicFileSerializer.cpp
@@ -238,27 +238,27 @@ bool cSchematicFileSerializer::LoadFromSchematicNBT(cBlockArea & a_BlockArea, cP
}
// Copy the block types and metas:
- size_t NumBytes = a_BlockArea.GetBlockCount();
- if (a_NBT.GetDataLength(TBlockTypes) < NumBytes)
+ size_t NumTypeBytes = a_BlockArea.GetBlockCount();
+ if (a_NBT.GetDataLength(TBlockTypes) < NumTypeBytes)
{
- LOG("BlockTypes truncated in the schematic file (exp %d, got %d bytes). Loading partial.",
- (int)NumBytes, (int)a_NBT.GetDataLength(TBlockTypes)
+ LOG("BlockTypes truncated in the schematic file (exp %u, got %u bytes). Loading partial.",
+ static_cast<unsigned>(NumTypeBytes), static_cast<unsigned>(a_NBT.GetDataLength(TBlockTypes))
);
- NumBytes = a_NBT.GetDataLength(TBlockTypes);
+ NumTypeBytes = a_NBT.GetDataLength(TBlockTypes);
}
- memcpy(a_BlockArea.m_BlockTypes, a_NBT.GetData(TBlockTypes), NumBytes);
+ memcpy(a_BlockArea.m_BlockTypes, a_NBT.GetData(TBlockTypes), NumTypeBytes);
if (AreMetasPresent)
{
- size_t NumBytes = a_BlockArea.GetBlockCount();
- if (a_NBT.GetDataLength(TBlockMetas) < NumBytes)
+ size_t NumMetaBytes = a_BlockArea.GetBlockCount();
+ if (a_NBT.GetDataLength(TBlockMetas) < NumMetaBytes)
{
- LOG("BlockMetas truncated in the schematic file (exp %d, got %d bytes). Loading partial.",
- (int)NumBytes, (int)a_NBT.GetDataLength(TBlockMetas)
+ LOG("BlockMetas truncated in the schematic file (exp %u, got %u bytes). Loading partial.",
+ static_cast<unsigned>(NumMetaBytes), static_cast<unsigned>(a_NBT.GetDataLength(TBlockMetas))
);
- NumBytes = a_NBT.GetDataLength(TBlockMetas);
+ NumMetaBytes = a_NBT.GetDataLength(TBlockMetas);
}
- memcpy(a_BlockArea.m_BlockMetas, a_NBT.GetData(TBlockMetas), NumBytes);
+ memcpy(a_BlockArea.m_BlockMetas, a_NBT.GetData(TBlockMetas), NumMetaBytes);
}
return true;
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 265640cc8..4db898fdb 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -6,3 +6,4 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR})
add_subdirectory(ChunkData)
add_subdirectory(Network)
+add_subdirectory(LoadablePieces)
diff --git a/tests/LoadablePieces/Bindings.h b/tests/LoadablePieces/Bindings.h
new file mode 100644
index 000000000..490830ac3
--- /dev/null
+++ b/tests/LoadablePieces/Bindings.h
@@ -0,0 +1,15 @@
+
+// Bindings.h
+
+// Dummy include file needed for LuaState to compile successfully
+
+
+
+
+struct lua_State;
+
+int tolua_AllToLua_open(lua_State * a_LuaState);
+
+
+
+
diff --git a/tests/LoadablePieces/CMakeLists.txt b/tests/LoadablePieces/CMakeLists.txt
new file mode 100644
index 000000000..74429ea9d
--- /dev/null
+++ b/tests/LoadablePieces/CMakeLists.txt
@@ -0,0 +1,93 @@
+cmake_minimum_required (VERSION 2.6)
+
+enable_testing()
+
+include_directories(${CMAKE_SOURCE_DIR}/src/)
+include_directories(${CMAKE_SOURCE_DIR}/lib/)
+include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+
+add_definitions(-DTEST_GLOBALS=1)
+
+set (SHARED_SRCS
+ ${CMAKE_SOURCE_DIR}/src/BlockArea.cpp
+ ${CMAKE_SOURCE_DIR}/src/Cuboid.cpp
+ ${CMAKE_SOURCE_DIR}/src/ChunkData.cpp
+ ${CMAKE_SOURCE_DIR}/src/StringCompression.cpp
+ ${CMAKE_SOURCE_DIR}/src/StringUtils.cpp
+
+ ${CMAKE_SOURCE_DIR}/src/Bindings/LuaState.cpp
+
+ ${CMAKE_SOURCE_DIR}/src/Generating/ChunkDesc.cpp
+ ${CMAKE_SOURCE_DIR}/src/Generating/PieceGenerator.cpp
+ ${CMAKE_SOURCE_DIR}/src/Generating/Prefab.cpp
+ ${CMAKE_SOURCE_DIR}/src/Generating/PrefabPiecePool.cpp
+
+ ${CMAKE_SOURCE_DIR}/src/Noise/Noise.cpp
+
+ ${CMAKE_SOURCE_DIR}/src/OSSupport/CriticalSection.cpp
+ ${CMAKE_SOURCE_DIR}/src/OSSupport/Event.cpp
+ ${CMAKE_SOURCE_DIR}/src/OSSupport/File.cpp
+ ${CMAKE_SOURCE_DIR}/src/OSSupport/GZipFile.cpp
+ ${CMAKE_SOURCE_DIR}/src/OSSupport/StackTrace.cpp
+
+ ${CMAKE_SOURCE_DIR}/src/WorldStorage/FastNBT.cpp
+ ${CMAKE_SOURCE_DIR}/src/WorldStorage/SchematicFileSerializer.cpp
+)
+
+set (SHARED_HDRS
+ ${CMAKE_SOURCE_DIR}/src/BlockArea.h
+ ${CMAKE_SOURCE_DIR}/src/Cuboid.h
+ ${CMAKE_SOURCE_DIR}/src/ChunkData.h
+ ${CMAKE_SOURCE_DIR}/src/Globals.h
+ ${CMAKE_SOURCE_DIR}/src/StringCompression.h
+ ${CMAKE_SOURCE_DIR}/src/StringUtils.h
+
+ ${CMAKE_SOURCE_DIR}/src/Bindings/LuaState.h
+
+ ${CMAKE_SOURCE_DIR}/src/Generating/ChunkDesc.h
+ ${CMAKE_SOURCE_DIR}/src/Generating/PieceGenerator.h
+ ${CMAKE_SOURCE_DIR}/src/Generating/Prefab.h
+ ${CMAKE_SOURCE_DIR}/src/Generating/PrefabPiecePool.h
+
+ ${CMAKE_SOURCE_DIR}/src/Noise/Noise.h
+
+ ${CMAKE_SOURCE_DIR}/src/OSSupport/CriticalSection.h
+ ${CMAKE_SOURCE_DIR}/src/OSSupport/Event.h
+ ${CMAKE_SOURCE_DIR}/src/OSSupport/File.h
+ ${CMAKE_SOURCE_DIR}/src/OSSupport/GZipFile.h
+ ${CMAKE_SOURCE_DIR}/src/OSSupport/StackTrace.h
+
+ ${CMAKE_SOURCE_DIR}/src/WorldStorage/FastNBT.h
+ ${CMAKE_SOURCE_DIR}/src/WorldStorage/SchematicFileSerializer.h
+)
+
+set (SRCS
+ LoadablePieces.cpp
+ Stubs.cpp
+ LuaState_Typedefs.inc
+ LuaState_Declaration.inc
+ Bindings.h
+)
+
+
+if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+ add_flags_cxx("-Wno-error=conversion -Wno-error=old-style-cast")
+ add_flags_cxx("-Wno-error=global-constructors")
+endif()
+
+
+if (MSVC)
+ # Add the MSVC-specific LeakFinder sources:
+ list (APPEND SHARED_SRCS ${CMAKE_SOURCE_DIR}/src/LeakFinder.cpp ${CMAKE_SOURCE_DIR}/src/StackWalker.cpp)
+ list (APPEND SHARED_HDRS ${CMAKE_SOURCE_DIR}/src/LeakFinder.h ${CMAKE_SOURCE_DIR}/src/StackWalker.h)
+endif()
+
+source_group("Shared" FILES ${SHARED_SRCS} ${SHARED_HDRS})
+source_group("Sources" FILES ${SRCS})
+add_executable(LoadablePieces ${SRCS} ${SHARED_SRCS} ${SHARED_HDRS})
+target_link_libraries(LoadablePieces tolualib zlib)
+add_test(NAME LoadablePieces-test WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND LoadablePieces)
+
+
+
+
diff --git a/tests/LoadablePieces/LoadablePieces.cpp b/tests/LoadablePieces/LoadablePieces.cpp
new file mode 100644
index 000000000..cce43eee1
--- /dev/null
+++ b/tests/LoadablePieces/LoadablePieces.cpp
@@ -0,0 +1,57 @@
+
+// LoadablePieces.cpp
+
+// Implements the LoadablePieces test main entrypoint
+
+#include "Globals.h"
+#ifdef _WIN32
+ #include <direct.h>
+ #define GetCurrentFolder _getcwd
+#else
+ #include <unistd.h>
+ #define GetCurrentFolder getcwd
+#endif
+#include "Generating/PrefabPiecePool.h"
+
+
+
+
+
+static int DoTest(void)
+{
+ cPrefabPiecePool test;
+ auto res = test.LoadFromFile("Test.cubeset", true);
+ if (!res)
+ {
+ LOGWARNING("Loading from file \"Test.cubeset\" failed.");
+ return 1;
+ }
+ LOG("Loaded %u regular pieces and %u starting pieces", static_cast<unsigned>(test.GetAllPiecesCount()), static_cast<unsigned>(test.GetStartingPiecesCount()));
+
+ // Check that we loaded all the pieces:
+ testassert(test.GetAllPiecesCount() == 1);
+ testassert(test.GetStartingPiecesCount() == 1);
+
+ return 0;
+}
+
+
+
+
+
+int main(int argc, char * argv[])
+{
+ // Print the current directory for reference:
+ char folder[FILENAME_MAX];
+ GetCurrentFolder(folder, sizeof(folder));
+ LOG("Running cPrefabPiecePool test from folder \"%s\".", folder);
+
+ // Run the test:
+ int res = DoTest();
+ LOG("cPrefabPiecePool loading test done: %s", (res == 0) ? "success" : "failure");
+ return res;
+}
+
+
+
+
diff --git a/tests/LoadablePieces/LuaState_Declaration.inc b/tests/LoadablePieces/LuaState_Declaration.inc
new file mode 100644
index 000000000..4019b26c6
--- /dev/null
+++ b/tests/LoadablePieces/LuaState_Declaration.inc
@@ -0,0 +1,4 @@
+
+// LuaState_Declaration.inc
+
+// Dummy include file needed for LuaState to compile successfully
diff --git a/tests/LoadablePieces/LuaState_Typedefs.inc b/tests/LoadablePieces/LuaState_Typedefs.inc
new file mode 100644
index 000000000..5eba7c6f8
--- /dev/null
+++ b/tests/LoadablePieces/LuaState_Typedefs.inc
@@ -0,0 +1,19 @@
+
+// LuaState_Typedefs.inc
+
+// Dummy include file needed for LuaState to compile successfully
+
+
+
+
+
+// Forward-declare classes that are used in the API but never called:
+struct HTTPRequest;
+struct HTTPTemplateRequest;
+class cPluginLua;
+class cBoundingBox;
+template <typename T> class cItemCallback;
+class cEntity;
+
+
+
diff --git a/tests/LoadablePieces/Stubs.cpp b/tests/LoadablePieces/Stubs.cpp
new file mode 100644
index 000000000..b1f61212b
--- /dev/null
+++ b/tests/LoadablePieces/Stubs.cpp
@@ -0,0 +1,283 @@
+
+// Stubs.cpp
+
+// Implements stubs of various MCServer methods that are needed for linking but not for runtime
+// This is required so that we don't bring in the entire MCServer via dependencies
+
+#include "Globals.h"
+#include "BlockInfo.h"
+#include "SelfTests.h"
+#include "Bindings.h"
+#include "Bindings/DeprecatedBindings.h"
+#include "Bindings/ManualBindings.h"
+#include "BlockEntities/BlockEntity.h"
+#include "Blocks/BlockHandler.h"
+#include "Generating/ChunkDesc.h"
+
+
+
+
+
+// fwd:
+struct lua_State;
+
+
+
+
+
+// Prototypes, needed by clang:
+extern "C" int luaopen_lsqlite3(lua_State * a_LuaState);
+extern "C" int luaopen_lxp(lua_State * a_LuaState);
+
+
+
+
+
+void cManualBindings::Bind(lua_State * a_LuaState)
+{
+}
+
+
+
+
+
+void DeprecatedBindings::Bind(lua_State * a_LuaState)
+{
+}
+
+
+
+
+
+int tolua_AllToLua_open(lua_State * a_LuaState)
+{
+ return 0;
+}
+
+
+
+
+
+extern "C" int luaopen_lsqlite3(lua_State * a_LuaState)
+{
+ return 0;
+}
+
+
+
+
+
+extern "C" int luaopen_lxp(lua_State * a_LuaState)
+{
+ return 0;
+}
+
+
+
+
+
+cBlockInfo::~cBlockInfo()
+{
+}
+
+
+
+
+
+void cBlockInfo::Initialize(cBlockInfo::cBlockInfoArray & a_BlockInfos)
+{
+ // The piece-loading code uses the handlers for rotations, so we need valid handlers
+ // Insert dummy handlers:
+ for (size_t i = 0; i < ARRAYCOUNT(a_BlockInfos); i++)
+ {
+ a_BlockInfos[i].m_Handler = new cBlockHandler(static_cast<BLOCKTYPE>(i));
+ }
+}
+
+
+
+
+
+cBlockHandler::cBlockHandler(BLOCKTYPE a_BlockType)
+{
+}
+
+
+
+
+
+bool cBlockHandler::GetPlacementBlockTypeMeta(
+ cChunkInterface & a_ChunkInterface, cPlayer * a_Player,
+ int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_BlockFace,
+ int a_CursorX, int a_CursorY, int a_CursorZ,
+ BLOCKTYPE & a_BlockType, NIBBLETYPE & a_BlockMeta
+)
+{
+ return true;
+}
+
+
+
+
+
+void cBlockHandler::OnUpdate(cChunkInterface & cChunkInterface, cWorldInterface & a_WorldInterface, cBlockPluginInterface & a_PluginInterface, cChunk & a_Chunk, int a_BlockX, int a_BlockY, int a_BlockZ)
+{
+}
+
+
+
+
+
+void cBlockHandler::OnPlacedByPlayer(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cPlayer * a_Player, const sSetBlock & a_BlockChange)
+{
+}
+
+
+
+
+
+void cBlockHandler::OnDestroyedByPlayer(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ)
+{
+}
+
+
+
+
+
+void cBlockHandler::OnPlaced(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
+{
+}
+
+
+
+
+
+void cBlockHandler::OnDestroyed(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, int a_BlockX, int a_BlockY, int a_BlockZ)
+{
+}
+
+
+
+
+
+void cBlockHandler::NeighborChanged(cChunkInterface & a_ChunkInterface, int a_BlockX, int a_BlockY, int a_BlockZ)
+{
+}
+
+
+
+
+
+void cBlockHandler::ConvertToPickups(cItems & a_Pickups, NIBBLETYPE a_BlockMeta)
+{
+}
+
+
+
+
+
+void cBlockHandler::DropBlock(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cBlockPluginInterface & a_BlockPluginInterface, cEntity * a_Digger, int a_BlockX, int a_BlockY, int a_BlockZ, bool a_CanDrop)
+{
+}
+
+
+
+
+
+bool cBlockHandler::CanBeAt(cChunkInterface & a_ChunkInterface, int a_BlockX, int a_BlockY, int a_BlockZ, const cChunk & a_Chunk)
+{
+ return true;
+}
+
+
+
+
+
+bool cBlockHandler::CanDirtGrowGrass(NIBBLETYPE a_Meta)
+{
+ return true;
+}
+
+
+
+
+
+bool cBlockHandler::IsUseable()
+{
+ return false;
+}
+
+
+
+
+
+bool cBlockHandler::IsClickedThrough(void)
+{
+ return false;
+}
+
+
+
+
+
+bool cBlockHandler::DoesIgnoreBuildCollision(void)
+{
+ return (m_BlockType == E_BLOCK_AIR);
+}
+
+
+
+
+
+bool cBlockHandler::DoesDropOnUnsuitable(void)
+{
+ return true;
+}
+
+
+
+
+
+void cBlockHandler::Check(cChunkInterface & a_ChunkInterface, cBlockPluginInterface & a_PluginInterface, int a_RelX, int a_RelY, int a_RelZ, cChunk & a_Chunk)
+{
+}
+
+
+
+
+
+cBlockEntity * cBlockEntity::CreateByBlockType(BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta, int a_BlockX, int a_BlockY, int a_BlockZ, cWorld * a_World)
+{
+ return nullptr;
+}
+
+
+
+
+
+cSelfTests::cSelfTests(void):
+ m_AllowRegistering(true)
+{
+}
+
+
+
+
+
+cSelfTests & cSelfTests::Get(void)
+{
+ static cSelfTests singleton;
+ return singleton;
+}
+
+
+
+
+
+void cSelfTests::Register(cSelfTests::SelfTestFunction a_TestFn, const AString & a_TestName)
+{
+}
+
+
+
+
diff --git a/tests/LoadablePieces/Test.cubeset b/tests/LoadablePieces/Test.cubeset
new file mode 100644
index 000000000..c1bdc9844
--- /dev/null
+++ b/tests/LoadablePieces/Test.cubeset
@@ -0,0 +1,154 @@
+
+-- Test.cubeset
+
+-- This simple cubeset file is used for testing the cPrefabPiecePool loader.
+
+
+
+
+
+Cubeset =
+{
+ Metadata =
+ {
+ CubesetFormatVersion = 1,
+ },
+
+ Pieces =
+ {
+ -- One piece with inline definition:
+ {
+ Size =
+ {
+ x = 4,
+ y = 4,
+ z = 4,
+ },
+ Hitbox =
+ {
+ MinX = 0,
+ MinY = 0,
+ MinZ = 0,
+ MaxX = 3,
+ MaxY = 3,
+ MaxZ = 3,
+ },
+ BlockDefinitions =
+ {
+ ".: 0: 0", -- air
+ "a: 1: 0", -- stone
+ "b: 24: 0", -- sandstone
+ "c: 8: 0", -- water
+ "d: 85: 0", -- fence
+ "m: 19: 0", -- sponge
+ },
+ BlockData =
+ {
+ -- Level 0
+ "aaaa", -- 0
+ "aaaa", -- 1
+ "aaaa", -- 2
+ "aaaa", -- 3
+
+ -- Level 1
+ "bbbb", -- 0
+ "bccb", -- 1
+ "bccb", -- 2
+ "bbbb", -- 3
+
+ -- Level 2
+ "bbbb", -- 0
+ "bccb", -- 1
+ "bccb", -- 2
+ "bbbb", -- 3
+
+ -- Level 3
+ "bbbb", -- 0
+ "bccb", -- 1
+ "bccb", -- 2
+ "bbbb", -- 3
+ },
+ Connectors =
+ {
+ {
+ Type = 2,
+ RelX = 2,
+ RelY = 2,
+ RelZ = 0,
+ Direction = 2, -- Z-
+ },
+ {
+ Type = 2,
+ RelX = 0,
+ RelY = 2,
+ RelZ = 1,
+ Direction = 4, -- X-
+ },
+ {
+ Type = 2,
+ RelX = 1,
+ RelY = 2,
+ RelZ = 3,
+ Direction = 3, -- Z+
+ },
+ {
+ Type = 2,
+ RelX = 3,
+ RelY = 2,
+ RelZ = 2,
+ Direction = 5, -- X+
+ },
+ },
+ Metadata =
+ {
+ ["DefaultWeight"] = "100",
+ ["AllowedRotations"] = "7",
+ ["MergeStrategy"] = "msSpongePrint",
+ ["IsStarting"] = "1",
+ ["DepthWeight"] = "",
+ ["ShouldExpandFloor"] = "1",
+ ["MoveToGround"] = "1",
+ ["AddWeightIfSame"] = "0",
+ },
+ },
+
+ -- One piece with external definition:
+ {
+ Hitbox =
+ {
+ MinX = 0,
+ MinY = 0,
+ MinZ = 0,
+ MaxX = 3,
+ MaxY = 3,
+ MaxZ = 3,
+ },
+ SchematicFileName = "Test1.schematic",
+ Connectors =
+ {
+ {
+ Type = 2,
+ RelX = 2,
+ RelY = 2,
+ RelZ = 0,
+ Direction = 2, -- Z-
+ },
+ },
+ Metadata =
+ {
+ ["DefaultWeight"] = "100",
+ ["AllowedRotations"] = "7",
+ ["MergeStrategy"] = "msSpongePrint",
+ ["IsStarting"] = "0",
+ ["DepthWeight"] = "",
+ ["ShouldExpandFloor"] = "1",
+ ["MoveToGround"] = "0",
+ ["AddWeightIfSame"] = "0",
+ },
+ },
+ }, -- Pieces
+}
+
+
+
+
diff --git a/tests/LoadablePieces/Test1.schematic b/tests/LoadablePieces/Test1.schematic
new file mode 100644
index 000000000..6fe19e9db
--- /dev/null
+++ b/tests/LoadablePieces/Test1.schematic
Binary files differ