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 056f263de..913588b4d 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
@@ -27,7 +27,6 @@ import com.seibel.distanthorizons.api.interfaces.data.IDhApiTerrainDataRepo;
import com.seibel.distanthorizons.api.objects.math.DhApiVec3i;
import com.seibel.distanthorizons.core.api.internal.SharedApi;
import com.seibel.distanthorizons.core.dataObjects.fullData.FullDataPointIdMap;
-import com.seibel.distanthorizons.core.dataObjects.fullData.accessor.SingleColumnFullDataAccessor;
import com.seibel.distanthorizons.core.dataObjects.fullData.sources.NewFullDataSource;
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
import com.seibel.distanthorizons.core.level.IDhLevel;
@@ -221,10 +220,10 @@ public class DhApiTerrainDataRepo implements IDhApiTerrainDataRepo
{
// attempt to get the LOD data from the data source
FullDataPointIdMap mapping = dataSource.getMapping();
- SingleColumnFullDataAccessor dataColumn = dataSource.get(relativePos.x, relativePos.z);
+ long[] dataColumn = dataSource.get(relativePos.x, relativePos.z);
if (dataColumn != null)
{
- int dataColumnIndexCount = dataColumn.getSingleLength();
+ int dataColumnIndexCount = dataColumn.length;
DhApiTerrainDataPoint[] returnArray = new DhApiTerrainDataPoint[dataColumnIndexCount];
long dataPoint;
@@ -235,7 +234,7 @@ public class DhApiTerrainDataRepo implements IDhApiTerrainDataRepo
// search for a datapoint that contains the block y position
for (int i = 0; i < dataColumnIndexCount; i++)
{
- dataPoint = dataColumn.getSingle(i);
+ dataPoint = dataColumn[i];
if (!getSpecificYCoordinate)
{
diff --git a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/accessor/FullDataArrayAccessor.java b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/accessor/FullDataArrayAccessor.java
index 123a29653..f3fff6741 100644
--- a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/accessor/FullDataArrayAccessor.java
+++ b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/accessor/FullDataArrayAccessor.java
@@ -20,7 +20,6 @@
package com.seibel.distanthorizons.core.dataObjects.fullData.accessor;
import com.seibel.distanthorizons.core.dataObjects.fullData.FullDataPointIdMap;
-import com.seibel.distanthorizons.core.util.FullDataPointUtil;
import com.seibel.distanthorizons.core.util.LodUtil;
import com.seibel.distanthorizons.core.dataObjects.fullData.sources.CompleteFullDataSource;
@@ -30,8 +29,8 @@ import com.seibel.distanthorizons.core.dataObjects.fullData.sources.CompleteFull
*
* @see CompleteFullDataSource
*/
-@Deprecated
-public class FullDataArrayAccessor implements IFullDataAccessor
+@Deprecated // TODO merge into FullDataSourceV1
+public class FullDataArrayAccessor
{
protected final FullDataPointIdMap mapping;
@@ -82,92 +81,14 @@ public class FullDataArrayAccessor implements IFullDataAccessor
- //=========//
- // methods //
- //=========//
-
- @Override
- public FullDataArrayAccessor subView(int width, int xOffset, int zOffset) { return new FullDataArrayAccessor(this, width, xOffset, zOffset); }
-
- /** WARNING: This will potentially share the underlying array object! */
- public void shadowCopyTo(FullDataArrayAccessor target)
- {
- if (target.width != this.width)
- {
- throw new IllegalArgumentException("Target view must have same size as this view");
- }
-
-
- if (target.mapping.equals(this.mapping))
- {
- for (int x = 0; x < this.width; x++)
- {
- System.arraycopy(this.dataArrays, this.offset + x * this.dataWidth,
- target.dataArrays, target.offset + x * target.dataWidth, this.width);
- }
- }
- else
- {
- int[] remappedIds = target.mapping.mergeAndReturnRemappedEntityIds(this.mapping);
- for (int x = 0; x < this.width; x++)
- {
- for (int z = 0; z < this.width; z++)
- {
- long[] currentData = this.dataArrays[this.offset + x * this.dataWidth + z];
- // may be null if no data exists for this column yet
- if (currentData != null)
- {
- long[] newData = new long[currentData.length]; // TODO what to do if null?
- for (int dataPointIndex = 0; dataPointIndex < newData.length; dataPointIndex++)
- {
- newData[dataPointIndex] = FullDataPointUtil.remap(remappedIds, currentData[dataPointIndex]);
- }
-
- target.dataArrays[target.offset + x * target.dataWidth + z] = newData;
- }
- }
- }
- }
- }
-
- /**
- * Takes a higher detail {@link FullDataArrayAccessor}'s and converts the data to a lower detail level.
- *
- * @param incomingFullDataAccessor must be larger than this {@link FullDataArrayAccessor} and its width must a power of two larger (example: this.width = 4, other.width = 8)
- */
- public void downsampleFrom(FullDataArrayAccessor incomingFullDataAccessor)
- {
- // validate that the incoming data isn't smaller than this accessor
- LodUtil.assertTrue(incomingFullDataAccessor.width >= this.width && incomingFullDataAccessor.width % this.width == 0);
-
- int dataPointsPerWidthUnit = incomingFullDataAccessor.width / this.width;
- for (int xOffset = 0; xOffset < this.width; xOffset++)
- {
- for (int zOffset = 0; zOffset < this.width; zOffset++)
- {
- FullDataArrayAccessor subView = incomingFullDataAccessor.subView(dataPointsPerWidthUnit,
- xOffset * dataPointsPerWidthUnit,
- zOffset * dataPointsPerWidthUnit);
-
- SingleColumnFullDataAccessor column = this.get(xOffset, zOffset);
- column.downsampleFrom(subView);
- }
- }
- }
-
-
-
//=========//
// getters //
//=========//
- @Override
public FullDataPointIdMap getMapping() { return this.mapping; }
- @Override
- public SingleColumnFullDataAccessor get(int index) { return this.get(index / this.width, index % this.width); }
- @Override
- public SingleColumnFullDataAccessor get(int relativeX, int relativeZ)
+ public long[] get(int index) { return this.get(index / this.width, index % this.width); }
+ public long[] get(int relativeX, int relativeZ)
{
int dataArrayIndex = (relativeX * this.width) + relativeZ + this.offset;
if (dataArrayIndex >= this.dataArrays.length)
@@ -179,10 +100,7 @@ public class FullDataArrayAccessor implements IFullDataAccessor
"dataArrays.length: [" + this.dataArrays.length + "] dataArrayIndex: [" + dataArrayIndex + "].");
}
- return new SingleColumnFullDataAccessor(this.mapping, this.dataArrays, dataArrayIndex);
+ return this.dataArrays[dataArrayIndex];
}
- @Override
- public int width() { return this.width; }
-
}
diff --git a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/accessor/IFullDataAccessor.java b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/accessor/IFullDataAccessor.java
deleted file mode 100644
index 62cd58cc4..000000000
--- a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/accessor/IFullDataAccessor.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * 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.dataObjects.fullData.accessor;
-
-import com.seibel.distanthorizons.core.dataObjects.fullData.FullDataPointIdMap;
-import com.seibel.distanthorizons.core.dataObjects.fullData.sources.CompleteFullDataSource;
-import com.seibel.distanthorizons.core.util.LodUtil;
-import com.seibel.distanthorizons.core.util.FullDataPointUtil;
-
-import java.util.Iterator;
-
-/**
- * Contains raw full data points, which must be interpreted by the {@link FullDataPointUtil}.
- * Often used by {@link CompleteFullDataSource}'s.
- *
- * @see FullDataArrayAccessor
- * @see FullDataPointUtil
- */
-@Deprecated
-public interface IFullDataAccessor
-{
- FullDataPointIdMap getMapping();
-
- /** generally used for iterating through the whole data set */
- SingleColumnFullDataAccessor get(int index);
- SingleColumnFullDataAccessor get(int relativeX, int relativeZ);
-
- /** measured in full data points */
- int width();
-
- /**
- * Creates a new {@link IFullDataAccessor} with the given width and starting at the given X and Z offsets.
- * The returned object will use the same underlining data structure (IE memory addresses) as the source {@link IFullDataAccessor}.
- */
- IFullDataAccessor subView(int width, int xOffset, int zOffset);
-
-
-
-
- /** Returns an iterator that goes over each data column */
- default Iterator iterator()
- {
- return new Iterator()
- {
- private int index = 0;
- private final int size = width() * width();
-
- @Override
- public boolean hasNext() { return this.index < this.size; }
-
- @Override
- public SingleColumnFullDataAccessor next()
- {
- LodUtil.assertTrue(this.hasNext(), "No more data to iterate!");
- return get(this.index++);
- }
- };
- }
-
-}
diff --git a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/accessor/SingleColumnFullDataAccessor.java b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/accessor/SingleColumnFullDataAccessor.java
deleted file mode 100644
index b9f66e242..000000000
--- a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/accessor/SingleColumnFullDataAccessor.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * 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.dataObjects.fullData.accessor;
-
-import com.seibel.distanthorizons.core.dataObjects.fullData.FullDataPointIdMap;
-import com.seibel.distanthorizons.core.util.FullDataPointUtil;
-import com.seibel.distanthorizons.core.util.LodUtil;
-
-/**
- * Represents a single column of Full LOD data.
- *
- * @see FullDataPointUtil
- */
-public class SingleColumnFullDataAccessor implements IFullDataAccessor
-{
- /**
- * A flattened 2D array (for the X and Z directions) containing an array for the Y direction.
- * TODO the flattened array is probably to reduce garbage collection overhead, but is doing it this way worth while? Having a 3D array would be much easier to understand
- *
- * @see FullDataArrayAccessor#dataArrays
- */
- private final long[][] dataArrays;
- /** indicates what index of the {@link SingleColumnFullDataAccessor#dataArrays} is used by this accessor */
- private final int dataArrayIndex;
- private final FullDataPointIdMap mapping;
-
-
-
- //=============//
- // constructor //
- //=============//
-
- public SingleColumnFullDataAccessor(FullDataPointIdMap mapping, long[][] dataArrays, int dataArrayIndex)
- {
- this.dataArrays = dataArrays;
- this.dataArrayIndex = dataArrayIndex;
- this.mapping = mapping;
-
- LodUtil.assertTrue(this.dataArrayIndex < this.dataArrays.length, "dataArrays.length [" + this.dataArrays.length + "] is less than the dataArrayIndex [" + this.dataArrayIndex + "].");
- }
-
-
-
- //=========//
- // methods //
- //=========//
-
- /** @return true if any data exists in this column. */
- public boolean doesColumnExist()
- {
- long[] dataColumn = this.dataArrays[this.dataArrayIndex];
- return dataColumn != null && dataColumn.length != 0;
- }
-
- @Override
- public FullDataPointIdMap getMapping() { return this.mapping; }
-
- @Override
- public SingleColumnFullDataAccessor get(int index)
- {
- if (index != 0)
- {
- throw new IllegalArgumentException("Only contains 1 column of full data!");
- }
-
- return this;
- }
-
- @Override
- public SingleColumnFullDataAccessor get(int relativeX, int relativeZ)
- {
- if (relativeX != 0 || relativeZ != 0)
- {
- throw new IllegalArgumentException("Only contains 1 column of full data!");
- }
-
- return this;
- }
-
- /** @return the entire array of raw full data points. */
- public long[] getRaw() { return this.dataArrays[this.dataArrayIndex]; }
-
- public long getSingle(int yIndex) { return this.dataArrays[this.dataArrayIndex][yIndex]; }
- public void setSingle(int yIndex, long fullDataPoint) { this.dataArrays[this.dataArrayIndex][yIndex] = fullDataPoint; }
-
- public void setNew(long[] newArray) { this.dataArrays[this.dataArrayIndex] = newArray; }
-
- /** @return how many data points are in this column */
- public int getSingleLength()
- {
- long[] singleDataArray = this.dataArrays[this.dataArrayIndex];
- return singleDataArray != null ? singleDataArray.length : 0;
- }
-
- @Override
- public int width() { return 1; }
-
- @Override
- public IFullDataAccessor subView(int width, int xOffset, int zOffset)
- {
- if (width != 1 || xOffset != 1 || zOffset != 1)
- {
- throw new IllegalArgumentException("Getting invalid range of subView from SingleColumnFullDataAccessor!");
- }
-
- return this;
- }
-
- /** WARNING: This may potentially share the underlying array objects! */
- public void shadowCopyTo(SingleColumnFullDataAccessor target)
- {
- if (target.mapping.equals(this.mapping))
- {
- target.dataArrays[target.dataArrayIndex] = this.dataArrays[this.dataArrayIndex];
- }
- else
- {
- int[] remappedEntryIds = target.mapping.mergeAndReturnRemappedEntityIds(this.mapping);
- long[] sourceData = this.dataArrays[this.dataArrayIndex];
- long[] newData = new long[sourceData.length];
-
- for (int i = 0; i < newData.length; i++)
- {
- newData[i] = FullDataPointUtil.remap(remappedEntryIds, sourceData[i]);
- }
- target.dataArrays[target.dataArrayIndex] = newData;
- }
- }
-
- /** Copies both ID data and mapping data. */
- public void deepCopyTo(SingleColumnFullDataAccessor target)
- {
- if (target.mapping.equals(this.mapping))
- {
- System.arraycopy(this.dataArrays[this.dataArrayIndex], 0, target.dataArrays[target.dataArrayIndex], 0, this.dataArrays[this.dataArrayIndex].length);
- }
- else
- {
- int[] remappedEntryIds = target.mapping.mergeAndReturnRemappedEntityIds(this.mapping);
- long[] sourceData = this.dataArrays[this.dataArrayIndex];
- // FIXME sourceData.length != 0 may not be a good solution and may end up breaking issues down the line, but fixes exceptions being fired here
- if (sourceData != null && sourceData.length != 0)
- {
- long[] newData = new long[sourceData.length];
- for (int i = 0; i < newData.length; i++)
- {
- newData[i] = FullDataPointUtil.remap(remappedEntryIds, sourceData[i]);
- }
- target.dataArrays[target.dataArrayIndex] = newData;
- }
- }
- }
-
- /**
- * Replaces this column's data with data from the input {@link IFullDataAccessor}.
- * This is used to convert higher detail LOD data to lower detail LOD data.
- */
- public void downsampleFrom(IFullDataAccessor source)
- {
- //TODO: average the data instead of just picking the first column
- SingleColumnFullDataAccessor firstColumn = source.get(0);
- firstColumn.deepCopyTo(this);
- }
-
-}
diff --git a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/sources/CompleteFullDataSource.java b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/sources/CompleteFullDataSource.java
index 7b52a298f..f5841435b 100644
--- a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/sources/CompleteFullDataSource.java
+++ b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/sources/CompleteFullDataSource.java
@@ -21,7 +21,6 @@ package com.seibel.distanthorizons.core.dataObjects.fullData.sources;
import com.seibel.distanthorizons.api.enums.worldGeneration.EDhApiWorldGenerationStep;
import com.seibel.distanthorizons.core.dataObjects.fullData.accessor.FullDataArrayAccessor;
-import com.seibel.distanthorizons.core.dataObjects.fullData.accessor.SingleColumnFullDataAccessor;
import com.seibel.distanthorizons.core.file.IDataSource;
import com.seibel.distanthorizons.core.level.IDhLevel;
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
@@ -42,7 +41,7 @@ import java.util.Arrays;
/**
* This data source contains every datapoint over its given {@link DhSectionPos}.
*
- * @see FullDataPointUtil
+ * @see FullDataPointUtil // FullDataSourceV1
*/
public class CompleteFullDataSource extends FullDataArrayAccessor implements IDataSource
{
@@ -246,7 +245,7 @@ public class CompleteFullDataSource extends FullDataArrayAccessor implements IDa
{
for (int z = 0; z < this.width; z++)
{
- outputStream.writeInt(this.get(x, z).getSingleLength());
+ outputStream.writeInt(this.get(x, z).length);
}
}
@@ -258,11 +257,10 @@ public class CompleteFullDataSource extends FullDataArrayAccessor implements IDa
{
for (int z = 0; z < this.width; z++)
{
- SingleColumnFullDataAccessor columnAccessor = this.get(x, z);
- if (columnAccessor.doesColumnExist())
+ long[] dataColumn = this.get(x, z);
+ if (dataColumn != null)
{
- long[] dataPointArray = columnAccessor.getRaw();
- for (long dataPoint : dataPointArray)
+ for (long dataPoint : dataColumn)
{
outputStream.writeLong(dataPoint);
}
diff --git a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/sources/NewFullDataSource.java b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/sources/NewFullDataSource.java
index 588c0776b..252a0b6eb 100644
--- a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/sources/NewFullDataSource.java
+++ b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/sources/NewFullDataSource.java
@@ -21,7 +21,6 @@ package com.seibel.distanthorizons.core.dataObjects.fullData.sources;
import com.seibel.distanthorizons.api.enums.worldGeneration.EDhApiWorldGenerationStep;
import com.seibel.distanthorizons.core.dataObjects.fullData.FullDataPointIdMap;
-import com.seibel.distanthorizons.core.dataObjects.fullData.accessor.SingleColumnFullDataAccessor;
import com.seibel.distanthorizons.core.dataObjects.transformers.LodDataBuilder;
import com.seibel.distanthorizons.core.file.IDataSource;
import com.seibel.distanthorizons.core.file.fullDatafile.NewFullDataFileHandler;
@@ -147,16 +146,12 @@ public class NewFullDataSource implements IDataSource
{
for (int z = 0; z < WIDTH; z++)
{
- SingleColumnFullDataAccessor accessor = legacyData.get(x, z);
- if (accessor.doesColumnExist())
+ long[] dataColumn = legacyData.get(x, z);
+ if (dataColumn != null && dataColumn.length != 0)
{
- int index = relativePosToIndex(x, z);
- dataPoints[index] = accessor.getRaw();
-
// reverse the array so index 0 is the lowest,
// this is necessary for later logic
// source: https://stackoverflow.com/questions/2137755/how-do-i-reverse-an-int-array-in-java
- long[] dataColumn = dataPoints[index];
for(int i = 0; i < dataColumn.length / 2; i++)
{
long temp = dataColumn[i];
@@ -164,6 +159,9 @@ public class NewFullDataSource implements IDataSource
dataColumn[dataColumn.length - i - 1] = temp;
}
+ int index = relativePosToIndex(x, z);
+ dataPoints[index] = dataColumn;
+
// convert the data point format
boolean columnHasNonAirBlock = false;
@@ -212,27 +210,24 @@ public class NewFullDataSource implements IDataSource
{
for (int z = 0; z < WIDTH; z++)
{
- SingleColumnFullDataAccessor legacyAccessor = legacyData.get(x, z);
- if (legacyAccessor.doesColumnExist())
+ long[] legacyDataColumn = legacyData.get(x, z);
+ if (legacyDataColumn != null && legacyDataColumn.length != 0)
{
- SingleColumnFullDataAccessor newAccessor = newFullDataSource.get(x, z);
+ long[] newDataColumn = newFullDataSource.get(x, z);
- if (newAccessor == null)
+ if (newDataColumn == null)
{
LodUtil.assertNotReach("Accessor column mismatch");
}
- else if (legacyAccessor.getRaw().length != newAccessor.getRaw().length)
+ else if (legacyDataColumn.length != newDataColumn.length)
{
LodUtil.assertNotReach("Accessor column length mismatch");
}
else
{
- long[] legacyRaw = legacyAccessor.getRaw();
- long[] newRaw = newAccessor.getRaw();
-
- for (int i = 0; i < legacyRaw.length; i++)
+ for (int i = 0; i < legacyDataColumn.length; i++)
{
- if (legacyRaw[i] != newRaw[i])
+ if (legacyDataColumn[i] != newDataColumn[i])
{
LodUtil.assertNotReach("Data mismatch");
}
@@ -253,7 +248,7 @@ public class NewFullDataSource implements IDataSource
// data //
//======//
- public SingleColumnFullDataAccessor get(int relX, int relZ) { return new SingleColumnFullDataAccessor(this.mapping, this.dataPoints, relativePosToIndex(relX, relZ)); }
+ public long[] get(int relX, int relZ) throws IndexOutOfBoundsException { return this.dataPoints[relativePosToIndex(relX, relZ)]; }
@Override
public boolean update(NewFullDataSource inputDataSource, @Nullable IDhLevel level) { return this.update(inputDataSource); }
diff --git a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/ColumnRenderSource.java b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/ColumnRenderSource.java
index 39024ff91..8e1c776ad 100644
--- a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/ColumnRenderSource.java
+++ b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/ColumnRenderSource.java
@@ -20,7 +20,6 @@
package com.seibel.distanthorizons.core.dataObjects.render;
import com.seibel.distanthorizons.api.enums.worldGeneration.EDhApiWorldGenerationStep;
-import com.seibel.distanthorizons.core.dataObjects.fullData.accessor.SingleColumnFullDataAccessor;
import com.seibel.distanthorizons.core.dataObjects.fullData.sources.NewFullDataSource;
import com.seibel.distanthorizons.core.dataObjects.transformers.FullDataToRenderDataTransformer;
import com.seibel.distanthorizons.core.file.IDataSource;
@@ -318,14 +317,15 @@ public class ColumnRenderSource implements IDataSource
ColumnArrayView columnArrayView = this.getVerticalDataPointView(x, z);
int columnHash = columnArrayView.getDataHash();
- SingleColumnFullDataAccessor fullArrayView = inputFullDataSource.get(x, z);
+ long[] dataColumn = inputFullDataSource.get(x, z);
EDhApiWorldGenerationStep worldGenStep = inputFullDataSource.getWorldGenStepAtRelativePos(x, z);
- if (fullArrayView != null && worldGenStep != EDhApiWorldGenerationStep.EMPTY)
+ if (dataColumn != null && worldGenStep != EDhApiWorldGenerationStep.EMPTY)
{
- FullDataToRenderDataTransformer.convertColumnData(level,
+ FullDataToRenderDataTransformer.convertColumnData(
+ level, inputFullDataSource.getMapping(),
minBlockPos.x + x,
minBlockPos.z + z,
- columnArrayView, fullArrayView);
+ columnArrayView, dataColumn);
dataChanged |= columnHash != columnArrayView.getDataHash();
this.fillDebugFlag(x, z, 1, 1, ColumnRenderSource.DebugSourceFlag.DIRECT);
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 b9293258c..817c6802d 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
@@ -22,7 +22,6 @@ package com.seibel.distanthorizons.core.dataObjects.transformers;
import com.seibel.distanthorizons.api.enums.config.EBlocksToAvoid;
import com.seibel.distanthorizons.core.config.Config;
import com.seibel.distanthorizons.core.dataObjects.fullData.FullDataPointIdMap;
-import com.seibel.distanthorizons.core.dataObjects.fullData.accessor.SingleColumnFullDataAccessor;
import com.seibel.distanthorizons.core.dataObjects.fullData.sources.NewFullDataSource;
import com.seibel.distanthorizons.core.dataObjects.render.ColumnRenderSource;
import com.seibel.distanthorizons.core.dataObjects.render.columnViews.ColumnArrayView;
@@ -118,8 +117,8 @@ public class FullDataToRenderDataTransformer
throwIfThreadInterrupted();
ColumnArrayView columnArrayView = columnSource.getVerticalDataPointView(x, z);
- SingleColumnFullDataAccessor fullArrayView = fullDataSource.get(x, z);
- convertColumnData(level, baseX + x, baseZ + z, columnArrayView, fullArrayView);
+ long[] dataColumn = fullDataSource.get(x, z);
+ convertColumnData(level, fullDataSource.getMapping(), baseX + x, baseZ + z, columnArrayView, dataColumn);
}
}
@@ -157,14 +156,14 @@ public class FullDataToRenderDataTransformer
// TODO what does this mean?
- private static void iterateAndConvert(IDhClientLevel level,
+ private static void iterateAndConvert(
+ IDhClientLevel level, FullDataPointIdMap fullDataMapping,
int blockX, int blockZ,
- ColumnArrayView column, SingleColumnFullDataAccessor data)
+ ColumnArrayView renderColumnData, long[] fullColumnData)
{
boolean avoidSolidBlocks = (Config.Client.Advanced.Graphics.Quality.blocksToIgnore.get() == EBlocksToAvoid.NON_COLLIDING);
boolean colorBelowWithAvoidedBlocks = Config.Client.Advanced.Graphics.Quality.tintWithAvoidedBlocks.get();
- FullDataPointIdMap fullDataMapping = data.getMapping();
HashSet blockStatesToIgnore = WRAPPER_FACTORY.getRendererIgnoredBlocks(level.getLevelWrapper());
boolean isVoid = true;
@@ -172,9 +171,9 @@ public class FullDataToRenderDataTransformer
int columnOffset = 0;
// goes from the top down
- for (int i = 0; i < data.getSingleLength(); i++)
+ for (int i = 0; i < fullColumnData.length; i++)
{
- long fullData = data.getSingle(i);
+ long fullData = fullColumnData[i];
int bottomY = FullDataPointUtil.getBottomY(fullData);
int blockHeight = FullDataPointUtil.getHeight(fullData);
int id = FullDataPointUtil.getId(fullData);
@@ -259,40 +258,35 @@ public class FullDataToRenderDataTransformer
// add the block
isVoid = false;
long columnData = RenderDataPointUtil.createDataPoint(bottomY + blockHeight, bottomY, color, skyLight, blockLight, block.getIrisBlockMaterialId());
- column.set(columnOffset, columnData);
+ renderColumnData.set(columnOffset, columnData);
columnOffset++;
}
if (isVoid)
{
- column.set(0, RenderDataPointUtil.createVoidDataPoint());
+ renderColumnData.set(0, RenderDataPointUtil.createVoidDataPoint());
}
}
// TODO what does this mean?
- public static void convertColumnData(IDhClientLevel level, int blockX, int blockZ, ColumnArrayView columnArrayView, SingleColumnFullDataAccessor fullArrayView)
+ public static void convertColumnData(IDhClientLevel level, FullDataPointIdMap fullDataMapping, int blockX, int blockZ, ColumnArrayView columnArrayView, long[] fullDataColumn)
{
- if (fullArrayView == null || !fullArrayView.doesColumnExist())
- {
- return;
- }
-
- int dataTotalLength = fullArrayView.getSingleLength();
- if (dataTotalLength == 0)
+ if (fullDataColumn == null || fullDataColumn.length == 0)
{
return;
}
+ int dataTotalLength = fullDataColumn.length;
if (dataTotalLength > columnArrayView.verticalSize())
{
ColumnArrayView totalColumnData = new ColumnArrayView(new long[dataTotalLength], dataTotalLength, 0, dataTotalLength);
- iterateAndConvert(level, blockX, blockZ, totalColumnData, fullArrayView);
+ iterateAndConvert(level, fullDataMapping, blockX, blockZ, totalColumnData, fullDataColumn);
columnArrayView.changeVerticalSizeFrom(totalColumnData);
}
else
{
- iterateAndConvert(level, blockX, blockZ, columnArrayView, fullArrayView); //Directly use the arrayView since it fits.
+ iterateAndConvert(level, fullDataMapping, blockX, blockZ, columnArrayView, fullDataColumn); //Directly use the arrayView since it fits.
}
}
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 c48569e79..3ed6b977e 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.accessor.SingleColumnFullDataAccessor;
import com.seibel.distanthorizons.core.dataObjects.fullData.sources.CompleteFullDataSource;
import com.seibel.distanthorizons.core.dataObjects.fullData.sources.NewFullDataSource;
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
@@ -234,8 +233,8 @@ public class SubDimensionLevelMatcher implements AutoCloseable
{
for (int z = 0; z < CompleteFullDataSource.WIDTH; z++)
{
- SingleColumnFullDataAccessor newColumn = newDataSource.get(x, z);
- SingleColumnFullDataAccessor testColumn = testFullDataSource.get(x, z);
+ long[] newColumn = newDataSource.get(x, z);
+ long[] testColumn = testFullDataSource.get(x, z);
if (newColumn != null && testColumn != null)
{
@@ -245,11 +244,11 @@ public class SubDimensionLevelMatcher implements AutoCloseable
FullDataPointIdMap testDataMap = testFullDataSource.getMapping();
// use min to prevent going out of bounds
- int minColumnIndex = Math.min(newColumn.getSingleLength(), testColumn.getSingleLength());
+ int minColumnIndex = Math.min(newColumn.length, testColumn.length);
for (int i = 0; i < minColumnIndex; i++)
{
- long newDataPoint = newColumn.getSingle(i);
- long testDataPoint = testColumn.getSingle(i);
+ long newDataPoint = newColumn[i];
+ long testDataPoint = testColumn[i];
int newId = FullDataPointUtil.getId(newDataPoint);
int testId = FullDataPointUtil.getId(testDataPoint);
@@ -298,7 +297,7 @@ public class SubDimensionLevelMatcher implements AutoCloseable
else if (newColumn != null)
{
// missing test column
- totalDataPointCount += newColumn.getSingleLength();
+ totalDataPointCount += newColumn.length;
}
else
{
diff --git a/core/src/main/java/com/seibel/distanthorizons/core/level/DhServerLevel.java b/core/src/main/java/com/seibel/distanthorizons/core/level/DhServerLevel.java
index ec62cf12a..f3e4b3164 100644
--- a/core/src/main/java/com/seibel/distanthorizons/core/level/DhServerLevel.java
+++ b/core/src/main/java/com/seibel/distanthorizons/core/level/DhServerLevel.java
@@ -19,7 +19,6 @@
package com.seibel.distanthorizons.core.level;
-import com.seibel.distanthorizons.core.dataObjects.fullData.sources.CompleteFullDataSource;
import com.seibel.distanthorizons.core.dataObjects.fullData.sources.NewFullDataSource;
import com.seibel.distanthorizons.core.file.fullDatafile.NewFullDataFileHandler;
import com.seibel.distanthorizons.core.file.structure.AbstractSaveStructure;
diff --git a/core/src/main/java/com/seibel/distanthorizons/core/pos/DhSectionPos.java b/core/src/main/java/com/seibel/distanthorizons/core/pos/DhSectionPos.java
index d64bfe83c..8be858116 100644
--- a/core/src/main/java/com/seibel/distanthorizons/core/pos/DhSectionPos.java
+++ b/core/src/main/java/com/seibel/distanthorizons/core/pos/DhSectionPos.java
@@ -154,10 +154,16 @@ public class DhSectionPos
// getters //
//=========//
- /** @return the corner with the smallest X and Z coordinate */
+ /**
+ * @deprecated use DhSectionPos instead
+ * @return the corner with the smallest X and Z coordinate
+ */
@Deprecated
public DhLodPos getMinCornerLodPos() { return this.getMinCornerLodPos((byte) (this.detailLevel - 1)); }
- /** @return the corner with the smallest X and Z coordinate */
+ /**
+ * @deprecated use DhSectionPos instead
+ * @return the corner with the smallest X and Z coordinate
+ */
@Deprecated
public DhLodPos getMinCornerLodPos(byte returnDetailLevel)
{