From e1877f914946403ce7c995b6a420fd06ec640e8b Mon Sep 17 00:00:00 2001 From: cola98765 Date: Fri, 15 Oct 2021 15:37:51 +0200 Subject: [PATCH] Now using flag bit in data as "is light default" --- .../lod/builders/lodBuilding/LodBuilder.java | 11 +++++++--- .../com/seibel/lod/util/DataPointUtil.java | 20 +++++++++++++------ 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/seibel/lod/builders/lodBuilding/LodBuilder.java b/src/main/java/com/seibel/lod/builders/lodBuilding/LodBuilder.java index 5522be5e6..ecbd58745 100644 --- a/src/main/java/com/seibel/lod/builders/lodBuilding/LodBuilder.java +++ b/src/main/java/com/seibel/lod/builders/lodBuilding/LodBuilder.java @@ -259,6 +259,7 @@ public class LodBuilder yAbs = DataPointUtil.worldHeight + 2; int count = 0; boolean topBlock = true; + boolean isDefault = false; while (yAbs > 0) { height = determineHeightPointFrom(chunk, config, xRel, zRel, yAbs, blockPos); @@ -291,9 +292,9 @@ public class LodBuilder } lightBlock = light & 0b1111; lightSky = (light >> 4) & 0b1111; + if (light >> 8 == 1) isDefault = true; - - dataToMerge[index * verticalData + count] = DataPointUtil.createDataPoint(height, depth, color, lightSky, lightBlock, generation); + dataToMerge[index * verticalData + count] = DataPointUtil.createDataPoint(height, depth, color, lightSky, lightBlock, generation, isDefault); topBlock = false; yAbs = depth - 1; count++; @@ -416,6 +417,7 @@ public class LodBuilder { int skyLight; int blockLight; + int isDefault = 0; if (mc.getClientWorld() == null) return 0; @@ -445,7 +447,10 @@ public class LodBuilder // we don't know what the light here is, // lets just take a guess if (blockPos.getY() >= mc.getClientWorld().getSeaLevel() - 5) + { skyLight = 13; + isDefault = 1; + } else skyLight = 0; } @@ -469,7 +474,7 @@ public class LodBuilder blockLight = world.getBrightness(LightType.BLOCK, blockPos); blockLight = LodUtil.clamp(0, blockLight + blockBrightness, DEFAULT_MAX_LIGHT); - return blockLight + (skyLight << 4); + return blockLight + (skyLight << 4) + (isDefault << 8); } diff --git a/src/main/java/com/seibel/lod/util/DataPointUtil.java b/src/main/java/com/seibel/lod/util/DataPointUtil.java index 6035aec15..bac10326d 100644 --- a/src/main/java/com/seibel/lod/util/DataPointUtil.java +++ b/src/main/java/com/seibel/lod/util/DataPointUtil.java @@ -55,7 +55,7 @@ public class DataPointUtil public final static int SKY_LIGHT_SHIFT = 8; //public final static int LIGHTS_SHIFT = SKY_LIGHT_SHIFT; //public final static int VERTICAL_INDEX_SHIFT = 6; - //public final static int FLAG_SHIFT = 5; + public final static int FLAG_SHIFT = 5; public final static int GEN_TYPE_SHIFT = 2; public final static int VOID_SHIFT = 1; public final static int EXISTENCE_SHIFT = 0; @@ -71,7 +71,7 @@ public class DataPointUtil public final static long BLOCK_LIGHT_MASK = 0b1111; public final static long SKY_LIGHT_MASK = 0b1111; //public final static long VERTICAL_INDEX_MASK = 0b11; - //public final static long FLAG_MASK = 0b1; + public final static long FLAG_MASK = 0b1; public final static long GEN_TYPE_MASK = 0b111; public final static long VOID_MASK = 1; public final static long EXISTENCE_MASK = 1; @@ -86,17 +86,17 @@ public class DataPointUtil return dataPoint; } - public static long createDataPoint(int height, int depth, int color, int lightSky, int lightBlock, int generationMode) + public static long createDataPoint(int height, int depth, int color, int lightSky, int lightBlock, int generationMode, boolean flag) { return createDataPoint( ColorUtil.getAlpha(color), ColorUtil.getRed(color), ColorUtil.getGreen(color), ColorUtil.getBlue(color), - height, depth, lightSky, lightBlock, generationMode); + height, depth, lightSky, lightBlock, generationMode, flag); } - public static long createDataPoint(int alpha, int red, int green, int blue, int height, int depth, int lightSky, int lightBlock, int generationMode) + public static long createDataPoint(int alpha, int red, int green, int blue, int height, int depth, int lightSky, int lightBlock, int generationMode, boolean flag) { long dataPoint = 0; dataPoint += (long) (alpha >>> ALPHA_DOWNSIZE_SHIFT) << ALPHA_SHIFT; @@ -153,6 +153,11 @@ public class DataPointUtil return (int) ((dataPoint >>> BLOCK_LIGHT_SHIFT) & BLOCK_LIGHT_MASK); } + public static boolean getFlag(long dataPoint) + { + return ((dataPoint >>> FLAG_SHIFT) & FLAG_MASK) == 1; + } + public static byte getGenerationMode(long dataPoint) { return (byte) ((dataPoint >>> GEN_TYPE_SHIFT) & GEN_TYPE_MASK); @@ -248,6 +253,7 @@ public class DataPointUtil int genMode = DistanceGenerationMode.SERVER.complexity; boolean allEmpty = true; boolean allVoid = true; + boolean allDefault = true; long singleData; @@ -439,6 +445,7 @@ public class DataPointUtil byte tempGenMode = DistanceGenerationMode.SERVER.complexity; allEmpty = true; allVoid = true; + allDefault = true; long data = 0; for (int index = 0; index < size; index++) @@ -478,6 +485,7 @@ public class DataPointUtil tempBlue += getBlue(data); tempLightBlock += getLightBlock(data); tempLightSky += getLightSky(data); + if (!getFlag(data)) allDefault = false; } tempGenMode = (byte) Math.min(tempGenMode, getGenerationMode(data)); } @@ -500,7 +508,7 @@ public class DataPointUtil tempBlue = tempBlue / numberOfChildren; tempLightBlock = tempLightBlock / numberOfChildren; tempLightSky = tempLightSky / numberOfChildren; - dataPoint[j] = createDataPoint(tempAlpha, tempRed, tempGreen, tempBlue, height, depth, tempLightSky, tempLightBlock, tempGenMode); + dataPoint[j] = createDataPoint(tempAlpha, tempRed, tempGreen, tempBlue, height, depth, tempLightSky, tempLightBlock, tempGenMode, allDefault); } } return dataPoint;