diff --git a/src/main/java/com/seibel/lod/builders/bufferBuilding/LodBufferBuilder.java b/src/main/java/com/seibel/lod/builders/bufferBuilding/LodBufferBuilder.java index 8ff8b6822..aa8cb3008 100644 --- a/src/main/java/com/seibel/lod/builders/bufferBuilding/LodBufferBuilder.java +++ b/src/main/java/com/seibel/lod/builders/bufferBuilding/LodBufferBuilder.java @@ -361,7 +361,7 @@ public class LodBufferBuilder && (!LodUtil.isBorderChunk(vanillaRenderedChunks, chunkXdist + gameChunkRenderDistance + 1, chunkZdist + gameChunkRenderDistance + 1) || smallRenderDistance) && vanillaRenderedChunks[chunkXdist + gameChunkRenderDistance + 1][chunkZdist + gameChunkRenderDistance + 1] && !DataPointUtil.isVoid(lodDim.getSingleData(detailLevel, xAdj, zAdj))) - adjShadeDisabled[Box.DIRECTION_INDEX.get(direction)] = true; + adjShadeDisabled[Box.DIRECTION_INDEX.get(direction)] = DataPointUtil.getAlpha(lodDim.getSingleData(detailLevel, xAdj, zAdj)) < 255; adjData.get(direction)[0] = DataPointUtil.EMPTY_DATA; } } diff --git a/src/main/java/com/seibel/lod/handlers/LodDimensionFileHandler.java b/src/main/java/com/seibel/lod/handlers/LodDimensionFileHandler.java index 4738c9646..12f9b4822 100644 --- a/src/main/java/com/seibel/lod/handlers/LodDimensionFileHandler.java +++ b/src/main/java/com/seibel/lod/handlers/LodDimensionFileHandler.java @@ -46,7 +46,7 @@ import java.util.concurrent.Executors; public class LodDimensionFileHandler { /** This is the dimension that owns this file handler */ - private LodDimension lodDimension = null; + private LodDimension lodDimension; private final File dimensionDataSaveFolder; @@ -118,14 +118,30 @@ public class LodDimensionFileHandler if (fileName == null) throw new IllegalArgumentException("Unable to read region [" + regionX + ", " + regionZ + "] file, no fileName."); - File file = new File(fileName); - if (!file.exists()) { - // there wasn't a file, don't - // return anything - continue; + //there is no file for current gen mode + //search others above current from the most to the least detailed + DistanceGenerationMode tempGenMode = DistanceGenerationMode.SERVER; + while (tempGenMode != generationMode) + { + fileName = getFileNameAndPathForRegion(regionX, regionZ, tempGenMode, tempDetailLevel, verticalQuality); + if (fileName != null) + { + file = new File(fileName); + if (file.exists()) break; + } + //decrease gen mode + if (tempGenMode == DistanceGenerationMode.SERVER) tempGenMode = DistanceGenerationMode.FEATURES; + else if (tempGenMode == DistanceGenerationMode.FEATURES) tempGenMode = DistanceGenerationMode.SURFACE; + else if (tempGenMode == DistanceGenerationMode.SURFACE) tempGenMode = DistanceGenerationMode.BIOME_ONLY_SIMULATE_HEIGHT; + else if (tempGenMode == DistanceGenerationMode.BIOME_ONLY_SIMULATE_HEIGHT) tempGenMode = DistanceGenerationMode.BIOME_ONLY; + else if (tempGenMode == DistanceGenerationMode.BIOME_ONLY) tempGenMode = DistanceGenerationMode.NONE; + } + if (!file.exists()) + //there wasn't a file, don't return anything + continue; } @@ -137,7 +153,7 @@ public class LodDimensionFileHandler { try (InputStream inputStream = new BufferedInputStream(new FileInputStream(file))) { - int fileVersion = -1; + int fileVersion; fileVersion = inputStream.read(); // check if this file can be read by this file handler @@ -249,7 +265,6 @@ public class LodDimensionFileHandler for (byte detailLevel = region.getMinDetailLevel(); detailLevel <= LodUtil.REGION_DETAIL_LEVEL; detailLevel++) { String fileName = getFileNameAndPathForRegion(region.regionPosX, region.regionPosZ, region.getGenerationMode(), detailLevel, region.getVerticalQuality()); - File oldFile = new File(fileName); // if the fileName was null that means the folder is inaccessible // for some reason @@ -258,6 +273,7 @@ public class LodDimensionFileHandler ClientProxy.LOGGER.warn("Unable to save region [" + region.regionPosX + ", " + region.regionPosZ + "] to file, file is inaccessible."); return; } + File oldFile = new File(fileName); //ClientProxy.LOGGER.info("saving region [" + region.regionPosX + ", " + region.regionPosZ + "] to file."); try diff --git a/src/main/java/com/seibel/lod/util/LodUtil.java b/src/main/java/com/seibel/lod/util/LodUtil.java index bef53ec50..5e02aba62 100644 --- a/src/main/java/com/seibel/lod/util/LodUtil.java +++ b/src/main/java/com/seibel/lod/util/LodUtil.java @@ -403,7 +403,7 @@ public class LodUtil case DYNAMIC: // only skip positions that are greater than // half the render distance - skipRadius = (int) Math.ceil(chunkRenderDist / 2.0); + skipRadius = (int) Math.ceil(chunkRenderDist * 4 / 5); break; default: