summaryrefslogtreecommitdiff
path: root/src/mapblock.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mapblock.cpp')
-rw-r--r--src/mapblock.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/mapblock.cpp b/src/mapblock.cpp
index a4da657d1..d2c323291 100644
--- a/src/mapblock.cpp
+++ b/src/mapblock.cpp
@@ -696,6 +696,15 @@ bool MapBlock::propagateSunlight(core::map<v3s16, bool> & light_sources)
return block_below_is_valid;
}
+void MapBlock::copyTo(VoxelManipulator &dst)
+{
+ v3s16 data_size(MAP_BLOCKSIZE, MAP_BLOCKSIZE, MAP_BLOCKSIZE);
+ VoxelArea data_area(v3s16(0,0,0), data_size - v3s16(1,1,1));
+
+ dst.copyFrom(data, data_area, v3s16(0,0,0),
+ getPosRelative(), data_size);
+}
+
/*
Serialization
*/
@@ -755,6 +764,17 @@ void MapBlock::serialize(std::ostream &os, u8 version)
paramdata[i] = data[i].param;
}
compress(paramdata, os, version);
+
+ if(version >= 10)
+ {
+ // Get and compress pressure
+ SharedBuffer<u8> pressuredata(nodecount);
+ for(u32 i=0; i<nodecount; i++)
+ {
+ pressuredata[i] = data[i].pressure;
+ }
+ compress(pressuredata, os, version);
+ }
}
}
@@ -819,6 +839,21 @@ void MapBlock::deSerialize(std::istream &is, u8 version)
data[i].param = s[i];
}
}
+
+ if(version >= 10)
+ {
+ // Uncompress and set pressure data
+ std::ostringstream os(std::ios_base::binary);
+ decompress(is, os, version);
+ std::string s = os.str();
+ if(s.size() != nodecount)
+ throw SerializationError
+ ("MapBlock::deSerialize: invalid format");
+ for(u32 i=0; i<s.size(); i++)
+ {
+ data[i].pressure = s[i];
+ }
+ }
}
}