Remove unused/broken FullData LevelMinY
This commit is contained in:
+1
@@ -41,6 +41,7 @@ public interface IDhApiEventInjector extends IDependencyInjector<IDhApiEvent>
|
||||
* @throws IllegalArgumentException if the implementation object doesn't implement the interface
|
||||
*/
|
||||
// Note to self: Don't try adding a generic type to IDhApiEvent, the constructor won't accept it
|
||||
// TODO why are we removing the class instead of an instance?
|
||||
boolean unbind(Class<? extends IDhApiEvent> dependencyInterface, Class<? extends IDhApiEvent> dependencyClassToRemove) throws IllegalArgumentException;
|
||||
|
||||
|
||||
|
||||
@@ -54,27 +54,12 @@ public class DhApiChunk
|
||||
// constructors //
|
||||
//==============//
|
||||
|
||||
/**
|
||||
* Deprecated due to the topYBlockPos and bottomYBlockPos variables being put in the wrong order.
|
||||
* They should have been in bottom -> top order.
|
||||
*
|
||||
* @see DhApiChunk#create(int, int, int, int)
|
||||
*/
|
||||
@Deprecated
|
||||
public DhApiChunk(int chunkPosX, int chunkPosZ, int topYBlockPos, int bottomYBlockPos)
|
||||
{ this(chunkPosX, chunkPosZ, bottomYBlockPos, topYBlockPos, false); }
|
||||
|
||||
/**
|
||||
* @since API 3.0.0
|
||||
*/
|
||||
/** @since API 3.0.0 */
|
||||
public static DhApiChunk create(int chunkPosX, int chunkPosZ, int bottomYBlockPos, int topYBlockPos)
|
||||
{ return new DhApiChunk(chunkPosX, chunkPosZ, bottomYBlockPos, topYBlockPos, false); }
|
||||
{ return new DhApiChunk(chunkPosX, chunkPosZ, bottomYBlockPos, topYBlockPos); }
|
||||
|
||||
/**
|
||||
* Only visible to internal DH methods
|
||||
* @param ignoredParameter is only present to differentiate the two constructors and isn't actually used
|
||||
*/
|
||||
private DhApiChunk(int chunkPosX, int chunkPosZ, int bottomYBlockPos, int topYBlockPos, boolean ignoredParameter)
|
||||
/** Only visible to internal DH methods */
|
||||
private DhApiChunk(int chunkPosX, int chunkPosZ, int bottomYBlockPos, int topYBlockPos)
|
||||
{
|
||||
this.chunkPosX = chunkPosX;
|
||||
this.chunkPosZ = chunkPosZ;
|
||||
|
||||
+11
-31
@@ -29,7 +29,7 @@ import java.util.ArrayList;
|
||||
* Holds a single datapoint of terrain data.
|
||||
*
|
||||
* @author James Seibel
|
||||
* @version 2024-7-20
|
||||
* @version 2025-11-15
|
||||
* @since API 1.0.0
|
||||
*/
|
||||
public class DhApiTerrainDataPoint
|
||||
@@ -47,6 +47,10 @@ public class DhApiTerrainDataPoint
|
||||
|
||||
public final int blockLightLevel;
|
||||
public final int skyLightLevel;
|
||||
/**
|
||||
* An unsigned block position of the bottom vertex for this LOD relative to the level's minimum height.
|
||||
* Should be greater than or equal to 0.
|
||||
*/
|
||||
public final int bottomYBlockPos;
|
||||
public final int topYBlockPos;
|
||||
|
||||
@@ -59,28 +63,7 @@ public class DhApiTerrainDataPoint
|
||||
// constructors //
|
||||
//==============//
|
||||
|
||||
/**
|
||||
* Deprecated due to the topYBlockPos and bottomYBlockPos variables being put in the wrong order.
|
||||
* They should have been in bottom -> top order.
|
||||
*
|
||||
* @see DhApiTerrainDataPoint#create(byte, int, int, int, int, IDhApiBlockStateWrapper, IDhApiBiomeWrapper)
|
||||
*/
|
||||
@Deprecated
|
||||
public DhApiTerrainDataPoint(
|
||||
byte detailLevel,
|
||||
int blockLightLevel, int skyLightLevel,
|
||||
int topYBlockPos, int bottomYBlockPos,
|
||||
IDhApiBlockStateWrapper blockStateWrapper, IDhApiBiomeWrapper biomeWrapper)
|
||||
{
|
||||
this(detailLevel, blockLightLevel, skyLightLevel,
|
||||
bottomYBlockPos, topYBlockPos,
|
||||
blockStateWrapper, biomeWrapper,
|
||||
false);
|
||||
}
|
||||
|
||||
/**
|
||||
* @since API 3.0.0
|
||||
*/
|
||||
/** @since API 3.0.0 */
|
||||
public static DhApiTerrainDataPoint create(
|
||||
byte detailLevel,
|
||||
int blockLightLevel, int skyLightLevel,
|
||||
@@ -91,20 +74,15 @@ public class DhApiTerrainDataPoint
|
||||
return new DhApiTerrainDataPoint(
|
||||
detailLevel, blockLightLevel, skyLightLevel,
|
||||
bottomYBlockPos, topYBlockPos,
|
||||
blockStateWrapper, biomeWrapper,
|
||||
false);
|
||||
blockStateWrapper, biomeWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* Only visible to internal DH methods
|
||||
* @param ignoredParameter is only present to differentiate the two constructors and isn't actually used
|
||||
*/
|
||||
/** Only visible to internal DH methods */
|
||||
private DhApiTerrainDataPoint(
|
||||
byte detailLevel,
|
||||
int blockLightLevel, int skyLightLevel,
|
||||
int bottomYBlockPos, int topYBlockPos,
|
||||
IDhApiBlockStateWrapper blockStateWrapper, IDhApiBiomeWrapper biomeWrapper,
|
||||
boolean ignoredParameter
|
||||
IDhApiBlockStateWrapper blockStateWrapper, IDhApiBiomeWrapper biomeWrapper
|
||||
)
|
||||
{
|
||||
this.detailLevel = detailLevel;
|
||||
@@ -118,4 +96,6 @@ public class DhApiTerrainDataPoint
|
||||
this.biomeWrapper = biomeWrapper;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
+18
-9
@@ -277,7 +277,7 @@ public class DhApiTerrainDataRepo implements IDhApiTerrainDataRepo
|
||||
if (!getSpecificYCoordinate)
|
||||
{
|
||||
// if we aren't look for a specific datapoint, add each datapoint to the return array
|
||||
returnArray[i] = DhApiTerrainDataPointUtil.createApiDatapoint(levelWrapper, mapping, requestedDetailLevel, dataPoint);
|
||||
returnArray[i] = DhApiTerrainDataPointUtil.createApiDatapoint(levelWrapper.getMinHeight(), mapping, requestedDetailLevel, dataPoint);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -294,7 +294,7 @@ public class DhApiTerrainDataRepo implements IDhApiTerrainDataRepo
|
||||
if (bottomY <= requestedY && requestedY < topY) // blockPositions start from the bottom of the block, thus "<=" for bottomY, just "<" for topY
|
||||
{
|
||||
// this datapoint contains the requested block position, return it
|
||||
DhApiTerrainDataPoint apiTerrainData = DhApiTerrainDataPointUtil.createApiDatapoint(levelWrapper, mapping, requestedDetailLevel, dataPoint);
|
||||
DhApiTerrainDataPoint apiTerrainData = DhApiTerrainDataPointUtil.createApiDatapoint(levelWrapper.getMinHeight(), mapping, requestedDetailLevel, dataPoint);
|
||||
return DhApiResult.createSuccess(new DhApiTerrainDataPoint[]{apiTerrainData});
|
||||
}
|
||||
}
|
||||
@@ -345,7 +345,10 @@ public class DhApiTerrainDataRepo implements IDhApiTerrainDataRepo
|
||||
@Nullable
|
||||
IDhApiTerrainDataCache dataCache)
|
||||
{
|
||||
return this.raycastLodData(levelWrapper, new Vec3d(rayOriginX, rayOriginY, rayOriginZ), new Vec3f(rayDirectionX, rayDirectionY, rayDirectionZ), maxRayBlockLength, dataCache);
|
||||
return this.raycastLodData(levelWrapper,
|
||||
new Vec3d(rayOriginX, rayOriginY, rayOriginZ),
|
||||
new Vec3f(rayDirectionX, rayDirectionY, rayDirectionZ),
|
||||
maxRayBlockLength, dataCache);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -363,8 +366,8 @@ public class DhApiTerrainDataRepo implements IDhApiTerrainDataRepo
|
||||
{
|
||||
rayDirection.normalize();
|
||||
|
||||
int minBlockHeight = levelWrapper.getMinHeight();
|
||||
int maxBlockHeight = levelWrapper.getMaxHeight();
|
||||
int minLevelBlockHeight = levelWrapper.getMinHeight();
|
||||
int maxLevelBlockHeight = levelWrapper.getMaxHeight();
|
||||
|
||||
|
||||
|
||||
@@ -380,7 +383,8 @@ public class DhApiTerrainDataRepo implements IDhApiTerrainDataRepo
|
||||
DhApiRaycastResult closetFoundDataPoint = null;
|
||||
|
||||
|
||||
while (blockPos.y >= minBlockHeight && blockPos.y < maxBlockHeight
|
||||
while (blockPos.y >= minLevelBlockHeight
|
||||
&& blockPos.y < maxLevelBlockHeight
|
||||
&& currentLength <= maxRayBlockLength)
|
||||
{
|
||||
// get the LOD columns around this position
|
||||
@@ -403,7 +407,8 @@ public class DhApiTerrainDataRepo implements IDhApiTerrainDataRepo
|
||||
{
|
||||
// does this LOD contain the given Y position?
|
||||
Vec3i dataPointPos = new Vec3i(columnPos.x, dataPoint.bottomYBlockPos, columnPos.z);
|
||||
if (exactPos.y >= dataPoint.bottomYBlockPos && exactPos.y <= dataPoint.topYBlockPos)
|
||||
if (exactPos.y >= dataPoint.bottomYBlockPos
|
||||
&& exactPos.y <= dataPoint.topYBlockPos)
|
||||
{
|
||||
if (closetFoundDataPoint == null)
|
||||
{
|
||||
@@ -572,12 +577,16 @@ public class DhApiTerrainDataRepo implements IDhApiTerrainDataRepo
|
||||
}
|
||||
|
||||
// draw raycast position
|
||||
if (rayCast.success && rayCast.payload != null)
|
||||
if (rayCast.success
|
||||
&& rayCast.payload != null)
|
||||
{
|
||||
DebugRenderer.makeParticle(
|
||||
new DebugRenderer.BoxParticle(
|
||||
new DebugRenderer.Box(
|
||||
DhSectionPos.encode((byte) 0, rayCast.payload.pos.x, rayCast.payload.pos.z), rayCast.payload.dataPoint.bottomYBlockPos, rayCast.payload.dataPoint.topYBlockPos, -0.1f, Color.RED),
|
||||
DhSectionPos.encode((byte) 0, rayCast.payload.pos.x, rayCast.payload.pos.z),
|
||||
rayCast.payload.dataPoint.bottomYBlockPos,
|
||||
rayCast.payload.dataPoint.topYBlockPos,
|
||||
-0.1f, Color.RED),
|
||||
1.0, 0f
|
||||
)
|
||||
);
|
||||
|
||||
@@ -23,6 +23,7 @@ import com.seibel.distanthorizons.api.DhApi;
|
||||
import com.seibel.distanthorizons.api.enums.config.EDhApiMcRenderingFadeMode;
|
||||
import com.seibel.distanthorizons.api.enums.rendering.EDhApiRenderPass;
|
||||
import com.seibel.distanthorizons.api.methods.events.abstractEvents.*;
|
||||
import com.seibel.distanthorizons.core.api.external.methods.data.DhApiTerrainDataRepo;
|
||||
import com.seibel.distanthorizons.core.api.internal.rendering.DhRenderState;
|
||||
import com.seibel.distanthorizons.core.file.structure.ClientOnlySaveStructure;
|
||||
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
|
||||
|
||||
+6
-9
@@ -92,8 +92,6 @@ public class FullDataSourceV2
|
||||
public long lastModifiedUnixDateTime;
|
||||
public long createdUnixDateTime;
|
||||
|
||||
public int levelMinY;
|
||||
|
||||
/**
|
||||
* stores how far each column has been generated should start with {@link EDhApiWorldGenerationStep#EMPTY}
|
||||
*
|
||||
@@ -299,9 +297,9 @@ public class FullDataSourceV2
|
||||
* returns {@link FullDataPointUtil#EMPTY_DATA_POINT} if the given {@link DhBlockPos}
|
||||
* is outside this data source's boundaries.
|
||||
*/
|
||||
public long getDataPointAtBlockPos(DhBlockPos blockPos)
|
||||
public long getDataPointAtBlockPos(int blockPosX, int relBlockPosY, int blockPosZ)
|
||||
{
|
||||
DhLodPos requestedPos = new DhLodPos(LodUtil.BLOCK_DETAIL_LEVEL, blockPos.getX(), blockPos.getZ());
|
||||
DhLodPos requestedPos = new DhLodPos(LodUtil.BLOCK_DETAIL_LEVEL, blockPosX, blockPosZ);
|
||||
|
||||
// stop if the requested blockPos is outside this datasource
|
||||
{
|
||||
@@ -345,14 +343,13 @@ public class FullDataSourceV2
|
||||
|
||||
|
||||
|
||||
int requestedY = blockPos.getY();
|
||||
int bottomY = FullDataPointUtil.getBottomY(dataPoint) + this.levelMinY;
|
||||
int bottomY = FullDataPointUtil.getBottomY(dataPoint);
|
||||
int height = FullDataPointUtil.getHeight(dataPoint);
|
||||
int topY = bottomY + height;
|
||||
|
||||
// does this datapoint contain the requested Y position?
|
||||
if (bottomY <= requestedY
|
||||
&& requestedY < topY) // blockPositions start from the bottom of the block, thus "<=" for bottomY, just "<" for topY
|
||||
if (bottomY <= relBlockPosY
|
||||
&& relBlockPosY < topY) // blockPositions start from the bottom of the block, thus "<=" for bottomY, just "<" for topY
|
||||
{
|
||||
return dataPoint;
|
||||
}
|
||||
@@ -1300,7 +1297,7 @@ public class FullDataSourceV2
|
||||
{
|
||||
long datapoint = dataColumn.getLong(i);
|
||||
|
||||
DhApiTerrainDataPoint apiDataPoint = DhApiTerrainDataPointUtil.createApiDatapoint(this.levelMinY, this.mapping, DhSectionPos.getDetailLevel(this.pos), datapoint);
|
||||
DhApiTerrainDataPoint apiDataPoint = DhApiTerrainDataPointUtil.createApiDatapoint(0, this.mapping, DhSectionPos.getDetailLevel(this.pos), datapoint);
|
||||
apiList.add(apiDataPoint);
|
||||
}
|
||||
|
||||
|
||||
@@ -42,6 +42,8 @@ import java.util.function.LongConsumer;
|
||||
* <strong>Too big</strong>, and the LOD dropoff will be very noticeable.<br>
|
||||
* With those thoughts in mind we decided on a smallest section size of 64 data points square (IE 4x4 chunks).
|
||||
*
|
||||
* TODO absolute vs section detail levels
|
||||
*
|
||||
* @author Leetom
|
||||
*/
|
||||
public class DhSectionPos
|
||||
|
||||
@@ -65,8 +65,6 @@ public class FullDataSourceV2DTO
|
||||
|
||||
public long pos;
|
||||
|
||||
public int levelMinY;
|
||||
|
||||
/** only for the data array */
|
||||
public int dataChecksum;
|
||||
|
||||
@@ -132,7 +130,6 @@ public class FullDataSourceV2DTO
|
||||
dto.createdUnixDateTime = dataSource.createdUnixDateTime;
|
||||
dto.applyToParent = dataSource.applyToParent;
|
||||
dto.applyToChildren = dataSource.applyToChildren;
|
||||
dto.levelMinY = dataSource.levelMinY;
|
||||
}
|
||||
|
||||
return dto;
|
||||
@@ -296,8 +293,6 @@ public class FullDataSourceV2DTO
|
||||
dataSource.lastModifiedUnixDateTime = this.lastModifiedUnixDateTime;
|
||||
dataSource.createdUnixDateTime = this.createdUnixDateTime;
|
||||
|
||||
dataSource.levelMinY = this.levelMinY;
|
||||
|
||||
dataSource.isEmpty = false;
|
||||
|
||||
if (this.applyToParent != null)
|
||||
@@ -868,7 +863,6 @@ public class FullDataSourceV2DTO
|
||||
public String toString()
|
||||
{
|
||||
return MoreObjects.toStringHelper(this)
|
||||
.add("levelMinY", this.levelMinY)
|
||||
.add("pos", DhSectionPos.toString(this.pos))
|
||||
.add("dataChecksum", this.dataChecksum)
|
||||
.add("compressedDataByteArray length", this.compressedDataByteArray.size())
|
||||
|
||||
+9
-18
@@ -98,7 +98,6 @@ public class FullDataSourceV2Repo extends AbstractDhRepo<Long, FullDataSourceV2D
|
||||
int posZ = resultSet.getInt("PosZ");
|
||||
long pos = DhSectionPos.encode(sectionDetailLevel, posX, posZ);
|
||||
|
||||
int minY = resultSet.getInt("MinY");
|
||||
int dataChecksum = resultSet.getInt("DataChecksum");
|
||||
|
||||
|
||||
@@ -145,19 +144,17 @@ public class FullDataSourceV2Repo extends AbstractDhRepo<Long, FullDataSourceV2D
|
||||
dto.createdUnixDateTime = createdUnixDateTime;
|
||||
dto.applyToParent = applyToParent;
|
||||
dto.applyToChildren = applyToChildren;
|
||||
dto.levelMinY = minY;
|
||||
}
|
||||
return dto;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public FullDataSourceV2DTO convertResultSetToAdjDto(long pos, EDhDirection direction, ResultSet resultSet) throws ClassCastException, IOException, SQLException
|
||||
public FullDataSourceV2DTO convertResultSetToAdjDto(long pos, ResultSet resultSet) throws ClassCastException, IOException, SQLException
|
||||
{
|
||||
//======================//
|
||||
// get statement values //
|
||||
//======================//
|
||||
|
||||
int minY = resultSet.getInt("MinY");
|
||||
int dataChecksum = resultSet.getInt("DataChecksum");
|
||||
|
||||
|
||||
@@ -178,17 +175,11 @@ public class FullDataSourceV2Repo extends AbstractDhRepo<Long, FullDataSourceV2D
|
||||
//===================//
|
||||
|
||||
FullDataSourceV2DTO dto = FullDataSourceV2DTO.CreateEmptyDataSourceForDecoding();
|
||||
// dto.compressedNorthAdjDataByteArray = putAllBytes(resultSet.getBinaryStream("NorthAdjData"), dto.compressedNorthAdjDataByteArray);
|
||||
// set pooled arrays
|
||||
dto.compressedDataByteArray = putAllBytes(resultSet.getBinaryStream("AdjData"), dto.compressedDataByteArray);
|
||||
dto.compressedColumnGenStepByteArray = putAllBytes(resultSet.getBinaryStream("ColumnGenerationStep"), dto.compressedColumnGenStepByteArray);
|
||||
dto.compressedWorldCompressionModeByteArray = putAllBytes(resultSet.getBinaryStream("ColumnWorldCompressionMode"), dto.compressedWorldCompressionModeByteArray);
|
||||
dto.compressedMappingByteArray = putAllBytes(resultSet.getBinaryStream("Mapping"), dto.compressedMappingByteArray);
|
||||
// adjacent full data
|
||||
//dto.compressedNorthAdjDataByteArray = putAllBytes(resultSet.getBinaryStream("NorthAdjData"), dto.compressedNorthAdjDataByteArray);
|
||||
//dto.compressedSouthAdjDataByteArray = putAllBytes(resultSet.getBinaryStream("SouthAdjData"), dto.compressedSouthAdjDataByteArray);
|
||||
//dto.compressedEastAdjDataByteArray = putAllBytes(resultSet.getBinaryStream("EastAdjData"), dto.compressedEastAdjDataByteArray);
|
||||
//dto.compressedWestAdjDataByteArray = putAllBytes(resultSet.getBinaryStream("WestAdjData"), dto.compressedWestAdjDataByteArray);
|
||||
|
||||
// set individual variables
|
||||
{
|
||||
@@ -200,7 +191,6 @@ public class FullDataSourceV2Repo extends AbstractDhRepo<Long, FullDataSourceV2D
|
||||
dto.createdUnixDateTime = createdUnixDateTime;
|
||||
dto.applyToParent = applyToParent;
|
||||
dto.applyToChildren = applyToChildren;
|
||||
dto.levelMinY = minY;
|
||||
}
|
||||
return dto;
|
||||
}
|
||||
@@ -237,7 +227,10 @@ public class FullDataSourceV2Repo extends AbstractDhRepo<Long, FullDataSourceV2D
|
||||
statement.setInt(i++, DhSectionPos.getX(dto.pos));
|
||||
statement.setInt(i++, DhSectionPos.getZ(dto.pos));
|
||||
|
||||
statement.setInt(i++, dto.levelMinY);
|
||||
statement.setInt(i++, 0); // deprecated MinY column
|
||||
// MinY is deprecated due to a bug introduced sometime before 2.3.6 where was always set to "0"
|
||||
// and due to being unused wasn't noticed until 2.3.7-dev (2025-11-15)
|
||||
|
||||
statement.setInt(i++, dto.dataChecksum);
|
||||
|
||||
statement.setBinaryStream(i++, new ByteArrayInputStream(dto.compressedDataByteArray.elements()), dto.compressedDataByteArray.size());
|
||||
@@ -272,8 +265,7 @@ public class FullDataSourceV2Repo extends AbstractDhRepo<Long, FullDataSourceV2D
|
||||
String updateSqlTemplate = (
|
||||
"UPDATE "+this.getTableName()+" \n" +
|
||||
"SET \n" +
|
||||
" MinY = ? \n" +
|
||||
" ,DataChecksum = ? \n" +
|
||||
" DataChecksum = ? \n" +
|
||||
|
||||
" ,Data = ? \n" +
|
||||
" ,ColumnGenerationStep = ? \n" +
|
||||
@@ -303,7 +295,6 @@ public class FullDataSourceV2Repo extends AbstractDhRepo<Long, FullDataSourceV2D
|
||||
|
||||
|
||||
int i = 1;
|
||||
statement.setInt(i++, dto.levelMinY);
|
||||
statement.setInt(i++, dto.dataChecksum);
|
||||
|
||||
statement.setBinaryStream(i++, new ByteArrayInputStream(dto.compressedDataByteArray.elements()), dto.compressedDataByteArray.size());
|
||||
@@ -346,7 +337,7 @@ public class FullDataSourceV2Repo extends AbstractDhRepo<Long, FullDataSourceV2D
|
||||
|
||||
private final String getAdjForDirectionSqlTemplate =
|
||||
"SELECT \n" +
|
||||
" MinY, DataChecksum, \n" +
|
||||
" DataChecksum, \n" +
|
||||
" ColumnGenerationStep, ColumnWorldCompressionMode, Mapping, \n" +
|
||||
" DataFormatVersion, CompressionMode, ApplyToParent, ApplyToChildren, \n" +
|
||||
" LastModifiedUnixDateTime, CreatedUnixDateTime, \n" +
|
||||
@@ -400,9 +391,9 @@ public class FullDataSourceV2Repo extends AbstractDhRepo<Long, FullDataSourceV2D
|
||||
try(ResultSet resultSet = this.query(statement))
|
||||
{
|
||||
if (resultSet != null
|
||||
&& resultSet.next())
|
||||
&& resultSet.next())
|
||||
{
|
||||
return this.convertResultSetToAdjDto(pos, direction, resultSet);
|
||||
return this.convertResultSetToAdjDto(pos, resultSet);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -13,8 +13,6 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.world.IBiomeWrapper;
|
||||
public class DhApiTerrainDataPointUtil
|
||||
{
|
||||
|
||||
public static DhApiTerrainDataPoint createApiDatapoint(IDhApiLevelWrapper levelWrapper, FullDataPointIdMap mapping, byte detailLevel, long dataPoint)
|
||||
{ return createApiDatapoint(levelWrapper.getMinHeight(), mapping, detailLevel, dataPoint); }
|
||||
public static DhApiTerrainDataPoint createApiDatapoint(int minLevelHeight, FullDataPointIdMap mapping, byte detailLevel, long dataPoint)
|
||||
{
|
||||
IBlockStateWrapper blockState = mapping.getBlockStateWrapper(FullDataPointUtil.getId(dataPoint));
|
||||
|
||||
Reference in New Issue
Block a user