fixed server not overriding lower quality

This commit is contained in:
Leonardo
2021-08-28 13:21:50 +02:00
parent 26fbdfc92c
commit f803bd58af
4 changed files with 10 additions and 57 deletions
@@ -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);
@@ -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"
@@ -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)
{
@@ -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