From 390c0cd69185b3be7f6f49d7f8fe53f901edf5aa Mon Sep 17 00:00:00 2001
From: kwolekr <kwolekr@minetest.net>
Date: Sat, 6 Dec 2014 18:39:05 -0500
Subject: [PATCH] Schematics: Fix minetest.place_schematic() when defined by a
 Lua table

---
 src/mg_schematic.cpp            |  2 +-
 src/script/common/c_content.cpp | 11 +++++++----
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/mg_schematic.cpp b/src/mg_schematic.cpp
index 92cbf8e4e..d203a7105 100644
--- a/src/mg_schematic.cpp
+++ b/src/mg_schematic.cpp
@@ -57,7 +57,7 @@ void Schematic::updateContentIds()
 
 	flags |= SCHEM_CIDS_UPDATED;
 
-	for (int i = 0; i != size.X * size.Y * size.Z; i++)
+	for (size_t i = 0; i != size.X * size.Y * size.Z; i++)
 		schemdata[i].setContent(c_nodes[schemdata[i].getContent()]);
 }
 
diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp
index bf4da41ec..799251bcf 100644
--- a/src/script/common/c_content.cpp
+++ b/src/script/common/c_content.cpp
@@ -267,7 +267,7 @@ ContentFeatures read_content_features(lua_State *L, int index)
 	lua_getfield(L, index, "on_rightclick");
 	f.rightclickable = lua_isfunction(L, -1);
 	lua_pop(L, 1);
-	
+
 	/* Name */
 	getstringfield(L, index, "name", f.name);
 
@@ -1039,7 +1039,7 @@ bool read_schematic(lua_State *L, int index, Schematic *schem,
 	//// Get schematic data
 	lua_getfield(L, index, "data");
 	luaL_checktype(L, -1, LUA_TTABLE);
-	
+
 	int numnodes = size.X * size.Y * size.Z;
 	MapNode *schemdata = new MapNode[numnodes];
 	int i = 0;
@@ -1069,7 +1069,7 @@ bool read_schematic(lua_State *L, int index, Schematic *schem,
 
 			schemdata[i] = MapNode(ndef, name, param1, param2);
 		}
-		
+
 		i++;
 		lua_pop(L, 1);
 	}
@@ -1098,7 +1098,10 @@ bool read_schematic(lua_State *L, int index, Schematic *schem,
 		}
 	}
 
-	schem->flags       = 0;
+	// Here, we read the nodes directly from the INodeDefManager - there is no
+	// need for pending node resolutions so we'll mark this schematic as updated
+	schem->flags       = SCHEM_CIDS_UPDATED;
+
 	schem->size        = size;
 	schem->schemdata   = schemdata;
 	schem->slice_probs = slice_probs;
-- 
GitLab