1 package main 2 3 import ( 4 "archive/zip" 5 "os" 6 "path" 7 8 "vimagination.zapto.org/byteio" 9 ) 10 11 func (t Transfer) maps(name string, _ *byteio.StickyLittleEndianReader, _ *byteio.StickyLittleEndianWriter, f *os.File, size int64) error { 12 zr, err := zip.NewReader(f, size) 13 if err != nil { 14 return err 15 } 16 m := t.c.NewMap() 17 done := false 18 go func() { 19 if !done { 20 t.c.RemoveMap(m.ID) 21 } 22 go t.c.Save() 23 }() 24 m.Lock() 25 m.Name = name 26 d := m.Path 27 m.Unlock() 28 err = unzip(zr, d) 29 if err != nil { 30 return err 31 } 32 mapProperties := DefaultMapSettings() 33 mapProperties["motd"] = name 34 pm, err := os.OpenFile(path.Join(d, "properties.map"), os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0644) 35 defer pm.Close() 36 if err != nil { 37 if !os.IsExist(err) { 38 return err 39 } 40 } else { 41 err = mapProperties.WriteTo(pm) 42 if err != nil { 43 return err 44 } 45 } 46 done = true 47 return nil 48 }