+}
+
+
+void DecoSchematic::placeStructure(Map *map, v3s16 p) {
+ assert(schematic != NULL);
+ ManualMapVoxelManipulator *vm = new ManualMapVoxelManipulator(map);
+
+ Rotation rot = (rotation == ROTATE_RAND) ?
+ (Rotation)myrand_range(ROTATE_0, ROTATE_270) : rotation;
+
+ v3s16 s = (rot == ROTATE_90 || rot == ROTATE_270) ?
+ v3s16(size.Z, size.Y, size.X) : size;
+
+ if (flags & DECO_PLACE_CENTER_X)
+ p.X -= (s.X + 1) / 2;
+ if (flags & DECO_PLACE_CENTER_Y)
+ p.Y -= (s.Y + 1) / 2;
+ if (flags & DECO_PLACE_CENTER_Z)
+ p.Z -= (s.Z + 1) / 2;
+
+ v3s16 bp1 = getNodeBlockPos(p);
+ v3s16 bp2 = getNodeBlockPos(p + s - v3s16(1,1,1));
+ vm->initialEmerge(bp1, bp2);
+
+ blitToVManip(p, vm, rot, true);