diff --git a/src/main/java/com/seibel/lod/core/builders/bufferBuilding/CubicLodTemplate.java b/src/main/java/com/seibel/lod/core/builders/bufferBuilding/CubicLodTemplate.java index acb7ef07c..a463d4a28 100644 --- a/src/main/java/com/seibel/lod/core/builders/bufferBuilding/CubicLodTemplate.java +++ b/src/main/java/com/seibel/lod/core/builders/bufferBuilding/CubicLodTemplate.java @@ -77,7 +77,7 @@ public class CubicLodTemplate float x, float y, float z, int color, byte skyLightValue, byte blockLightValue) { - // TODO re-add transparency by replacing the color 255 with "ColorUtil.getAlpha(color)" + // TODO transparency re-add by replacing the color 255 with "ColorUtil.getAlpha(color)" buffer.position(x, y, z) .color(ColorUtil.getRed(color), ColorUtil.getGreen(color), ColorUtil.getBlue(color), 255) .minecraftLightValue(skyLightValue).minecraftLightValue(blockLightValue) diff --git a/src/main/java/com/seibel/lod/core/builders/lodBuilding/LodBuilder.java b/src/main/java/com/seibel/lod/core/builders/lodBuilding/LodBuilder.java index c2305e5d3..80913a501 100644 --- a/src/main/java/com/seibel/lod/core/builders/lodBuilding/LodBuilder.java +++ b/src/main/java/com/seibel/lod/core/builders/lodBuilding/LodBuilder.java @@ -296,15 +296,21 @@ public class LodBuilder { short depth = 0; - IBlockColorWrapper blockColorWrapper; int colorOfBlock = 0; if (strictEdge) { - blockColorWrapper = chunk.getBlockColorWrapper(xAbs, yAbs, zAbs); - colorOfBlock = blockColorWrapper.getColor(); + colorOfBlock = chunk.getBlockColorWrapper(xAbs, yAbs, zAbs).getColor(); + IBlockShapeWrapper block = chunk.getBlockShapeWrapper(xAbs, yAbs + 1, zAbs); + if (block != null && ((this.config.client().worldGenerator().getBlocksToAvoid().nonFull && block.isNonFull()) + || (this.config.client().worldGenerator().getBlocksToAvoid().noCollision && block.hasNoCollision()))) + { + int aboveColorInt = chunk.getBlockColorWrapper(xAbs, yAbs + 1, zAbs).getColor(); + if (aboveColorInt != 0) + colorOfBlock = aboveColorInt; + } } - for (int y = yAbs; y >= 0; y--) + for (int y = yAbs - 1; y >= 0; y--) { if (!isLayerValidLodPoint(chunk, xAbs, y, zAbs)) @@ -314,8 +320,7 @@ public class LodBuilder } if (strictEdge) { - blockColorWrapper = chunk.getBlockColorWrapper(xAbs, y, zAbs); - if (colorOfBlock != blockColorWrapper.getColor()) + if (colorOfBlock != chunk.getBlockColorWrapper(xAbs, y, zAbs).getColor()) { depth = (short) (y + 1); break; diff --git a/src/main/java/com/seibel/lod/core/objects/VertexOptimizer.java b/src/main/java/com/seibel/lod/core/objects/VertexOptimizer.java index a6cfd59b4..e88936592 100644 --- a/src/main/java/com/seibel/lod/core/objects/VertexOptimizer.java +++ b/src/main/java/com/seibel/lod/core/objects/VertexOptimizer.java @@ -352,13 +352,18 @@ public class VertexOptimizer boolean toFinish = false; int toFinishIndex = 0; boolean allAbove = true; + // TODO transparency ocean floor fix + //boolean isOpaque = ((colorMap[0] >> 24) & 0xFF) == 255; for (i = 0; i < dataPoint.length; i++) { singleAdjDataPoint = dataPoint[i]; - if (DataPointUtil.isVoid(singleAdjDataPoint) || !DataPointUtil.doesItExist(singleAdjDataPoint)) break; + // TODO transparency ocean floor fix + //if (isOpaque && DataPointUtil.getAlpha(singleAdjDataPoint) != 255) + // continue; + height = DataPointUtil.getHeight(singleAdjDataPoint); depth = DataPointUtil.getDepth(singleAdjDataPoint); diff --git a/src/main/java/com/seibel/lod/core/util/DataPointUtil.java b/src/main/java/com/seibel/lod/core/util/DataPointUtil.java index 20a837d09..e11b00d71 100644 --- a/src/main/java/com/seibel/lod/core/util/DataPointUtil.java +++ b/src/main/java/com/seibel/lod/core/util/DataPointUtil.java @@ -213,7 +213,7 @@ public class DataPointUtil public static int getColor(long dataPoint) { // TODO re-add transparency by replacing the color 255 with what is in comment - return (int) (((dataPoint >>> COLOR_SHIFT) & COLOR_MASK) | /*((((dataPoint >>> ALPHA_SHIFT) & ALPHA_MASK) << ALPHA_DOWNSIZE_SHIFT) | 0b1111)*/ 255 << 24); + return (int) (((dataPoint >>> COLOR_SHIFT) & COLOR_MASK) | ((((dataPoint >>> ALPHA_SHIFT) & ALPHA_MASK) << ALPHA_DOWNSIZE_SHIFT) | 0b1111) << 24); } /** This is used to convert a dataPoint to string (useful for the print function) */