diff --git a/api/src/main/java/com/seibel/distanthorizons/api/enums/rendering/EDhApiBlockMaterial.java b/api/src/main/java/com/seibel/distanthorizons/api/enums/rendering/EDhApiBlockMaterial.java
new file mode 100644
index 000000000..076a9f92d
--- /dev/null
+++ b/api/src/main/java/com/seibel/distanthorizons/api/enums/rendering/EDhApiBlockMaterial.java
@@ -0,0 +1,53 @@
+package com.seibel.distanthorizons.api.enums.rendering;
+
+/**
+ * contains the indices used by Iris to determine how different block types should be rendered
+ *
+ * USE_OPTIFINE_FOG_SETTING,
+ * FOG_ENABLED,
+ * FOG_DISABLED
+ *
+ * @author James Seibel
+ * @since API 3.0.0
+ * @version 2024-7-11
+ */
+public enum EDhApiBlockMaterial
+{
+ UNKOWN(0),
+ LEAVES(1),
+ STONE(2),
+ WOOD(3),
+ METAL(4),
+ DIRT(5),
+ LAVA(6),
+ DEEPSLATE(7),
+ SNOW(8),
+ SAND(9),
+ TERRACOTTA(10),
+ NETHER_STONE(11),
+ WATER(12),
+ GRASS(13),
+ /** shouldn't normally be needed, but just in case */
+ AIR(14),
+ ILLUMINATED(15); // Max value
+
+
+
+ public final byte index;
+
+ EDhApiBlockMaterial(int index) { this.index = (byte)index;}
+
+ public static EDhApiBlockMaterial getFromIndex(int index)
+ {
+ for(EDhApiBlockMaterial material : EDhApiBlockMaterial.values())
+ {
+ if (material.index == index)
+ {
+ return material;
+ }
+ }
+
+ return EDhApiBlockMaterial.UNKOWN;
+ }
+
+}
diff --git a/api/src/main/java/com/seibel/distanthorizons/api/interfaces/block/IDhApiBlockStateWrapper.java b/api/src/main/java/com/seibel/distanthorizons/api/interfaces/block/IDhApiBlockStateWrapper.java
index 682b04f06..4d363005d 100644
--- a/api/src/main/java/com/seibel/distanthorizons/api/interfaces/block/IDhApiBlockStateWrapper.java
+++ b/api/src/main/java/com/seibel/distanthorizons/api/interfaces/block/IDhApiBlockStateWrapper.java
@@ -30,12 +30,20 @@ import com.seibel.distanthorizons.api.interfaces.IDhApiUnsafeWrapper;
*/
public interface IDhApiBlockStateWrapper extends IDhApiUnsafeWrapper
{
+ /** @since API 1.0.0 */
boolean isAir();
+ /** @since API 1.0.0 */
boolean isSolid();
+ /** @since API 1.0.0 */
boolean isLiquid();
- // TODO:
- // boolean hasNoCollision();
- // boolean noFaceIsFullFace();
+ /**
+ * Returns the full serialized form of the given block.
+ * @since API 3.0.0
+ */
+ String getSerialString();
+ /** @since API 3.0.0 */
+ byte getMaterialId();
+
}
diff --git a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/ColumnBox.java b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/ColumnBox.java
index edf2a4c67..0cc51e422 100644
--- a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/ColumnBox.java
+++ b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/ColumnBox.java
@@ -19,6 +19,7 @@
package com.seibel.distanthorizons.core.dataObjects.render.bufferBuilding;
+import com.seibel.distanthorizons.api.enums.rendering.EDhApiBlockMaterial;
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
import com.seibel.distanthorizons.core.enums.EDhDirection;
import com.seibel.distanthorizons.core.util.ColorUtil;
@@ -475,10 +476,10 @@ public class ColumnBox
throw new RuntimeException("Loop error");
if (previousAdjDepth > adjYMax)
{
- if (irisBlockMaterialId == IBlockStateWrapper.IrisBlockMaterial.GRASS)
+ if (irisBlockMaterialId == EDhApiBlockMaterial.GRASS.index)
{
// this LOD is underneath another, grass will never show here
- irisBlockMaterialId = IBlockStateWrapper.IrisBlockMaterial.DIRT;
+ irisBlockMaterialId = EDhApiBlockMaterial.DIRT.index;
}
builder.addQuadAdj(direction, x, adjYMax, z, horizontalWidth, (short) (previousAdjDepth - adjYMax), color, irisBlockMaterialId,
diff --git a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/CubicLodTemplate.java b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/CubicLodTemplate.java
index 87b2e7720..e0de4eb94 100644
--- a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/CubicLodTemplate.java
+++ b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/CubicLodTemplate.java
@@ -19,6 +19,7 @@
package com.seibel.distanthorizons.core.dataObjects.render.bufferBuilding;
+import com.seibel.distanthorizons.api.enums.rendering.EDhApiBlockMaterial;
import com.seibel.distanthorizons.core.config.Config;
import com.seibel.distanthorizons.core.dataObjects.render.ColumnRenderSource;
import com.seibel.distanthorizons.core.pos.DhLodPos;
@@ -95,53 +96,54 @@ public class CubicLodTemplate
}
case SHOW_BLOCK_MATERIAL:
{
- switch (blockMaterialId)
+
+ switch (EDhApiBlockMaterial.getFromIndex(blockMaterialId))
{
- case IBlockStateWrapper.IrisBlockMaterial.UNKOWN:
- case IBlockStateWrapper.IrisBlockMaterial.AIR: // shouldn't normally be rendered, but just in case
+ case UNKOWN:
+ case AIR: // shouldn't normally be rendered, but just in case
color = ColorUtil.HOT_PINK;
break;
- case IBlockStateWrapper.IrisBlockMaterial.LEAVES:
+ case LEAVES:
color = ColorUtil.DARK_GREEN;
break;
- case IBlockStateWrapper.IrisBlockMaterial.STONE:
+ case STONE:
color = ColorUtil.GRAY;
break;
- case IBlockStateWrapper.IrisBlockMaterial.WOOD:
+ case WOOD:
color = ColorUtil.BROWN;
break;
- case IBlockStateWrapper.IrisBlockMaterial.METAL:
+ case METAL:
color = ColorUtil.DARK_GRAY;
break;
- case IBlockStateWrapper.IrisBlockMaterial.DIRT:
+ case DIRT:
color = ColorUtil.LIGHT_BROWN;
break;
- case IBlockStateWrapper.IrisBlockMaterial.LAVA:
+ case LAVA:
color = ColorUtil.ORANGE;
break;
- case IBlockStateWrapper.IrisBlockMaterial.DEEPSLATE:
+ case DEEPSLATE:
color = ColorUtil.BLACK;
break;
- case IBlockStateWrapper.IrisBlockMaterial.SNOW:
+ case SNOW:
color = ColorUtil.WHITE;
break;
- case IBlockStateWrapper.IrisBlockMaterial.SAND:
+ case SAND:
color = ColorUtil.TAN;
break;
- case IBlockStateWrapper.IrisBlockMaterial.TERRACOTTA:
+ case TERRACOTTA:
color = ColorUtil.DARK_ORANGE;
break;
- case IBlockStateWrapper.IrisBlockMaterial.NETHER_STONE:
+ case NETHER_STONE:
color = ColorUtil.DARK_RED;
break;
- case IBlockStateWrapper.IrisBlockMaterial.WATER:
+ case WATER:
color = ColorUtil.BLUE;
break;
- case IBlockStateWrapper.IrisBlockMaterial.GRASS:
+ case GRASS:
color = ColorUtil.GREEN;
break;
- case IBlockStateWrapper.IrisBlockMaterial.ILLUMINATED:
+ case ILLUMINATED:
color = ColorUtil.YELLOW;
break;
diff --git a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/LodQuadBuilder.java b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/LodQuadBuilder.java
index 07744dcb9..08a593656 100644
--- a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/LodQuadBuilder.java
+++ b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/LodQuadBuilder.java
@@ -24,6 +24,7 @@ import java.nio.ByteOrder;
import java.util.*;
import com.seibel.distanthorizons.api.enums.config.EDhApiGrassSideRendering;
+import com.seibel.distanthorizons.api.enums.rendering.EDhApiBlockMaterial;
import com.seibel.distanthorizons.api.enums.rendering.EDhApiDebugRendering;
import com.seibel.distanthorizons.core.config.Config;
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
@@ -273,7 +274,7 @@ public class LodQuadBuilder
int color = quad.color;
// use custom side color logic for grass blocks
- if (quad.irisBlockMaterialId == IBlockStateWrapper.IrisBlockMaterial.GRASS)
+ if (quad.irisBlockMaterialId == EDhApiBlockMaterial.GRASS.index)
{
// only use dirt colors if debug rendering is disabled
if (this.debugRenderingMode == EDhApiDebugRendering.OFF)
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 c2b09d258..00dce89d3 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
@@ -285,7 +285,7 @@ public class FullDataToRenderDataTransformer
{
// add the block
isVoid = false;
- long columnData = RenderDataPointUtil.createDataPoint(bottomY + blockHeight, bottomY, color, skyLight, blockLight, block.getIrisBlockMaterialId());
+ long columnData = RenderDataPointUtil.createDataPoint(bottomY + blockHeight, bottomY, color, skyLight, blockLight, block.getMaterialId());
renderColumnData.set(columnOffset, columnData);
columnOffset++;
}
diff --git a/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/block/IBlockStateWrapper.java b/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/block/IBlockStateWrapper.java
index d2a442008..1d14d1b37 100644
--- a/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/block/IBlockStateWrapper.java
+++ b/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/block/IBlockStateWrapper.java
@@ -27,37 +27,6 @@ import java.awt.*;
/** A Minecraft version independent way of handling Blocks. */
public interface IBlockStateWrapper extends IDhApiBlockStateWrapper
{
- //===========//
- // constants //
- //===========//
-
- /** contains the indices used by Iris to determine how different block types should be rendered */
- class IrisBlockMaterial
- {
- public static final byte UNKOWN = 0;
- public static final byte LEAVES = 1;
- public static final byte STONE = 2;
- public static final byte WOOD = 3;
- public static final byte METAL = 4;
- public static final byte DIRT = 5;
- public static final byte LAVA = 6;
- public static final byte DEEPSLATE = 7;
- public static final byte SNOW = 8;
- public static final byte SAND = 9;
- public static final byte TERRACOTTA = 10;
- public static final byte NETHER_STONE = 11;
- public static final byte WATER = 12;
- public static final byte GRASS = 13;
-
- /** shouldn't normally be needed, but just in case */
- public static final byte AIR = 14;
- public static final byte ILLUMINATED = 15; // Max value
- }
-
-
-
-
-
//=========//
// methods //
//=========//
@@ -75,7 +44,7 @@ public interface IBlockStateWrapper extends IDhApiBlockStateWrapper
int getLightEmission();
- byte getIrisBlockMaterialId();
+ byte getMaterialId();
boolean isBeaconBlock();
boolean isBeaconBaseBlock();
diff --git a/core/src/test/java/testItems/lightingEngine/LightingTestBlockStateWrapper.java b/core/src/test/java/testItems/lightingEngine/LightingTestBlockStateWrapper.java
index 269498454..a46f50fc3 100644
--- a/core/src/test/java/testItems/lightingEngine/LightingTestBlockStateWrapper.java
+++ b/core/src/test/java/testItems/lightingEngine/LightingTestBlockStateWrapper.java
@@ -104,7 +104,7 @@ public class LightingTestBlockStateWrapper implements IBlockStateWrapper
public boolean isLiquid() { throw new UnsupportedOperationException("Not Implemented"); }
@Override
- public byte getIrisBlockMaterialId() { throw new UnsupportedOperationException("Not Implemented"); }
+ public byte getMaterialId() { throw new UnsupportedOperationException("Not Implemented"); }
@Override
public boolean isBeaconBlock() { throw new UnsupportedOperationException("Not Implemented"); }