diff --git a/core/src/main/java/com/seibel/distanthorizons/core/api/external/methods/data/DhApiTerrainDataRepo.java b/core/src/main/java/com/seibel/distanthorizons/core/api/external/methods/data/DhApiTerrainDataRepo.java index d922064f4..e3f4f5210 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/api/external/methods/data/DhApiTerrainDataRepo.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/api/external/methods/data/DhApiTerrainDataRepo.java @@ -32,7 +32,7 @@ import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; import com.seibel.distanthorizons.core.level.IDhLevel; import com.seibel.distanthorizons.core.pos.DhLodPos; import com.seibel.distanthorizons.core.pos.DhSectionPos; -import com.seibel.distanthorizons.core.util.FullDataPointUtilV2; +import com.seibel.distanthorizons.core.util.FullDataPointUtil; import com.seibel.distanthorizons.core.util.LodUtil; import com.seibel.distanthorizons.core.util.RayCastUtil; import com.seibel.distanthorizons.core.world.AbstractDhWorld; @@ -249,8 +249,8 @@ public class DhApiTerrainDataRepo implements IDhApiTerrainDataRepo if (dataPoint != 0) { int requestedY = nullableBlockYPos; - int bottomY = FullDataPointUtilV2.getBottomY(dataPoint) + levelMinimumHeight; - int height = FullDataPointUtilV2.getHeight(dataPoint); + int bottomY = FullDataPointUtil.getBottomY(dataPoint) + levelMinimumHeight; + int height = FullDataPointUtil.getHeight(dataPoint); int topY = bottomY + height; // does this datapoint contain the requested Y position? @@ -282,15 +282,15 @@ public class DhApiTerrainDataRepo implements IDhApiTerrainDataRepo private static DhApiTerrainDataPoint generateApiDatapoint(IDhApiLevelWrapper levelWrapper, FullDataPointIdMap mapping, byte detailLevel, long dataPoint) { - IBlockStateWrapper blockState = mapping.getBlockStateWrapper(FullDataPointUtilV2.getId(dataPoint)); - IBiomeWrapper biomeWrapper = mapping.getBiomeWrapper(FullDataPointUtilV2.getId(dataPoint)); + IBlockStateWrapper blockState = mapping.getBlockStateWrapper(FullDataPointUtil.getId(dataPoint)); + IBiomeWrapper biomeWrapper = mapping.getBiomeWrapper(FullDataPointUtil.getId(dataPoint)); - int bottomY = FullDataPointUtilV2.getBottomY(dataPoint) + levelWrapper.getMinHeight(); - int height = FullDataPointUtilV2.getHeight(dataPoint); + int bottomY = FullDataPointUtil.getBottomY(dataPoint) + levelWrapper.getMinHeight(); + int height = FullDataPointUtil.getHeight(dataPoint); int topY = bottomY + height; return new DhApiTerrainDataPoint(detailLevel, - FullDataPointUtilV2.getBlockLight(dataPoint), FullDataPointUtilV2.getSkyLight(dataPoint), + FullDataPointUtil.getBlockLight(dataPoint), FullDataPointUtil.getSkyLight(dataPoint), topY, bottomY, blockState, biomeWrapper); } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/sources/FullDataSourceV1.java b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/sources/FullDataSourceV1.java index 1505e4566..37cdf0452 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/sources/FullDataSourceV1.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/sources/FullDataSourceV1.java @@ -25,7 +25,7 @@ import com.seibel.distanthorizons.core.level.IDhLevel; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; import com.seibel.distanthorizons.core.pos.DhSectionPos; import com.seibel.distanthorizons.core.sql.dto.FullDataSourceV1DTO; -import com.seibel.distanthorizons.core.util.FullDataPointUtilV1; +import com.seibel.distanthorizons.core.util.FullDataPointUtil; import com.seibel.distanthorizons.core.util.LodUtil; import com.seibel.distanthorizons.core.util.objects.dataStreams.DhDataInputStream; import com.seibel.distanthorizons.core.util.objects.dataStreams.DhDataOutputStream; @@ -43,7 +43,7 @@ import java.util.Arrays; * * Replaced by {@link FullDataSourceV2}. * - * @see FullDataPointUtilV1 + * @see FullDataPointUtil * @see FullDataSourceV2 */ public class FullDataSourceV1 implements IDataSource 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 65b7ca659..9ebb4d892 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 @@ -29,8 +29,7 @@ import com.seibel.distanthorizons.core.file.IDataSource; import com.seibel.distanthorizons.core.level.IDhLevel; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; import com.seibel.distanthorizons.core.pos.DhSectionPos; -import com.seibel.distanthorizons.core.util.FullDataPointUtilV2; -import com.seibel.distanthorizons.core.util.FullDataPointUtilV1; +import com.seibel.distanthorizons.core.util.FullDataPointUtil; import com.seibel.distanthorizons.core.util.LodUtil; import com.seibel.distanthorizons.core.util.RenderDataPointUtil; import com.seibel.distanthorizons.core.wrapperInterfaces.block.IBlockStateWrapper; @@ -174,11 +173,11 @@ public class FullDataSourceV2 implements IDataSource { long dataPoint = legacyDataColumn[i]; - int id = FullDataPointUtilV1.getId(dataPoint); - int height = FullDataPointUtilV1.getHeight(dataPoint); - int bottomY = FullDataPointUtilV1.getBottomY(dataPoint); - byte blockLight = (byte) FullDataPointUtilV1.getBlockLight(dataPoint); - byte skyLight = (byte) FullDataPointUtilV1.getSkyLight(dataPoint); + int id = FullDataPointUtil.getId(dataPoint); + int height = FullDataPointUtil.getHeight(dataPoint); + int bottomY = FullDataPointUtil.getBottomY(dataPoint); + byte blockLight = (byte) FullDataPointUtil.getBlockLight(dataPoint); + byte skyLight = (byte) FullDataPointUtil.getSkyLight(dataPoint); IBlockStateWrapper blockState = legacyData.mapping.getBlockStateWrapper(id); if (blockState.isAir()) @@ -187,7 +186,7 @@ public class FullDataSourceV2 implements IDataSource blockLight = 0; } - long newDataPoint = FullDataPointUtilV2.encode(id, height, bottomY, blockLight, skyLight); + long newDataPoint = FullDataPointUtil.encode(id, height, bottomY, blockLight, skyLight); newDataColumn.set(i, newDataPoint); @@ -551,8 +550,8 @@ public class FullDataSourceV2 implements IDataSource } long datapoint = inputDataArray.getLong(dataPointIndex); - int datapointMinY = FullDataPointUtilV2.getBottomY(datapoint); - int numbOfBlocksTall = FullDataPointUtilV2.getHeight(datapoint); + int datapointMinY = FullDataPointUtil.getBottomY(datapoint); + int numbOfBlocksTall = FullDataPointUtil.getHeight(datapoint); int datapointMaxY = (datapointMinY + numbOfBlocksTall); @@ -595,9 +594,9 @@ public class FullDataSourceV2 implements IDataSource Arrays.fill(mergeSkyLights, 0); for (int i = 0; i < 4; i++) { - mergeIds[i] = FullDataPointUtilV2.getId(datapointsForYSlice[i]); - mergeBlockLights[i] = FullDataPointUtilV2.getBlockLight(datapointsForYSlice[i]); - mergeSkyLights[i] = FullDataPointUtilV2.getSkyLight(datapointsForYSlice[i]); + mergeIds[i] = FullDataPointUtil.getId(datapointsForYSlice[i]); + mergeBlockLights[i] = FullDataPointUtil.getBlockLight(datapointsForYSlice[i]); + mergeSkyLights[i] = FullDataPointUtil.getSkyLight(datapointsForYSlice[i]); } @@ -614,7 +613,7 @@ public class FullDataSourceV2 implements IDataSource { if (height != 0) { - newColumnList.add(FullDataPointUtilV2.encode(lastId, height, minY, lastBlockLight, lastSkyLight)); + newColumnList.add(FullDataPointUtil.encode(lastId, height, minY, lastBlockLight, lastSkyLight)); } lastId = id; @@ -628,7 +627,7 @@ public class FullDataSourceV2 implements IDataSource // add the last slice if present if (height != 0) { - newColumnList.add(FullDataPointUtilV2.encode(lastId, height, minY, lastBlockLight, lastSkyLight)); + newColumnList.add(FullDataPointUtil.encode(lastId, height, minY, lastBlockLight, lastSkyLight)); } @@ -649,7 +648,7 @@ public class FullDataSourceV2 implements IDataSource LongArrayList dataColumn = this.dataPoints[dataPointIndex]; for (int i = 0; i < dataColumn.size(); i++) { - dataColumn.set(i, FullDataPointUtilV2.remap(remappedIds, dataColumn.getLong(i))); + dataColumn.set(i, FullDataPointUtil.remap(remappedIds, dataColumn.getLong(i))); } } private static boolean areDataColumnsDifferent(long[] oldDataArray, long[] newDataArray) @@ -766,10 +765,10 @@ public class FullDataSourceV2 implements IDataSource public static void throwIfDataColumnInWrongOrder(DhSectionPos pos, LongArrayList dataArray) throws IllegalStateException { long firstDataPoint = dataArray.getLong(0); - int firstBottomY = FullDataPointUtilV2.getBottomY(firstDataPoint); + int firstBottomY = FullDataPointUtil.getBottomY(firstDataPoint); long lastDataPoint = dataArray.getLong(dataArray.size() - 1); - int lastBottomY = FullDataPointUtilV2.getBottomY(lastDataPoint); + int lastBottomY = FullDataPointUtil.getBottomY(lastDataPoint); if (firstBottomY < lastBottomY) { @@ -784,10 +783,10 @@ public class FullDataSourceV2 implements IDataSource private static void ensureDataColumnOrder(LongArrayList dataColumn) { long firstDataPoint = dataColumn.getLong(0); - int firstBottomY = FullDataPointUtilV2.getBottomY(firstDataPoint); + int firstBottomY = FullDataPointUtil.getBottomY(firstDataPoint); long lastDataPoint = dataColumn.getLong(dataColumn.size() - 1); - int lastBottomY = FullDataPointUtilV2.getBottomY(lastDataPoint); + int lastBottomY = FullDataPointUtil.getBottomY(lastDataPoint); if (firstBottomY < lastBottomY) { @@ -863,7 +862,7 @@ public class FullDataSourceV2 implements IDataSource for (int i = 0; i < longArray.size(); i++) { long dataPoint = longArray.getLong(i); - int id = FullDataPointUtilV2.getId(dataPoint); + int id = FullDataPointUtil.getId(dataPoint); if (id > maxValidId) { LodUtil.assertNotReach("Column set with higher than possible ID. ID [" + id + "], max valid ID [" + maxValidId + "]."); diff --git a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/transformers/FullDataToRenderDataTransformer.java b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/transformers/FullDataToRenderDataTransformer.java index 3d7b373df..65c3636e0 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/transformers/FullDataToRenderDataTransformer.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/transformers/FullDataToRenderDataTransformer.java @@ -31,7 +31,7 @@ import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; import com.seibel.distanthorizons.core.pos.DhBlockPos; import com.seibel.distanthorizons.core.pos.DhSectionPos; import com.seibel.distanthorizons.core.util.ColorUtil; -import com.seibel.distanthorizons.core.util.FullDataPointUtilV2; +import com.seibel.distanthorizons.core.util.FullDataPointUtil; import com.seibel.distanthorizons.core.util.RenderDataPointUtil; import com.seibel.distanthorizons.core.wrapperInterfaces.IWrapperFactory; import com.seibel.distanthorizons.core.wrapperInterfaces.block.IBlockStateWrapper; @@ -180,11 +180,11 @@ public class FullDataToRenderDataTransformer for (int i = 0; i < fullColumnData.size(); i++) { long fullData = fullColumnData.getLong(i); - int bottomY = FullDataPointUtilV2.getBottomY(fullData); - int blockHeight = FullDataPointUtilV2.getHeight(fullData); - int id = FullDataPointUtilV2.getId(fullData); - int blockLight = FullDataPointUtilV2.getBlockLight(fullData); - int skyLight = FullDataPointUtilV2.getSkyLight(fullData); + int bottomY = FullDataPointUtil.getBottomY(fullData); + int blockHeight = FullDataPointUtil.getHeight(fullData); + int id = FullDataPointUtil.getId(fullData); + int blockLight = FullDataPointUtil.getBlockLight(fullData); + int skyLight = FullDataPointUtil.getSkyLight(fullData); // TODO how should corrupted data be handled? // TODO why is the full data corrupted in the first place? FullDataPointUtil hasn't been changed in a long time, could one of the full data point objects be corrupted? diff --git a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/transformers/LodDataBuilder.java b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/transformers/LodDataBuilder.java index 56d7b9363..9437ec217 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/transformers/LodDataBuilder.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/transformers/LodDataBuilder.java @@ -33,7 +33,7 @@ import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; import com.seibel.distanthorizons.core.pos.DhBlockPos; import com.seibel.distanthorizons.core.pos.DhChunkPos; import com.seibel.distanthorizons.core.pos.DhSectionPos; -import com.seibel.distanthorizons.core.util.FullDataPointUtilV2; +import com.seibel.distanthorizons.core.util.FullDataPointUtil; import com.seibel.distanthorizons.core.util.LodUtil; import com.seibel.distanthorizons.core.wrapperInterfaces.block.IBlockStateWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.chunk.IChunkWrapper; @@ -206,7 +206,7 @@ public class LodDataBuilder // check if this block is visible from any direction || blockVisible(chunkWrapper, relBlockX, y, relBlockZ)) { - longs.add(FullDataPointUtilV2.encode(mappedId, lastY - y, y + 1 - chunkWrapper.getMinBuildHeight(), blockLight, skyLight)); + longs.add(FullDataPointUtil.encode(mappedId, lastY - y, y + 1 - chunkWrapper.getMinBuildHeight(), blockLight, skyLight)); biome = newBiome; blockState = newBlockState; mappedId = dataSource.mapping.addIfNotPresentAndGetId(biome, blockState); @@ -216,7 +216,7 @@ public class LodDataBuilder } } } - longs.add(FullDataPointUtilV2.encode(mappedId, lastY - y, y + 1 - chunkWrapper.getMinBuildHeight(), blockLight, skyLight)); + longs.add(FullDataPointUtil.encode(mappedId, lastY - y, y + 1 - chunkWrapper.getMinBuildHeight(), blockLight, skyLight)); dataSource.setSingleColumn(longs, relBlockX + chunkOffsetX, @@ -318,7 +318,7 @@ public class LodDataBuilder (IBlockStateWrapper) (dataPoint.blockStateWrapper) ); - packedDataPoints.set(index, FullDataPointUtilV2.encode( + packedDataPoints.set(index, FullDataPointUtil.encode( id, dataPoint.topYBlockPos - dataPoint.bottomYBlockPos, dataPoint.bottomYBlockPos - dataPoints.topYBlockPos, diff --git a/core/src/main/java/com/seibel/distanthorizons/core/file/subDimMatching/SubDimensionLevelMatcher.java b/core/src/main/java/com/seibel/distanthorizons/core/file/subDimMatching/SubDimensionLevelMatcher.java index 5eed7a278..a07c3176a 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/file/subDimMatching/SubDimensionLevelMatcher.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/file/subDimMatching/SubDimensionLevelMatcher.java @@ -21,7 +21,6 @@ package com.seibel.distanthorizons.core.file.subDimMatching; import com.seibel.distanthorizons.core.config.Config; import com.seibel.distanthorizons.core.dataObjects.fullData.FullDataPointIdMap; -import com.seibel.distanthorizons.core.dataObjects.fullData.sources.FullDataSourceV1; import com.seibel.distanthorizons.core.dataObjects.fullData.sources.FullDataSourceV2; import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; import com.seibel.distanthorizons.core.file.structure.ClientOnlySaveStructure; @@ -32,7 +31,7 @@ import com.seibel.distanthorizons.core.logging.ConfigBasedLogger; import com.seibel.distanthorizons.core.pos.DhChunkPos; import com.seibel.distanthorizons.core.pos.DhSectionPos; import com.seibel.distanthorizons.core.dataObjects.transformers.LodDataBuilder; -import com.seibel.distanthorizons.core.util.FullDataPointUtilV2; +import com.seibel.distanthorizons.core.util.FullDataPointUtil; import com.seibel.distanthorizons.core.util.LodUtil; import com.seibel.distanthorizons.core.util.ThreadUtil; import com.seibel.distanthorizons.core.wrapperInterfaces.block.IBlockStateWrapper; @@ -251,13 +250,13 @@ public class SubDimensionLevelMatcher implements AutoCloseable long newDataPoint = newColumn.getLong(i); long testDataPoint = testColumn.getLong(i); - int newId = FullDataPointUtilV2.getId(newDataPoint); - int testId = FullDataPointUtilV2.getId(testDataPoint); + int newId = FullDataPointUtil.getId(newDataPoint); + int testId = FullDataPointUtil.getId(testDataPoint); // bottom Y - int newBottom = FullDataPointUtilV2.getBottomY(newDataPoint); - int testBottom = FullDataPointUtilV2.getBottomY(testDataPoint); + int newBottom = FullDataPointUtil.getBottomY(newDataPoint); + int testBottom = FullDataPointUtil.getBottomY(testDataPoint); if (newBottom == testBottom) { equalDataPoints++; @@ -265,8 +264,8 @@ public class SubDimensionLevelMatcher implements AutoCloseable totalDataPointCount++; // height - int newHeight = FullDataPointUtilV2.getHeight(newDataPoint); - int testHeight = FullDataPointUtilV2.getHeight(testDataPoint); + int newHeight = FullDataPointUtil.getHeight(newDataPoint); + int testHeight = FullDataPointUtil.getHeight(testDataPoint); if (newHeight == testHeight) { equalDataPoints++; diff --git a/core/src/main/java/com/seibel/distanthorizons/core/util/FullDataPointUtilV2.java b/core/src/main/java/com/seibel/distanthorizons/core/util/FullDataPointUtil.java similarity index 82% rename from core/src/main/java/com/seibel/distanthorizons/core/util/FullDataPointUtilV2.java rename to core/src/main/java/com/seibel/distanthorizons/core/util/FullDataPointUtil.java index 491d0c256..a1eb81042 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/util/FullDataPointUtilV2.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/util/FullDataPointUtil.java @@ -1,24 +1,7 @@ -/* - * This file is part of the Distant Horizons mod - * licensed under the GNU LGPL v3 License. - * - * Copyright (C) 2020-2023 James Seibel - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ - package com.seibel.distanthorizons.core.util; +import com.seibel.distanthorizons.core.dataObjects.fullData.sources.FullDataSourceV1; +import com.seibel.distanthorizons.core.dataObjects.fullData.sources.FullDataSourceV2; import com.seibel.distanthorizons.coreapi.ModInfo; import org.jetbrains.annotations.Contract; @@ -28,6 +11,12 @@ import org.jetbrains.annotations.Contract; * A full data point contains the most information and is the * source of truth used when creating render data.

* + * Specifically used by the data sources:
+ * - {@link FullDataSourceV2}
+ * - {@link FullDataSourceV1} aka CompleteFullDataSource
+ * - (Deleted) HighDetailIncompleteFullDataSource aka SparseDataSource
+ * - (Deleted) LowDetailIncompleteFullDataSource aka SpottyDataSource

+ * * DataPoint Format:
* * ID: blockState id
@@ -37,7 +26,7 @@ import org.jetbrains.annotations.Contract; * SL: Sky light

* * =======Bit layout=======
- * BL BL BL BL SL SL SL SL <-- Top bits
+ * SL SL SL SL BL BL BL BL <-- Top bits
* MY MY MY MY MY MY MY MY
* MY MY MY MY HI HI HI HI
* HI HI HI HI HI HI HI HI
@@ -46,11 +35,11 @@ import org.jetbrains.annotations.Contract; * ID ID ID ID ID ID ID ID
* ID ID ID ID ID ID ID ID <-- Bottom bits
*
- * - * @see RenderDataPointUtil - * @see FullDataPointUtilV1 + * + * @see FullDataSourceV1 + * @see FullDataSourceV2 */ -public class FullDataPointUtilV2 +public class FullDataPointUtil { public static final boolean RUN_VALIDATION = ModInfo.IS_DEV_BUILD; @@ -60,23 +49,23 @@ public class FullDataPointUtilV2 public static final int ID_WIDTH = 32; public static final int HEIGHT_WIDTH = 12; public static final int MIN_Y_WIDTH = 12; - public static final int BLOCK_LIGHT_WIDTH = 4; public static final int SKY_LIGHT_WIDTH = 4; + public static final int BLOCK_LIGHT_WIDTH = 4; public static final int ID_OFFSET = 0; public static final int HEIGHT_OFFSET = ID_OFFSET + ID_WIDTH; /** indicates the Y position where the LOD starts relative to the level's minimum height */ public static final int MIN_Y_OFFSET = HEIGHT_OFFSET + HEIGHT_WIDTH; - public static final int BLOCK_LIGHT_OFFSET = MIN_Y_OFFSET + MIN_Y_WIDTH; - public static final int SKY_LIGHT_OFFSET = BLOCK_LIGHT_OFFSET + BLOCK_LIGHT_WIDTH; + public static final int SKY_LIGHT_OFFSET = MIN_Y_OFFSET + MIN_Y_WIDTH; + public static final int BLOCK_LIGHT_OFFSET = SKY_LIGHT_OFFSET + SKY_LIGHT_WIDTH; public static final long ID_MASK = Integer.MAX_VALUE; public static final long INVERSE_ID_MASK = ~ID_MASK; public static final int HEIGHT_MASK = (int) Math.pow(2, HEIGHT_WIDTH) - 1; public static final int MIN_Y_MASK = (int) Math.pow(2, MIN_Y_WIDTH) - 1; - public static final int BLOCK_LIGHT_MASK = (int) Math.pow(2, BLOCK_LIGHT_WIDTH) - 1; public static final int SKY_LIGHT_MASK = (int) Math.pow(2, SKY_LIGHT_WIDTH) - 1; + public static final int BLOCK_LIGHT_MASK = (int) Math.pow(2, BLOCK_LIGHT_WIDTH) - 1; /** @@ -114,7 +103,7 @@ public class FullDataPointUtilV2 if (RUN_VALIDATION) { if (getId(data) != id || getHeight(data) != height || getBottomY(data) != relMinY - || getBlockLight(data) != Byte.toUnsignedInt(blockLight) || getSkyLight(data) != Byte.toUnsignedInt(skyLight)) + || getBlockLight(data) != Byte.toUnsignedInt(blockLight) || getSkyLight(data) != Byte.toUnsignedInt(skyLight)) { LodUtil.assertNotReach( "Trying to create datapoint with " + @@ -127,6 +116,7 @@ public class FullDataPointUtilV2 return data; } + /** Returns the BlockState/Biome pair ID used to identify this LOD's color */ public static int getId(long data) { return (int) (data & ID_MASK); } /** Returns how many blocks tall this LOD is. */ @@ -142,6 +132,8 @@ public class FullDataPointUtilV2 public static String toString(long data) { return "[ID:" + getId(data) + ",Y:" + getBottomY(data) + ",Height:" + getHeight(data) + ",BlockLight:" + getBlockLight(data) + ",SkyLight:" + getSkyLight(data) + "]"; } + + /** Remaps the biome/blockState ID of the given datapoint */ @Contract(pure = true) public static long remap(int[] newIdMapping, long data) throws IndexOutOfBoundsException diff --git a/core/src/main/java/com/seibel/distanthorizons/core/util/FullDataPointUtilV1.java b/core/src/main/java/com/seibel/distanthorizons/core/util/FullDataPointUtilV1.java deleted file mode 100644 index 065d1b890..000000000 --- a/core/src/main/java/com/seibel/distanthorizons/core/util/FullDataPointUtilV1.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.seibel.distanthorizons.core.util; - -import com.seibel.distanthorizons.core.dataObjects.fullData.sources.FullDataSourceV1; -import com.seibel.distanthorizons.coreapi.ModInfo; - -/** - * Only for Legacy support
- * Used by DH versions 2.0.0 and 2.0.1.

- * - * Specifically used by the data sources:
- * - {@link FullDataSourceV1} aka CompleteFullDataSource
- * - (Deleted) HighDetailIncompleteFullDataSource
- * - (Deleted) LowDetailIncompleteFullDataSource

- * - * DataPoint Format:
- * - * ID: blockState id
- * MY: Min Y Height (unsigned, relative to the minimum level height)
- * HI: Height (how tall this data point is in blocks)
- * BL: Block light
- * SL: Sky light

- * - * =======Bit layout=======
- * SL SL SL SL BL BL BL BL <-- Top bits
- * MY MY MY MY MY MY MY MY
- * MY MY MY MY HI HI HI HI
- * HI HI HI HI HI HI HI HI
- * ID ID ID ID ID ID ID ID
- * ID ID ID ID ID ID ID ID
- * ID ID ID ID ID ID ID ID
- * ID ID ID ID ID ID ID ID <-- Bottom bits
- *
- * - * @see FullDataSourceV1 - * @see FullDataPointUtilV2 - */ -public class FullDataPointUtilV1 -{ - public static final boolean RUN_VALIDATION = ModInfo.IS_DEV_BUILD; - - /** Represents the data held by an empty data point */ - public static final int EMPTY_DATA_POINT = 0; - - public static final int ID_WIDTH = 32; - public static final int HEIGHT_WIDTH = 12; - public static final int MIN_Y_WIDTH = 12; - public static final int SKY_LIGHT_WIDTH = 4; - public static final int BLOCK_LIGHT_WIDTH = 4; - - public static final int ID_OFFSET = 0; - public static final int HEIGHT_OFFSET = ID_OFFSET + ID_WIDTH; - /** indicates the Y position where the LOD starts relative to the level's minimum height */ - public static final int MIN_Y_OFFSET = HEIGHT_OFFSET + HEIGHT_WIDTH; - public static final int SKY_LIGHT_OFFSET = MIN_Y_OFFSET + MIN_Y_WIDTH; - public static final int BLOCK_LIGHT_OFFSET = SKY_LIGHT_OFFSET + SKY_LIGHT_WIDTH; - - - public static final long ID_MASK = Integer.MAX_VALUE; - public static final long INVERSE_ID_MASK = ~ID_MASK; - public static final int HEIGHT_MASK = (int) Math.pow(2, HEIGHT_WIDTH) - 1; - public static final int MIN_Y_MASK = (int) Math.pow(2, MIN_Y_WIDTH) - 1; - public static final int SKY_LIGHT_MASK = (int) Math.pow(2, SKY_LIGHT_WIDTH) - 1; - public static final int BLOCK_LIGHT_MASK = (int) Math.pow(2, BLOCK_LIGHT_WIDTH) - 1; - - - /** - * creates a new datapoint with the given values - * @param relMinY relative to the minimum level Y value - * - * @deprecated Should not be used anymore, just here as a reference for how the data points were constructed. - */ - @Deprecated - public static long encode(int id, int height, int relMinY, byte blockLight, byte skyLight) - { - if (RUN_VALIDATION) - { - // assertions are inside if-blocks to prevent unnecessary string concatenations - if (relMinY < 0 || relMinY >= RenderDataPointUtil.MAX_WORLD_Y_SIZE) - { - LodUtil.assertNotReach("Trying to create datapoint with y[" + relMinY + "] out of range!"); - } - if (height <= 0 || height >= RenderDataPointUtil.MAX_WORLD_Y_SIZE) - { - LodUtil.assertNotReach("Trying to create datapoint with height[" + height + "] out of range!"); - } - if (relMinY + height > RenderDataPointUtil.MAX_WORLD_Y_SIZE) - { - LodUtil.assertNotReach("Trying to create datapoint with y+depth[" + (relMinY + height) + "] out of range!"); - } - } - - - long data = 0; - data |= id & ID_MASK; - data |= (long) (height & HEIGHT_MASK) << HEIGHT_OFFSET; - data |= (long) (relMinY & MIN_Y_MASK) << MIN_Y_OFFSET; - data |= (long) blockLight << BLOCK_LIGHT_OFFSET; - data |= (long) skyLight << SKY_LIGHT_OFFSET; - - - if (RUN_VALIDATION) - { - if (getId(data) != id || getHeight(data) != height || getBottomY(data) != relMinY - || getBlockLight(data) != Byte.toUnsignedInt(blockLight) || getSkyLight(data) != Byte.toUnsignedInt(skyLight)) - { - LodUtil.assertNotReach( - "Trying to create datapoint with " + - "id[" + id + "], height[" + height + "], minY[" + relMinY + "], blockLight[" + blockLight + "], skyLight[" + skyLight + "] " + - "but got " + - "id[" + getId(data) + "], height[" + getHeight(data) + "], minY[" + getBottomY(data) + "], blockLight[" + getBlockLight(data) + "], skyLight[" + getSkyLight(data) + "]!"); - } - } - - return data; - } - - - /** Returns the BlockState/Biome pair ID used to identify this LOD's color */ - public static int getId(long data) { return (int) (data & ID_MASK); } - /** Returns how many blocks tall this LOD is. */ - public static int getHeight(long data) { return (int) ((data >> HEIGHT_OFFSET) & HEIGHT_MASK); } - /** - * Returns the unsigned block position of the bottom vertices for this LOD relative to the level's minimum height. - * Should be between 0 and {@link RenderDataPointUtil#MAX_WORLD_Y_SIZE} - */ - 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 int getSkyLight(long data) { return (int) ((data >> SKY_LIGHT_OFFSET) & SKY_LIGHT_MASK); } - - - public static String toString(long data) { return "[ID:" + getId(data) + ",Y:" + getBottomY(data) + ",Height:" + getHeight(data) + ",BlockLight:" + getBlockLight(data) + ",SkyLight:" + getSkyLight(data) + "]"; } - -}