(String text, int currentSlot)
| 155 | } |
| 156 | |
| 157 | public boolean save(String text, int currentSlot) { |
| 158 | header.name = text; |
| 159 | |
| 160 | String fileName = WorldSave.getSaveFile(currentSlot); |
| 161 | String oldFileName = fileName.replace(".sav", ".old"); |
| 162 | new File(getSaveDir()).mkdirs(); |
| 163 | File currentFile = new File(fileName); |
| 164 | File backupFile = new File(oldFileName); |
| 165 | if (currentFile.exists()) |
| 166 | currentFile.renameTo(backupFile); |
| 167 | |
| 168 | try { |
| 169 | try (FileOutputStream fos = new FileOutputStream(fileName); |
| 170 | DeflaterOutputStream def = new DeflaterOutputStream(fos); |
| 171 | ObjectOutputStream oos = new ObjectOutputStream(def)) { |
| 172 | SaveFileData player = currentSave.player.save(); |
| 173 | SaveFileData world = currentSave.world.save(); |
| 174 | SaveFileData worldStage = WorldStage.getInstance().save(); |
| 175 | SaveFileData poiChanges = currentSave.pointOfInterestChanges.save(); |
| 176 | |
| 177 | String message = getExceptionMessage(player, world, worldStage, poiChanges); |
| 178 | if (!message.isEmpty()) { |
| 179 | oos.close(); |
| 180 | fos.close(); |
| 181 | restoreBackup(oldFileName, fileName); |
| 182 | announceError(message); |
| 183 | return true; |
| 184 | } |
| 185 | |
| 186 | SaveFileData mainData = new SaveFileData(); |
| 187 | mainData.store("player", player); |
| 188 | mainData.store("world", world); |
| 189 | mainData.store("worldStage", worldStage); |
| 190 | mainData.store("pointOfInterestChanges", poiChanges); |
| 191 | |
| 192 | if (mainData.readString("IOException") != null) { |
| 193 | oos.close(); |
| 194 | fos.close(); |
| 195 | restoreBackup(oldFileName, fileName); |
| 196 | announceError("Please check forge.log for errors."); |
| 197 | return true; |
| 198 | } |
| 199 | |
| 200 | header.saveDate = new Date(); |
| 201 | oos.writeObject(header); |
| 202 | oos.writeObject(mainData); |
| 203 | } |
| 204 | |
| 205 | } catch (IOException e) { |
| 206 | restoreBackup(oldFileName, fileName); |
| 207 | announceError("Please check forge.log for errors."); |
| 208 | return true; |
| 209 | } |
| 210 | |
| 211 | Config.instance().getSettingData().lastActiveSave = WorldSave.filename(currentSlot); |
| 212 | Config.instance().saveSettings(); |
| 213 | if (backupFile.exists()) |
| 214 | backupFile.delete(); |
no test coverage detected