restore backup save for errors

This commit is contained in:
Anthony Calosa
2025-09-08 19:17:51 +08:00
parent bbbc5e0ee6
commit 0d26b499d3

View File

@@ -156,7 +156,12 @@ public class WorldSave {
header.name = text; header.name = text;
String fileName = WorldSave.getSaveFile(currentSlot); String fileName = WorldSave.getSaveFile(currentSlot);
String oldFileName = fileName.replace(".sav", ".old");
new File(getSaveDir()).mkdirs(); new File(getSaveDir()).mkdirs();
File currentFile = new File(fileName);
File backupFile = new File(oldFileName);
if (currentFile.exists())
currentFile.renameTo(backupFile);
try { try {
try (FileOutputStream fos = new FileOutputStream(fileName); try (FileOutputStream fos = new FileOutputStream(fileName);
@@ -169,8 +174,11 @@ public class WorldSave {
String message = getExceptionMessage(player, world, worldStage, poiChanges); String message = getExceptionMessage(player, world, worldStage, poiChanges);
if (!message.isEmpty()) { if (!message.isEmpty()) {
oos.close();
fos.close();
restoreBackup(oldFileName, fileName);
announceError(message); announceError(message);
return false; return true;
} }
SaveFileData mainData = new SaveFileData(); SaveFileData mainData = new SaveFileData();
@@ -180,8 +188,11 @@ public class WorldSave {
mainData.store("pointOfInterestChanges", poiChanges); mainData.store("pointOfInterestChanges", poiChanges);
if (mainData.readString("IOException") != null) { if (mainData.readString("IOException") != null) {
oos.close();
fos.close();
restoreBackup(oldFileName, fileName);
announceError("Please check forge.log for errors."); announceError("Please check forge.log for errors.");
return false; return true;
} }
header.saveDate = new Date(); header.saveDate = new Date();
@@ -196,9 +207,20 @@ public class WorldSave {
Config.instance().getSettingData().lastActiveSave = WorldSave.filename(currentSlot); Config.instance().getSettingData().lastActiveSave = WorldSave.filename(currentSlot);
Config.instance().saveSettings(); Config.instance().saveSettings();
if (backupFile.exists())
backupFile.delete();
return true; return true;
} }
public void restoreBackup(String oldFilename, String currentFilename) {
File f = new File(currentFilename);
if (f.exists())
f.delete();
File b = new File(oldFilename);
if (b.exists())
b.renameTo(new File(currentFilename));
}
public String getExceptionMessage(SaveFileData... datas) { public String getExceptionMessage(SaveFileData... datas) {
StringBuilder message = new StringBuilder(); StringBuilder message = new StringBuilder();