From cddd239fc57830da9cfcbc6260ada3e5a4f47cec Mon Sep 17 00:00:00 2001 From: Leonardo Date: Tue, 24 Aug 2021 14:58:22 +0200 Subject: [PATCH] Introduced try and catch were needed and fixed some small bugs --- .../com/seibel/lod/objects/LodDimension.java | 84 ++++++++++++------- .../com/seibel/lod/objects/LodRegion.java | 1 + .../com/seibel/lod/proxy/ClientProxy.java | 12 +-- 3 files changed, 61 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/seibel/lod/objects/LodDimension.java b/src/main/java/com/seibel/lod/objects/LodDimension.java index 38210bedc..f54f9c4d9 100644 --- a/src/main/java/com/seibel/lod/objects/LodDimension.java +++ b/src/main/java/com/seibel/lod/objects/LodDimension.java @@ -313,7 +313,6 @@ public class LodDimension int regionX; int regionZ; LevelPos levelPos; - LodRegion region; for (int x = 0; x < regions.length; x++) { @@ -327,13 +326,14 @@ public class LodDimension //if this is not the case w for(byte index = LodUtil.BLOCK_DETAIL_LEVEL; index <= LodUtil.REGION_DETAIL_LEVEL; index++){ if(DetailDistanceUtil.getDistanceCut(index + 1) > levelPos.minDistance(playerPosX, playerPosZ)){ - region = regions[x][z]; byte cutDetailLevel = DetailDistanceUtil.getCutLodDetail(index).detailLevel; - if(region != null && cutDetailLevel > 0) + if(regions[x][z] != null) { - region.cutTree(cutDetailLevel); + if(regions[x][z].getMinDetailLevel() > cutDetailLevel){ + regions[x][z].cutTree(cutDetailLevel); + } } //once we break; @@ -466,15 +466,20 @@ public class LodDimension { for (int zRegion = 0; zRegion < n; zRegion++) { - xIndex = (xRegion + center.x) - halfWidth; - zIndex = (zRegion + center.z) - halfWidth; - regionPos = new RegionPos(xIndex, zIndex); - regionLevelPos = new LevelPos(LodUtil.REGION_DETAIL_LEVEL, regionPos.x, regionPos.z); - if(end >= regionLevelPos.minDistance(playerPosX, playerPosZ) && - start <= regionLevelPos.maxDistance(playerPosX, playerPosZ)) + try { - region = getRegion(new LevelPos(LodUtil.REGION_DETAIL_LEVEL, regionPos.x, regionPos.z).convert(detailLevel)); - listOfData.addAll(region.getDataToGenerate(playerPosX, playerPosZ, start, end, generation, detailLevel, dataNumber)); + xIndex = (xRegion + center.x) - halfWidth; + zIndex = (zRegion + center.z) - halfWidth; + regionPos = new RegionPos(xIndex, zIndex); + regionLevelPos = new LevelPos(LodUtil.REGION_DETAIL_LEVEL, regionPos.x, regionPos.z); + if (end >= regionLevelPos.minDistance(playerPosX, playerPosZ) && + start <= regionLevelPos.maxDistance(playerPosX, playerPosZ)) + { + region = getRegion(new LevelPos(LodUtil.REGION_DETAIL_LEVEL, regionPos.x, regionPos.z).convert(detailLevel)); + listOfData.addAll(region.getDataToGenerate(playerPosX, playerPosZ, start, end, generation, detailLevel, dataNumber)); + } + }catch (Exception e){ + //e.printStackTrace(); } } } @@ -510,15 +515,21 @@ public class LodDimension { for (int zRegion = 0; zRegion < n; zRegion++) { - xIndex = (xRegion + center.x) - halfWidth; - zIndex = (zRegion + center.z) - halfWidth; - regionPos = new RegionPos(xIndex, zIndex); - regionLevelPos = new LevelPos(LodUtil.REGION_DETAIL_LEVEL, regionPos.x, regionPos.z); - if(end >= regionLevelPos.minDistance(playerPosX, playerPosZ) && - start <= regionLevelPos.maxDistance(playerPosX, playerPosZ)) + try { - region = getRegion(new LevelPos(LodUtil.REGION_DETAIL_LEVEL, regionPos.x, regionPos.z).convert(detailLevel)); - listOfData.addAll(region.getDataToRender(playerPosX, playerPosZ, start, end, detailLevel)); + xIndex = (xRegion + center.x) - halfWidth; + zIndex = (zRegion + center.z) - halfWidth; + regionPos = new RegionPos(xIndex, zIndex); + regionLevelPos = new LevelPos(LodUtil.REGION_DETAIL_LEVEL, regionPos.x, regionPos.z); + if (end >= regionLevelPos.minDistance(playerPosX, playerPosZ) && + start <= regionLevelPos.maxDistance(playerPosX, playerPosZ)) + { + region = getRegion(new LevelPos(LodUtil.REGION_DETAIL_LEVEL, regionPos.x, regionPos.z).convert(detailLevel)); + listOfData.addAll(region.getDataToRender(playerPosX, playerPosZ, start, end, detailLevel)); + } + }catch (Exception e) + { + //e.printStackTrace(); } } } @@ -534,13 +545,21 @@ public class LodDimension { List listOfData = new ArrayList<>(); LevelPos regionLevelPos = new LevelPos(LodUtil.REGION_DETAIL_LEVEL, regionPos.x, regionPos.z); - if(end >= regionLevelPos.minDistance(playerPosX, playerPosZ) && - start <= regionLevelPos.maxDistance(playerPosX, playerPosZ)) + try { - LodRegion region = getRegion(new LevelPos(LodUtil.REGION_DETAIL_LEVEL, regionPos.x, regionPos.z).convert(detailLevel)); - listOfData.addAll(region.getDataToRender(playerPosX, playerPosZ, start, end, detailLevel)); + if (end >= regionLevelPos.minDistance(playerPosX, playerPosZ) && + start <= regionLevelPos.maxDistance(playerPosX, playerPosZ)) + { + LodRegion region = getRegion(new LevelPos(LodUtil.REGION_DETAIL_LEVEL, regionPos.x, regionPos.z).convert(detailLevel)); + listOfData.addAll(region.getDataToRender(playerPosX, playerPosZ, start, end, detailLevel)); + } + }catch (Exception e){ + //e.printStackTrace(); + }finally + { + + return listOfData; } - return listOfData; } /** @@ -610,14 +629,19 @@ public class LodDimension */ public boolean doesDataExist(LevelPos levelPos) { - LodRegion region = getRegion(levelPos); - - if (region == null) + try { + LodRegion region = getRegion(levelPos); + + if (region == null) + { + return false; + } + + return region.doesDataExist(levelPos); + }catch (Exception e){ return false; } - - return region.doesDataExist(levelPos); } /** diff --git a/src/main/java/com/seibel/lod/objects/LodRegion.java b/src/main/java/com/seibel/lod/objects/LodRegion.java index 7b337d8d0..af6a28f42 100644 --- a/src/main/java/com/seibel/lod/objects/LodRegion.java +++ b/src/main/java/com/seibel/lod/objects/LodRegion.java @@ -632,6 +632,7 @@ public class LodRegion implements Serializable generationType[tempLod] = new byte[size][size]; dataExistence[tempLod] = new boolean[size][size]; } + minDetailLevel = detailLevel; } } diff --git a/src/main/java/com/seibel/lod/proxy/ClientProxy.java b/src/main/java/com/seibel/lod/proxy/ClientProxy.java index 4113f3bfc..d44ab6a7f 100644 --- a/src/main/java/com/seibel/lod/proxy/ClientProxy.java +++ b/src/main/java/com/seibel/lod/proxy/ClientProxy.java @@ -72,7 +72,7 @@ public class ClientProxy /** can be set if we want to recalculate variables related * to the LOD view distance */ private boolean recalculateWidths = false; - + public ClientProxy() { @@ -104,10 +104,10 @@ public class ClientProxy playerMoveEvent(lodDim); //System.out.println("memory needed " + lodDim.getMinMemoryNeeded() + " byte"); + //System.out.println(lodDim); lodDim.treeCutter((int) mc.player.getX(),(int) mc.player.getZ()); lodDim.treeGenerator((int) mc.player.getX(),(int) mc.player.getZ()); - // comment out when creating a release @@ -143,8 +143,8 @@ public class ClientProxy // LodConfig.CLIENT.drawLODs.set(true); LodConfig.CLIENT.debugMode.set(false); - LodConfig.CLIENT.maxDrawDetail.set(LodDetail.SINGLE); - LodConfig.CLIENT.maxGenerationDetail.set(LodDetail.SINGLE); + LodConfig.CLIENT.maxDrawDetail.set(LodDetail.FULL); + LodConfig.CLIENT.maxGenerationDetail.set(LodDetail.FULL); LodConfig.CLIENT.fogDistance.set(FogDistance.FAR); LodConfig.CLIENT.fogDrawOverride.set(FogDrawOverride.ALWAYS_DRAW_FOG_FANCY); @@ -155,10 +155,10 @@ public class ClientProxy LodConfig.CLIENT.distanceGenerationMode.set(DistanceGenerationMode.SURFACE); LodConfig.CLIENT.allowUnstableFeatureGeneration.set(false); LodConfig.CLIENT.lodChunkRenderDistance.set(512); - LodConfig.CLIENT.lodDistanceCalculatorType.set(DistanceCalculatorType.QUADRATIC); + LodConfig.CLIENT.lodDistanceCalculatorType.set(DistanceCalculatorType.LINEAR); LodConfig.CLIENT.lodQuality.set(2); LodConfig.CLIENT.allowUnstableFeatureGeneration.set(false); - LodConfig.CLIENT.numberOfWorldGenerationThreads.set(12); + LodConfig.CLIENT.numberOfWorldGenerationThreads.set(8); // has to be set in the config file // LodConfig.CLIENT.numberOfWorldGenerationThreads.set(16);