Minestom/src/main/java/fr/themode/minestom/data/DataContainer.java

75 lines
2.0 KiB
Java
Raw Normal View History

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;
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);
}
}