diff --git a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/sources/FullDataSourceV2.java b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/sources/FullDataSourceV2.java index bbac771da..0094ac3e3 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/sources/FullDataSourceV2.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/sources/FullDataSourceV2.java @@ -174,25 +174,21 @@ public class FullDataSourceV2 implements IDataSource { long dataPoint = legacyDataColumn[i]; - int id = FullDataPointUtil.getId(dataPoint); - int height = FullDataPointUtil.getHeight(dataPoint); - int bottomY = FullDataPointUtil.getBottomY(dataPoint); + boolean isAir = legacyData.mapping.getBlockStateWrapper(FullDataPointUtil.getId(dataPoint)).isAir; byte blockLight = (byte) FullDataPointUtil.getBlockLight(dataPoint); - byte skyLight = (byte) FullDataPointUtil.getSkyLight(dataPoint); - - IBlockStateWrapper blockState = legacyData.mapping.getBlockStateWrapper(id); - if (blockState.isAir()) + + if (isAir) { // air shouldn't have any light, otherwise down sampling will look weird blockLight = 0; } - long newDataPoint = FullDataPointUtil.encode(id, height, bottomY, blockLight, skyLight); - newDataColumn.set(i, newDataPoint); + dataPoint = FullDataPointUtil.setBlockLight(dataPoint, blockLight); + newDataColumn.set(i, dataPoint); // check if this datapoint is air - if (!columnHasNonAirBlock && !blockState.isAir()) + if (!columnHasNonAirBlock && !isAir) { columnHasNonAirBlock = true; } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/util/FullDataPointUtil.java b/core/src/main/java/com/seibel/distanthorizons/core/util/FullDataPointUtil.java index a1eb81042..d0daabab5 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/util/FullDataPointUtil.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/util/FullDataPointUtil.java @@ -127,6 +127,10 @@ public class FullDataPointUtil */ public static int getBottomY(long data) { return (int) ((data >> MIN_Y_OFFSET) & MIN_Y_MASK); } public static int getBlockLight(long data) { return (int) ((data >> BLOCK_LIGHT_OFFSET) & BLOCK_LIGHT_MASK); } + public static long setBlockLight(long data, byte blockLight) + { + return (data & ~((long) BLOCK_LIGHT_MASK << BLOCK_LIGHT_OFFSET) | (long) blockLight << BLOCK_LIGHT_OFFSET); + } public static int getSkyLight(long data) { return (int) ((data >> SKY_LIGHT_OFFSET) & SKY_LIGHT_MASK); }