diff --git a/src/main/java/com/seibel/lod/core/handlers/LodDimensionFileHandler.java b/src/main/java/com/seibel/lod/core/handlers/LodDimensionFileHandler.java index d3b61c8a6..515b2186a 100644 --- a/src/main/java/com/seibel/lod/core/handlers/LodDimensionFileHandler.java +++ b/src/main/java/com/seibel/lod/core/handlers/LodDimensionFileHandler.java @@ -458,8 +458,10 @@ public class LodDimensionFileHandler if (!isStarted) throw new ConcurrentModificationException("WriterMain Triggered but the thead state is not started!?"); + if (ENABLE_SAVE_THREAD_LOGGING) ApiShared.LOGGER.info("Lod File Writer started. To-be-written-regions: " + regionToSave.size()); + Instant start = Instant.now(); // Note: Since regionToSave is a ConcurrentHashMap, and the .values() return one that support concurrency, // this for loop should be safe and loop until all values are gone. @@ -496,8 +498,10 @@ public class LodDimensionFileHandler } } Instant end = Instant.now(); + if (ENABLE_SAVE_THREAD_LOGGING) ApiShared.LOGGER.info("Lod File Writer completed. Took " + Duration.between(start, end)); + // Use Memory order Release to release any memory changes on setting this boolean // (Corresponding call is the this::saveRegions(...)::...compareAndExchangeAcquire(false, true);) // isFileWritingThreadRunning.setRelease(false); @@ -530,6 +534,7 @@ public class LodDimensionFileHandler // create it and the folder if need be if (!oldFile.getParentFile().exists()) oldFile.getParentFile().mkdirs(); + try { oldFile.createNewFile(); @@ -627,16 +632,11 @@ public class LodDimensionFileHandler //================// /** - * Return the name of the file that should contain the - * region at the given x and z.
- * Returns null if this object isn't available to read and write.

- *

- * example: "lod.0.0.txt"
- *

- * Returns null if there is an IO or security Exception. + * Returns the save folder used for this dimension. + * + * @throws RuntimeException if there was an error getting the folder */ - - private String getFileBasePath() + private String getFileBasePath() throws RuntimeException { try { @@ -650,6 +650,15 @@ public class LodDimensionFileHandler } } + /** + * Return the name of the file that should contain the + * region at the given x and z.
+ * Returns null if this object isn't available to read and write.

+ *

+ * example: "lod.0.0.txt"
+ *

+ * Returns null if there is an IO or security Exception. + */ private File getRegionFile(int regionX, int regionZ, byte detail, VerticalQuality vertQuality) { return new File(getFileBasePath() + vertQuality + File.separatorChar + @@ -657,7 +666,7 @@ public class LodDimensionFileHandler FILE_NAME_PREFIX + "." + regionX + "." + regionZ + FILE_EXTENSION); } - // Return null if no file found + /** Returns null if no file is found */ private File getBestMatchingRegionFile(byte detailLevel, int regionX, int regionZ, VerticalQuality targetVertQuality) { // Search from least vertQuality to max vertQuality @@ -666,9 +675,11 @@ public class LodDimensionFileHandler File file = getRegionFile(regionX, regionZ, detailLevel, targetVertQuality); if (file.exists()) return file; // Found target file. + targetVertQuality = VerticalQuality.next(targetVertQuality); } while (targetVertQuality != null); + return null; }