2019-08-23 23:55:09 +02:00
|
|
|
package fr.themode.minestom.data;
|
|
|
|
|
2019-09-15 13:42:36 +02:00
|
|
|
import fr.themode.minestom.io.DataReader;
|
2019-09-07 11:42:33 +02:00
|
|
|
import fr.themode.minestom.io.IOManager;
|
|
|
|
import fr.themode.minestom.utils.CompressionUtils;
|
|
|
|
|
2019-09-15 13:42:36 +02:00
|
|
|
import java.io.File;
|
|
|
|
import java.io.FileNotFoundException;
|
|
|
|
import java.io.FileOutputStream;
|
|
|
|
import java.io.IOException;
|
2019-09-07 11:42:33 +02:00
|
|
|
import java.nio.file.Files;
|
|
|
|
import java.util.function.Consumer;
|
|
|
|
|
2019-08-23 23:55:09 +02:00
|
|
|
public interface DataContainer {
|
|
|
|
|
|
|
|
Data getData();
|
|
|
|
|
|
|
|
void setData(Data data);
|
|
|
|
|
2019-09-07 11:42:33 +02:00
|
|
|
default void saveData(File file, Runnable callback) {
|
|
|
|
IOManager.submit(() -> {
|
|
|
|
Data data = getData();
|
2020-04-23 23:46:36 +02:00
|
|
|
if (data == null)
|
|
|
|
throw new NullPointerException("You cannot save null data!");
|
2019-09-07 11:42:33 +02:00
|
|
|
|
|
|
|
try (FileOutputStream fos = new FileOutputStream(file)) {
|
|
|
|
byte[] serializedData = data.getSerializedData();
|
|
|
|
fos.write(CompressionUtils.getCompressedData(serializedData));
|
|
|
|
} catch (FileNotFoundException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (IOException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
if (callback != null)
|
|
|
|
callback.run();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
default void saveData(File file) {
|
|
|
|
saveData(file, null);
|
|
|
|
}
|
|
|
|
|
|
|
|
default void loadData(File file, Consumer<Data> callback) {
|
|
|
|
IOManager.submit(() -> {
|
|
|
|
|
|
|
|
if (!file.exists()) {
|
|
|
|
setData(new Data());
|
|
|
|
if (callback != null)
|
|
|
|
callback.accept(getData());
|
|
|
|
System.out.println("FILE DATA NOT FOUND, NEW DATA OBJECT CREATED");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
byte[] array;
|
|
|
|
try {
|
|
|
|
array = Files.readAllBytes(file.toPath());
|
|
|
|
} catch (IOException e) {
|
|
|
|
e.printStackTrace(); // Unknown error
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2019-09-15 13:42:36 +02:00
|
|
|
Data data = DataReader.readData(array, true);
|
2019-09-07 11:42:33 +02:00
|
|
|
|
|
|
|
setData(data);
|
|
|
|
if (callback != null)
|
|
|
|
callback.accept(data);
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
default void loadData(File file) {
|
|
|
|
loadData(file, null);
|
|
|
|
}
|
|
|
|
|
2019-08-23 23:55:09 +02:00
|
|
|
}
|