summaryrefslogtreecommitdiff
path: root/server/map.go
diff options
context:
space:
mode:
Diffstat (limited to 'server/map.go')
-rw-r--r--server/map.go22
1 files changed, 9 insertions, 13 deletions
diff --git a/server/map.go b/server/map.go
index e84ca55..f210d42 100644
--- a/server/map.go
+++ b/server/map.go
@@ -95,6 +95,9 @@ func (v *blockVolume) unsyncSetBlock(p blockPos, t blockType) {
}
func (v *blockVolume) unsyncFlushChanges() {
+ if len(v.changes) == 0 {
+ return
+ }
var (
oldRuns = v.blockRuns
changes = v.changes
@@ -198,21 +201,14 @@ func (v *blockVolume) unsyncBlocksInRange(min, max blockPos) []blockType {
func (v *blockVolume) syncCompressForNetwork(/*highBits bool*/) io.ReadCloser {
rd, wr := io.Pipe()
go func() {
- defer wr.Close()
- z := gzip.NewWriter(wr)
- defer z.Close()
- bw := bufio.NewWriter(z)
- defer bw.Flush()
-
v.RLock()
defer v.RUnlock()
- binary.Write(bw, binary.BigEndian, uint32(v.size.X*v.size.Y*v.size.Z))
- for block := range v.unsyncGetAll() {
- err := bw.WriteByte(byte(block))
- if err != nil {
- return
- }
- }
+ bw := bufio.NewWriter(wr)
+ defer bw.Flush()
+ writePointlessGzipHeader(bw)
+ len := uint32(v.size.X*v.size.Y*v.size.Z)
+ deflateRuns(wr, v.blockRuns, v.changes, len)
+ writePointlessGzipTrailer(bw, len)
}()
return rd
}