From ee713cd3f5dd85391c98134a2efb8447bf0be74e Mon Sep 17 00:00:00 2001 From: Frank Date: Sat, 22 Jul 2023 13:38:25 +0200 Subject: [PATCH] [Change] Added additional logging and handling of unexpected `EndCaveBiome`behaviour (#273) --- .../terrain/caves/EndCaveFeature.java | 14 +++++++-- .../terrain/caves/TunelCaveFeature.java | 31 ++++++++++++++++--- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/betterx/betterend/world/features/terrain/caves/EndCaveFeature.java b/src/main/java/org/betterx/betterend/world/features/terrain/caves/EndCaveFeature.java index e3148a75..bc8f199e 100644 --- a/src/main/java/org/betterx/betterend/world/features/terrain/caves/EndCaveFeature.java +++ b/src/main/java/org/betterx/betterend/world/features/terrain/caves/EndCaveFeature.java @@ -5,8 +5,10 @@ import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiome; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeRegistry; import org.betterx.bclib.api.v2.levelgen.biomes.BiomeAPI; import org.betterx.bclib.api.v2.levelgen.features.features.DefaultFeature; +import org.betterx.bclib.config.Configs; import org.betterx.bclib.util.BlocksHelper; import org.betterx.bclib.util.MHelper; +import org.betterx.betterend.BetterEnd; import org.betterx.betterend.registry.EndBiomes; import org.betterx.betterend.util.BlockFixer; import org.betterx.betterend.world.biome.EndBiome; @@ -36,6 +38,7 @@ import java.util.List; import java.util.Set; public abstract class EndCaveFeature extends DefaultFeature { + private static int errCounter = 0; protected static final BlockState CAVE_AIR = Blocks.CAVE_AIR.defaultBlockState(); protected static final BlockState END_STONE = Blocks.END_STONE.defaultBlockState(); protected static final BlockState WATER = Blocks.WATER.defaultBlockState(); @@ -83,9 +86,14 @@ public abstract class EndCaveFeature extends DefaultFeature { }); BlockState surfaceBlock = EndBiome.findTopMaterial(biome.bclBiome); - placeFloor(world, generator, (EndCaveBiome) biome.bclBiome, floorPositions, random, surfaceBlock); - placeCeil(world, generator, (EndCaveBiome) biome.bclBiome, ceilPositions, random); - placeWalls(world, generator, (EndCaveBiome) biome.bclBiome, caveBlocks, random); + if (biome.bclBiome instanceof EndCaveBiome caveBiome) { + placeFloor(world, generator, (EndCaveBiome) biome.bclBiome, floorPositions, random, surfaceBlock); + placeCeil(world, generator, (EndCaveBiome) biome.bclBiome, ceilPositions, random); + placeWalls(world, generator, (EndCaveBiome) biome.bclBiome, caveBlocks, random); + } else if (Configs.MAIN_CONFIG.verboseLogging() && errCounter < 25) { + errCounter++; + BetterEnd.LOGGER.error(biome.bclBiome.getID() + " is not an EndCaveBiome."); + } } fixBlocks(world, caveBlocks); } diff --git a/src/main/java/org/betterx/betterend/world/features/terrain/caves/TunelCaveFeature.java b/src/main/java/org/betterx/betterend/world/features/terrain/caves/TunelCaveFeature.java index a3494fa6..4414e953 100644 --- a/src/main/java/org/betterx/betterend/world/features/terrain/caves/TunelCaveFeature.java +++ b/src/main/java/org/betterx/betterend/world/features/terrain/caves/TunelCaveFeature.java @@ -3,7 +3,9 @@ package org.betterx.betterend.world.features.terrain.caves; import org.betterx.bclib.api.v2.generator.BiomePicker; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiome; import org.betterx.bclib.api.v2.levelgen.biomes.BiomeAPI; +import org.betterx.bclib.config.Configs; import org.betterx.bclib.util.BlocksHelper; +import org.betterx.betterend.BetterEnd; import org.betterx.betterend.noise.OpenSimplexNoise; import org.betterx.betterend.registry.EndBiomes; import org.betterx.betterend.world.biome.EndBiome; @@ -36,6 +38,10 @@ import java.util.Set; import java.util.stream.IntStream; public class TunelCaveFeature extends EndCaveFeature { + private static int tunnelFloorErrCounter = 0; + private static int tunnelCeilErrCounter = 0; + private static int tunnelWallErrCounter = 0; + private Set generate(WorldGenLevel world, BlockPos center, RandomSource random) { int cx = center.getX() >> 4; int cz = center.getZ() >> 4; @@ -147,7 +153,7 @@ public class TunelCaveFeature extends EndCaveFeature { int height = world.getHeight(Types.WORLD_SURFACE, bpos.getX(), bpos.getZ()); if (mut.getY() >= height) { remove.add(bpos); - } else if (world.getBlockState(mut).canBeReplaced()){ + } else if (world.getBlockState(mut).canBeReplaced()) { mut.setY(bpos.getY() - 1); if (world.getBlockState(mut).is(CommonBlockTags.GEN_END_STONES)) { Set floorPositions = floorSets.get(bio); @@ -176,14 +182,29 @@ public class TunelCaveFeature extends EndCaveFeature { } floorSets.forEach((biome, floorPositions) -> { - BlockState surfaceBlock = EndBiome.findTopMaterial(biome.bclBiome); - placeFloor(world, generator, (EndCaveBiome) biome.bclBiome, floorPositions, random, surfaceBlock); + if (biome.bclBiome instanceof EndCaveBiome caveBiome) { + BlockState surfaceBlock = EndBiome.findTopMaterial(biome.bclBiome); + placeFloor(world, generator, caveBiome, floorPositions, random, surfaceBlock); + } else if (Configs.MAIN_CONFIG.verboseLogging() && tunnelFloorErrCounter < 25) { + tunnelFloorErrCounter++; + BetterEnd.LOGGER.error(biome.bclBiome.getID() + " is not an EndCaveBiome. Unable to place Tunnel Floor"); + } }); ceilSets.forEach((biome, ceilPositions) -> { - placeCeil(world, generator, (EndCaveBiome) biome.bclBiome, ceilPositions, random); + if (biome.bclBiome instanceof EndCaveBiome caveBiome) { + placeCeil(world, generator, caveBiome, ceilPositions, random); + } else if (Configs.MAIN_CONFIG.verboseLogging() && tunnelCeilErrCounter < 25) { + tunnelCeilErrCounter++; + BetterEnd.LOGGER.error(biome.bclBiome.getID() + " is not an EndCaveBiome. Unable to place Tunnel Ceiling"); + } }); BiomePicker.ActualBiome biome = EndBiomes.getCaveBiome(pos.getX(), pos.getZ()); - placeWalls(world, generator, (EndCaveBiome) biome.bclBiome, caveBlocks, random); + if (biome.bclBiome instanceof EndCaveBiome caveBiome) { + placeWalls(world, generator, caveBiome, caveBlocks, random); + } else if (Configs.MAIN_CONFIG.verboseLogging() && tunnelWallErrCounter < 25) { + tunnelWallErrCounter++; + BetterEnd.LOGGER.error(biome.bclBiome.getID() + " is not an EndCaveBiome. Unable to place Tunnel Walls"); + } fixBlocks(world, caveBlocks); return true;