From f803bd58af1abe3d9bf87a14d4c508fd4629a91c Mon Sep 17 00:00:00 2001 From: Leonardo Date: Sat, 28 Aug 2021 13:21:50 +0200 Subject: [PATCH] fixed server not overriding lower quality --- .../com/seibel/lod/builders/LodBuilder.java | 5 +- .../com/seibel/lod/handlers/LodConfig.java | 2 +- .../com/seibel/lod/objects/LodDimension.java | 4 +- .../com/seibel/lod/objects/LodRegion.java | 56 +------------------ 4 files changed, 10 insertions(+), 57 deletions(-) diff --git a/src/main/java/com/seibel/lod/builders/LodBuilder.java b/src/main/java/com/seibel/lod/builders/LodBuilder.java index 1348187e2..a86f858be 100644 --- a/src/main/java/com/seibel/lod/builders/LodBuilder.java +++ b/src/main/java/com/seibel/lod/builders/LodBuilder.java @@ -46,6 +46,7 @@ import net.minecraft.world.biome.Biome; import net.minecraft.world.chunk.ChunkSection; import net.minecraft.world.chunk.IChunk; import net.minecraft.world.gen.Heightmap; +import org.lwjgl.system.CallbackI; /** * This object is in charge of creating Lod related objects. (specifically: Lod @@ -190,10 +191,12 @@ public class LodBuilder chunk.getPos().x * 16 + startX, chunk.getPos().z * 16 + startZ); levelPos.convert(detail.detailLevel); + boolean isServer = config.distanceGenerationMode == DistanceGenerationMode.SERVER; data = DataPoint.createDataPoint(height, depth, color[0], color[1], color[2]); lodDim.addData(levelPos, data, - false); + false, + isServer); } //levelPos.changeParameters(LodUtil.CHUNK_DETAIL_LEVEL, chunk.getPos().x, chunk.getPos().z); diff --git a/src/main/java/com/seibel/lod/handlers/LodConfig.java b/src/main/java/com/seibel/lod/handlers/LodConfig.java index 603457a2d..6f5c151f0 100644 --- a/src/main/java/com/seibel/lod/handlers/LodConfig.java +++ b/src/main/java/com/seibel/lod/handlers/LodConfig.java @@ -173,7 +173,7 @@ public class LodConfig lodChunkRenderDistance = builder .comment("\n\n" + " This is the render distance of the mod \n") - .defineInRange("lodChunkRenderDistane", 128, 32, 512); + .defineInRange("lodChunkRenderDistane", 128, 32, 256); distanceGenerationMode = builder .comment("\n\n" diff --git a/src/main/java/com/seibel/lod/objects/LodDimension.java b/src/main/java/com/seibel/lod/objects/LodDimension.java index 9881c4e13..affc09988 100644 --- a/src/main/java/com/seibel/lod/objects/LodDimension.java +++ b/src/main/java/com/seibel/lod/objects/LodDimension.java @@ -431,7 +431,7 @@ public class LodDimension * stored in the LOD. If an LOD already exists at the given * coordinates it will be overwritten. */ - public synchronized Boolean addData(LevelPos levelPos, short[] lodDataPoint, boolean dontSave) + public synchronized Boolean addData(LevelPos levelPos, short[] lodDataPoint, boolean dontSave, boolean serverQuality) { // don't continue if the region can't be saved @@ -443,7 +443,7 @@ public class LodDimension LodRegion region = getRegion(levelPos); - boolean nodeAdded = region.addData(levelPos, lodDataPoint); + boolean nodeAdded = region.addData(levelPos, lodDataPoint, serverQuality); // only save valid LODs to disk if (!dontSave && fileHandler != null) { diff --git a/src/main/java/com/seibel/lod/objects/LodRegion.java b/src/main/java/com/seibel/lod/objects/LodRegion.java index 0aa5e3d52..cb2fc8c87 100644 --- a/src/main/java/com/seibel/lod/objects/LodRegion.java +++ b/src/main/java/com/seibel/lod/objects/LodRegion.java @@ -41,6 +41,7 @@ public class LodRegion implements Serializable private boolean[][][] dataExistence; + public final int regionPosX; public final int regionPosZ; @@ -124,10 +125,10 @@ public class LodRegion implements Serializable * @param dataPoint * @return */ - public boolean addData(LevelPos levelPos, short[] dataPoint) + public boolean addData(LevelPos levelPos, short[] dataPoint, boolean serverQuality) { levelPos.performRegionModule(); - if (!doesDataExist(levelPos)) + if (!doesDataExist(levelPos) || serverQuality) { //update the number of node present @@ -147,25 +148,6 @@ public class LodRegion implements Serializable } } - - public short[] getData(ChunkPos chunkPos) - { - return getData(new LevelPos(LodUtil.CHUNK_DETAIL_LEVEL, chunkPos.x, chunkPos.z)); - } - - /** - * This method will return the data in the position relative to the level of detail - * - * @param lod - * @return the data at the relative pos and level - */ - public short[] getData(byte lod, BlockPos blockPos) - { - int posX = Math.floorMod(blockPos.getX(), (int) Math.pow(2, lod)); - int posZ = Math.floorMod(blockPos.getZ(), (int) Math.pow(2, lod)); - return getData(new LevelPos(lod, posX, posZ)); - } - /** * This method will return the data in the position relative to the level of detail * @@ -458,38 +440,6 @@ public class LodRegion implements Serializable } } - /** - * @param levelPos - * @return - */ - private boolean[][] getChildren(LevelPos levelPos) - { - levelPos = levelPos.getRegionModuleLevelPos(); - boolean[][] children = new boolean[2][2]; - int numberOfChild = 0; - if (minDetailLevel == levelPos.detailLevel) - { - return children; - } - for (int x = 0; x <= 1; x++) - { - for (int z = 0; z <= 1; z++) - { - children[x][z] = (dataExistence[levelPos.detailLevel - 1][2 * levelPos.posX + x][2 * levelPos.posZ + z]); - } - } - return children; - } - - /** - * @param chunkPos - * @return - */ - public boolean doesDataExist(ChunkPos chunkPos) - { - return doesDataExist(new LevelPos(LodUtil.CHUNK_DETAIL_LEVEL, chunkPos.x, chunkPos.z)); - } - /** * @param levelPos * @return