Data export/import

This commit is contained in:
Anuken
2019-08-29 22:04:01 -04:00
parent ae88f286a6
commit ddca5ef25a
3 changed files with 134 additions and 42 deletions

View File

@@ -2,11 +2,16 @@ package io.anuke.mindustry.game;
import io.anuke.arc.*;
import io.anuke.arc.collection.*;
import io.anuke.arc.files.*;
import io.anuke.arc.util.io.*;
import io.anuke.mindustry.*;
import io.anuke.mindustry.content.*;
import io.anuke.mindustry.game.EventType.*;
import io.anuke.mindustry.type.*;
import java.io.*;
import java.util.zip.*;
import static io.anuke.mindustry.Vars.*;
/** Stores player unlocks. Clientside only. */
@@ -29,6 +34,43 @@ public class GlobalData{
});
}
public void exportData(FileHandle file) throws IOException{
Array<FileHandle> files = new Array<>();
files.add(Core.settings.getSettingsFile());
files.addAll(customMapDirectory.list());
files.addAll(saveDirectory.list());
String base = Core.settings.getDataDirectory().path();
try(OutputStream fos = file.write(false, 2048); ZipOutputStream zos = new ZipOutputStream(fos)){
for(FileHandle add : files){
zos.putNextEntry(new ZipEntry(add.path().substring(base.length())));
Streams.copyStream(add.read(), zos);
zos.closeEntry();
}
}
}
public void importData(FileHandle file){
FileHandle zipped = new ZipFileHandle(file);
FileHandle base = Core.settings.getDataDirectory();
if(!base.child("settings.bin").exists()){
throw new IllegalArgumentException("Not valid save data.");
}
//purge existing data
for(FileHandle f : base.list()){
if(f.isDirectory()){
f.deleteDirectory();
}else{
f.delete();
}
}
zipped.walk(f -> f.copyTo(base.child(f.path())));
}
public void modified(){
modified = true;
}