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"); }