From d7bd0498a0fc39c78e4edfa8c8a501f574d58dd3 Mon Sep 17 00:00:00 2001 From: cola98765 Date: Tue, 12 Oct 2021 11:58:21 +0200 Subject: [PATCH 1/2] When there are no files for current gen mode, try to load more detailed ones instead. --- .../lod/handlers/LodDimensionFileHandler.java | 32 ++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) 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 From d16f571467727c78c4a4d5be28c53bcf2d259a93 Mon Sep 17 00:00:00 2001 From: Leonardo Date: Tue, 12 Oct 2021 17:12:31 +0200 Subject: [PATCH 2/2] Small changed to border shading + changed overdraw ratio --- .../seibel/lod/builders/bufferBuilding/LodBufferBuilder.java | 2 +- src/main/java/com/seibel/lod/util/LodUtil.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 1e4db9419..eede7e35a 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/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: