diff --git a/core/src/main/java/com/seibel/distanthorizons/core/config/Config.java b/core/src/main/java/com/seibel/distanthorizons/core/config/Config.java index 359403660..3bc440fe8 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/config/Config.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/config/Config.java @@ -787,7 +787,7 @@ public class Config + "Disable this if shadows render incorrectly.") .build(); - public static ConfigEntry ignoredRenderBlockCsv = new ConfigEntry.Builder() // TODO accept wildcards + public static ConfigEntry ignoredRenderBlockCsv = new ConfigEntry.Builder() .set("minecraft:barrier,minecraft:structure_void,minecraft:light,minecraft:tripwire,minecraft:brown_mushroom") .setAppearance(EConfigEntryAppearance.ONLY_IN_FILE) // only shown in file since the UI has a character limit .comment("" @@ -802,10 +802,8 @@ public class Config + "") .build(); - public static ConfigEntry ignoredRenderCaveBlockCsv = new ConfigEntry.Builder() // TODO accept wildcards - .set("minecraft:glow_lichen,minecraft:rail,minecraft:water,minecraft:lava,minecraft:bubble_column," + - "minecraft:cave_vines_plant,minecraft:vine,minecraft:cave_vines,minecraft:short_grass,minecraft:tall_grass," + - "minecraft:small_dripleaf,minecraft:big_dripleaf,minecraft:big_dripleaf_stem,minecraft:sculk_vein") + public static ConfigEntry ignoredRenderCaveBlockCsv = new ConfigEntry.Builder() + .set("") // config is empty since most cave blocks will be automatically ignored due to being: transparent, non-solid, or liquids, but new blocks can be added here if needed .setAppearance(EConfigEntryAppearance.ONLY_IN_FILE) // only shown in file since the UI has a character limit .comment("" + "A comma separated list of block resource locations that shouldn't be rendered \n" 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 2993efcb9..a2883afba 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 @@ -276,18 +276,22 @@ public class FullDataToRenderDataTransformer //====================// boolean ignoreBlock = blockStatesToIgnore.contains(block); - boolean caveBlock = caveBlockStatesToIgnore.contains(block); // TODO caves should also ignore transparent/non-solid blocks (IE grass and plants) wthout each being defined - if (caveBlock) + boolean caveBlock = caveBlockStatesToIgnore.contains(block); + if (caveBlock + // caves also ignore transparent/non-solid blocks (IE grass and plants) without each being defined + || !block.isSolid() + || block.isLiquid() + || block.getOpacity() < LodUtil.BLOCK_FULLY_OPAQUE) { if (caveCullingEnabled - // assume this data point is underground if it has no sky-light - && skyLight == LodUtil.MIN_MC_LIGHT - // ignore caves above a certain height to prevent floating islands from having walls underneath them - && topY < caveCullingMaxY - // cave culling shouldn't happen when at the top of the world - && renderDataIndex != 0 && fullDataIndex != 0 - // cave culling can't happen when at the bottom of the world - && (fullDataIndex + 1) < fullColumnData.size()) + // assume this data point is underground if it has no sky-light + && skyLight == LodUtil.MIN_MC_LIGHT + // ignore caves above a certain height to prevent floating islands from having walls underneath them + && topY < caveCullingMaxY + // cave culling shouldn't happen when at the top of the world + && renderDataIndex != 0 && fullDataIndex != 0 + // cave culling can't happen when at the bottom of the world + && (fullDataIndex + 1) < fullColumnData.size()) { // we need to get the next sky/block lights because // the air block here will always have a light of 0/0 due to only the top of the LOD's light being saved. @@ -295,7 +299,7 @@ public class FullDataToRenderDataTransformer int nextSkyLight = FullDataPointUtil.getSkyLight(nextFullData); if (nextSkyLight == LodUtil.MIN_MC_LIGHT - && ColorUtil.getAlpha(lastColor) == 255) + && ColorUtil.getAlpha(lastColor) == 255) { // replace the previous block with new bottom long columnData = renderColumnData.get(renderDataIndex - 1);