diff --git a/src/main/java/org/betterx/betterend/registry/EndBiomes.java b/src/main/java/org/betterx/betterend/registry/EndBiomes.java index b80c1a3e..aa8649e2 100644 --- a/src/main/java/org/betterx/betterend/registry/EndBiomes.java +++ b/src/main/java/org/betterx/betterend/registry/EndBiomes.java @@ -64,6 +64,21 @@ public class EndBiomes { public static void register() { BCLBiomeRegistry.registerBiomeCodec(BetterEnd.makeID("biome"), EndBiome.KEY_CODEC); BCLBiomeRegistry.registerBiomeCodec(BetterEnd.makeID("cave_biome"), EndCaveBiome.KEY_CODEC); + BCLBiomeRegistry.registerBiomeCodec( + BetterEnd.makeID("empty_aurora_cave_biome"), + EmptyAuroraCaveBiome.KEY_CODEC + ); + BCLBiomeRegistry.registerBiomeCodec(BetterEnd.makeID("empty_end_cave_biome"), EmptyEndCaveBiome.KEY_CODEC); + BCLBiomeRegistry.registerBiomeCodec( + BetterEnd.makeID("empty_smaragdant_cave_biome"), + EmptySmaragdantCaveBiome.KEY_CODEC + ); + BCLBiomeRegistry.registerBiomeCodec(BetterEnd.makeID("jade_cave_biome"), JadeCaveBiome.KEY_CODEC); + BCLBiomeRegistry.registerBiomeCodec(BetterEnd.makeID("lush_aurora_cave_biome"), LushAuroraCaveBiome.KEY_CODEC); + BCLBiomeRegistry.registerBiomeCodec( + BetterEnd.makeID("lush_smaragdant_cave_biome"), + LushSmaragdantCaveBiome.KEY_CODEC + ); LifeCycleAPI.onLevelLoad(EndBiomes::onWorldLoad); } diff --git a/src/main/java/org/betterx/betterend/world/biome/cave/EmptyAuroraCaveBiome.java b/src/main/java/org/betterx/betterend/world/biome/cave/EmptyAuroraCaveBiome.java index 066300fe..c6cd9019 100644 --- a/src/main/java/org/betterx/betterend/world/biome/cave/EmptyAuroraCaveBiome.java +++ b/src/main/java/org/betterx/betterend/world/biome/cave/EmptyAuroraCaveBiome.java @@ -1,15 +1,28 @@ package org.betterx.betterend.world.biome.cave; +import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiome; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeBuilder; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeBuilder.BiomeSupplier; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeSettings; +import org.betterx.bclib.util.WeightedList; import org.betterx.betterend.registry.EndFeatures; import org.betterx.betterend.registry.EndParticles; import org.betterx.betterend.world.biome.EndBiome; +import com.mojang.serialization.Codec; +import net.minecraft.core.Holder; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.KeyDispatchDataCodec; +import net.minecraft.world.level.biome.Climate; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; + +import java.util.List; +import java.util.Optional; public class EmptyAuroraCaveBiome extends EndCaveBiome.Config { + public static final Codec CODEC = EndCaveBiome.simpleCaveBiomeCodec(EmptyAuroraCaveBiome.Biome::new); + public static final KeyDispatchDataCodec KEY_CODEC = KeyDispatchDataCodec.of(CODEC); + public static class Biome extends EndCaveBiome { public Biome(ResourceLocation biomeID, net.minecraft.world.level.biome.Biome biome, BCLBiomeSettings settings) { super(biomeID, biome, settings); @@ -18,6 +31,45 @@ public class EmptyAuroraCaveBiome extends EndCaveBiome.Config { this.addCeilFeature(EndFeatures.END_STONE_STALACTITE.configuredFeature, 1); } + @Override + public KeyDispatchDataCodec codec() { + return EmptyAuroraCaveBiome.KEY_CODEC; + } + + protected Biome( + float terrainHeight, + float fogDensity, + float genChance, + int edgeSize, + boolean vertical, + Optional edge, + ResourceLocation biomeID, + Optional> parameterPoints, + Optional biomeParent, + Optional> subbiomes, + Optional intendedType, + boolean hasCaves, + WeightedList>> floorFeatures, + WeightedList>> ceilFeatures + ) { + super( + terrainHeight, + fogDensity, + genChance, + edgeSize, + vertical, + edge, + biomeID, + parameterPoints, + biomeParent, + subbiomes, + intendedType, + hasCaves, + floorFeatures, + ceilFeatures + ); + } + @Override public float getFloorDensity() { return 0.01F; diff --git a/src/main/java/org/betterx/betterend/world/biome/cave/EmptyEndCaveBiome.java b/src/main/java/org/betterx/betterend/world/biome/cave/EmptyEndCaveBiome.java index 03029a15..55c3c94a 100644 --- a/src/main/java/org/betterx/betterend/world/biome/cave/EmptyEndCaveBiome.java +++ b/src/main/java/org/betterx/betterend/world/biome/cave/EmptyEndCaveBiome.java @@ -1,14 +1,27 @@ package org.betterx.betterend.world.biome.cave; +import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiome; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeBuilder; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeBuilder.BiomeSupplier; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeSettings; +import org.betterx.bclib.util.WeightedList; import org.betterx.betterend.registry.EndFeatures; import org.betterx.betterend.world.biome.EndBiome; +import com.mojang.serialization.Codec; +import net.minecraft.core.Holder; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.KeyDispatchDataCodec; +import net.minecraft.world.level.biome.Climate; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; + +import java.util.List; +import java.util.Optional; public class EmptyEndCaveBiome extends EndCaveBiome.Config { + public static final Codec CODEC = EndCaveBiome.simpleCaveBiomeCodec(EmptyEndCaveBiome.Biome::new); + public static final KeyDispatchDataCodec KEY_CODEC = KeyDispatchDataCodec.of(CODEC); + public static class Biome extends EndCaveBiome { public Biome(ResourceLocation biomeID, net.minecraft.world.level.biome.Biome biome, BCLBiomeSettings settings) { super(biomeID, biome, settings); @@ -17,6 +30,45 @@ public class EmptyEndCaveBiome extends EndCaveBiome.Config { this.addCeilFeature(EndFeatures.END_STONE_STALACTITE.configuredFeature, 1); } + @Override + public KeyDispatchDataCodec codec() { + return EmptyEndCaveBiome.KEY_CODEC; + } + + protected Biome( + float terrainHeight, + float fogDensity, + float genChance, + int edgeSize, + boolean vertical, + Optional edge, + ResourceLocation biomeID, + Optional> parameterPoints, + Optional biomeParent, + Optional> subbiomes, + Optional intendedType, + boolean hasCaves, + WeightedList>> floorFeatures, + WeightedList>> ceilFeatures + ) { + super( + terrainHeight, + fogDensity, + genChance, + edgeSize, + vertical, + edge, + biomeID, + parameterPoints, + biomeParent, + subbiomes, + intendedType, + hasCaves, + floorFeatures, + ceilFeatures + ); + } + @Override public float getFloorDensity() { return 0.1F; diff --git a/src/main/java/org/betterx/betterend/world/biome/cave/EmptySmaragdantCaveBiome.java b/src/main/java/org/betterx/betterend/world/biome/cave/EmptySmaragdantCaveBiome.java index 0a852e0e..d6c43609 100644 --- a/src/main/java/org/betterx/betterend/world/biome/cave/EmptySmaragdantCaveBiome.java +++ b/src/main/java/org/betterx/betterend/world/biome/cave/EmptySmaragdantCaveBiome.java @@ -1,15 +1,29 @@ package org.betterx.betterend.world.biome.cave; +import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiome; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeBuilder; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeBuilder.BiomeSupplier; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeSettings; +import org.betterx.bclib.util.WeightedList; import org.betterx.betterend.registry.EndFeatures; import org.betterx.betterend.registry.EndParticles; import org.betterx.betterend.world.biome.EndBiome; +import com.mojang.serialization.Codec; +import net.minecraft.core.Holder; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.KeyDispatchDataCodec; +import net.minecraft.world.level.biome.Climate; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; + +import java.util.List; +import java.util.Optional; public class EmptySmaragdantCaveBiome extends EndCaveBiome.Config { + public static final Codec CODEC = EndCaveBiome.simpleCaveBiomeCodec( + EmptySmaragdantCaveBiome.Biome::new); + public static final KeyDispatchDataCodec KEY_CODEC = KeyDispatchDataCodec.of(CODEC); + public static class Biome extends EndCaveBiome { public Biome(ResourceLocation biomeID, net.minecraft.world.level.biome.Biome biome, BCLBiomeSettings settings) { super(biomeID, biome, settings); @@ -20,6 +34,45 @@ public class EmptySmaragdantCaveBiome extends EndCaveBiome.Config { this.addCeilFeature(EndFeatures.END_STONE_STALACTITE.configuredFeature, 1); } + @Override + public KeyDispatchDataCodec codec() { + return EmptySmaragdantCaveBiome.KEY_CODEC; + } + + protected Biome( + float terrainHeight, + float fogDensity, + float genChance, + int edgeSize, + boolean vertical, + Optional edge, + ResourceLocation biomeID, + Optional> parameterPoints, + Optional biomeParent, + Optional> subbiomes, + Optional intendedType, + boolean hasCaves, + WeightedList>> floorFeatures, + WeightedList>> ceilFeatures + ) { + super( + terrainHeight, + fogDensity, + genChance, + edgeSize, + vertical, + edge, + biomeID, + parameterPoints, + biomeParent, + subbiomes, + intendedType, + hasCaves, + floorFeatures, + ceilFeatures + ); + } + @Override public float getFloorDensity() { return 0.1F; diff --git a/src/main/java/org/betterx/betterend/world/biome/cave/EndCaveBiome.java b/src/main/java/org/betterx/betterend/world/biome/cave/EndCaveBiome.java index a4f48269..9e0f79c0 100644 --- a/src/main/java/org/betterx/betterend/world/biome/cave/EndCaveBiome.java +++ b/src/main/java/org/betterx/betterend/world/biome/cave/EndCaveBiome.java @@ -15,6 +15,7 @@ import org.betterx.betterend.world.biome.EndBiome; import org.betterx.betterend.world.features.terrain.caves.CaveChunkPopulatorFeature; import org.betterx.betterend.world.features.terrain.caves.CaveChunkPopulatorFeatureConfig; +import com.mojang.datafixers.util.Function14; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.core.BlockPos; @@ -32,18 +33,22 @@ import java.util.List; import java.util.Optional; public class EndCaveBiome extends EndBiome { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> - codecWithSettings( - instance, - Codec.BOOL.fieldOf("has_caves").orElse(true).forGetter(EndBiome::hasCaves), - WeightedList.listCodec(ConfiguredFeature.CODEC, "configured_features", "configured_feature") - .fieldOf("floor_features") - .forGetter(o -> (WeightedList) ((EndCaveBiome) o).floorFeatures), - WeightedList.listCodec(ConfiguredFeature.CODEC, "configured_features", "configured_feature") - .fieldOf("ceil_features") - .forGetter(o -> (WeightedList) ((EndCaveBiome) o).ceilFeatures) - ).apply(instance, EndCaveBiome::new) - ); + public static final Codec CODEC = simpleCaveBiomeCodec(EndCaveBiome::new); + + public static Codec simpleCaveBiomeCodec(Function14, ResourceLocation, Optional>, Optional, Optional>, Optional, Boolean, WeightedList>>, WeightedList>>, T> builder) { + return RecordCodecBuilder.create(instance -> + codecWithSettings( + instance, + Codec.BOOL.fieldOf("has_caves").orElse(true).forGetter(EndBiome::hasCaves), + WeightedList.listCodec(ConfiguredFeature.CODEC, "configured_features", "configured_feature") + .fieldOf("floor_features") + .forGetter(o -> (WeightedList) ((EndCaveBiome) o).floorFeatures), + WeightedList.listCodec(ConfiguredFeature.CODEC, "configured_features", "configured_feature") + .fieldOf("ceil_features") + .forGetter(o -> (WeightedList) ((EndCaveBiome) o).ceilFeatures) + ).apply(instance, builder) + ); + } public static final KeyDispatchDataCodec KEY_CODEC = KeyDispatchDataCodec.of(CODEC); @@ -102,9 +107,8 @@ public class EndCaveBiome extends EndBiome { .configuration(new CaveChunkPopulatorFeatureConfig(ID)) .buildAndRegister() .place() - .decoration(GenerationStep.Decoration.RAW_GENERATION) + .decoration(GenerationStep.Decoration.UNDERGROUND_DECORATION) .count(1) - .onlyInBiome() .buildAndRegister(); builder.feature(feature) diff --git a/src/main/java/org/betterx/betterend/world/biome/cave/JadeCaveBiome.java b/src/main/java/org/betterx/betterend/world/biome/cave/JadeCaveBiome.java index 2d72d903..d0c66330 100644 --- a/src/main/java/org/betterx/betterend/world/biome/cave/JadeCaveBiome.java +++ b/src/main/java/org/betterx/betterend/world/biome/cave/JadeCaveBiome.java @@ -1,23 +1,37 @@ package org.betterx.betterend.world.biome.cave; +import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiome; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeBuilder; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeBuilder.BiomeSupplier; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeSettings; +import org.betterx.bclib.util.WeightedList; import org.betterx.betterend.noise.OpenSimplexNoise; import org.betterx.betterend.registry.EndBlocks; import org.betterx.betterend.world.biome.EndBiome; +import com.mojang.serialization.Codec; import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.KeyDispatchDataCodec; import net.minecraft.util.Mth; +import net.minecraft.world.level.biome.Climate; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; + +import java.util.List; +import java.util.Optional; public class JadeCaveBiome extends EndCaveBiome.Config { + public static final Codec CODEC = EndCaveBiome.simpleCaveBiomeCodec(JadeCaveBiome.Biome::new); + public static final KeyDispatchDataCodec KEY_CODEC = KeyDispatchDataCodec.of(CODEC); + public static class Biome extends EndCaveBiome { private static final OpenSimplexNoise WALL_NOISE = new OpenSimplexNoise("jade_cave".hashCode()); private static final OpenSimplexNoise DEPTH_NOISE = new OpenSimplexNoise("depth_noise".hashCode()); private static final BlockState[] JADE = new BlockState[3]; + public Biome(ResourceLocation biomeID, net.minecraft.world.level.biome.Biome biome, BCLBiomeSettings settings) { super(biomeID, biome, settings); @@ -26,6 +40,45 @@ public class JadeCaveBiome extends EndCaveBiome.Config { JADE[2] = EndBlocks.SANDY_JADESTONE.stone.defaultBlockState(); } + @Override + public KeyDispatchDataCodec codec() { + return JadeCaveBiome.KEY_CODEC; + } + + protected Biome( + float terrainHeight, + float fogDensity, + float genChance, + int edgeSize, + boolean vertical, + Optional edge, + ResourceLocation biomeID, + Optional> parameterPoints, + Optional biomeParent, + Optional> subbiomes, + Optional intendedType, + boolean hasCaves, + WeightedList>> floorFeatures, + WeightedList>> ceilFeatures + ) { + super( + terrainHeight, + fogDensity, + genChance, + edgeSize, + vertical, + edge, + biomeID, + parameterPoints, + biomeParent, + subbiomes, + intendedType, + hasCaves, + floorFeatures, + ceilFeatures + ); + } + @Override public BlockState getWall(BlockPos pos) { double depth = DEPTH_NOISE.eval(pos.getX() * 0.02, pos.getZ() * 0.02) * 0.2 + 0.5; @@ -42,6 +95,7 @@ public class JadeCaveBiome extends EndCaveBiome.Config { super("jade_cave"); } + @Override protected void addCustomBuildData(BCLBiomeBuilder builder) { super.addCustomBuildData(builder); diff --git a/src/main/java/org/betterx/betterend/world/biome/cave/LushAuroraCaveBiome.java b/src/main/java/org/betterx/betterend/world/biome/cave/LushAuroraCaveBiome.java index 4ed8c275..82456b31 100644 --- a/src/main/java/org/betterx/betterend/world/biome/cave/LushAuroraCaveBiome.java +++ b/src/main/java/org/betterx/betterend/world/biome/cave/LushAuroraCaveBiome.java @@ -1,20 +1,33 @@ package org.betterx.betterend.world.biome.cave; +import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiome; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeBuilder; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeBuilder.BiomeSupplier; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeSettings; import org.betterx.bclib.blocks.BlockProperties; import org.betterx.bclib.interfaces.SurfaceMaterialProvider; +import org.betterx.bclib.util.WeightedList; import org.betterx.betterend.registry.EndBlocks; import org.betterx.betterend.registry.EndFeatures; import org.betterx.betterend.registry.EndParticles; import org.betterx.betterend.world.biome.EndBiome; +import com.mojang.serialization.Codec; import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.KeyDispatchDataCodec; +import net.minecraft.world.level.biome.Climate; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; + +import java.util.List; +import java.util.Optional; public class LushAuroraCaveBiome extends EndCaveBiome.Config { + public static final Codec CODEC = EndCaveBiome.simpleCaveBiomeCodec(LushAuroraCaveBiome.Biome::new); + public static final KeyDispatchDataCodec KEY_CODEC = KeyDispatchDataCodec.of(CODEC); + public static class Biome extends EndCaveBiome { public Biome(ResourceLocation biomeID, net.minecraft.world.level.biome.Biome biome, BCLBiomeSettings settings) { super(biomeID, biome, settings); @@ -31,6 +44,45 @@ public class LushAuroraCaveBiome extends EndCaveBiome.Config { this.addCeilFeature(EndFeatures.END_STONE_STALACTITE_CAVEMOSS.configuredFeature, 10); } + @Override + public KeyDispatchDataCodec codec() { + return LushAuroraCaveBiome.KEY_CODEC; + } + + protected Biome( + float terrainHeight, + float fogDensity, + float genChance, + int edgeSize, + boolean vertical, + Optional edge, + ResourceLocation biomeID, + Optional> parameterPoints, + Optional biomeParent, + Optional> subbiomes, + Optional intendedType, + boolean hasCaves, + WeightedList>> floorFeatures, + WeightedList>> ceilFeatures + ) { + super( + terrainHeight, + fogDensity, + genChance, + edgeSize, + vertical, + edge, + biomeID, + parameterPoints, + biomeParent, + subbiomes, + intendedType, + hasCaves, + floorFeatures, + ceilFeatures + ); + } + @Override public float getFloorDensity() { return 0.2F; diff --git a/src/main/java/org/betterx/betterend/world/biome/cave/LushSmaragdantCaveBiome.java b/src/main/java/org/betterx/betterend/world/biome/cave/LushSmaragdantCaveBiome.java index 49db8a09..5344f308 100644 --- a/src/main/java/org/betterx/betterend/world/biome/cave/LushSmaragdantCaveBiome.java +++ b/src/main/java/org/betterx/betterend/world/biome/cave/LushSmaragdantCaveBiome.java @@ -1,18 +1,32 @@ package org.betterx.betterend.world.biome.cave; +import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiome; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeBuilder; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeBuilder.BiomeSupplier; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeSettings; import org.betterx.bclib.interfaces.SurfaceMaterialProvider; +import org.betterx.bclib.util.WeightedList; import org.betterx.betterend.registry.EndBlocks; import org.betterx.betterend.registry.EndFeatures; import org.betterx.betterend.registry.EndParticles; import org.betterx.betterend.world.biome.EndBiome; +import com.mojang.serialization.Codec; +import net.minecraft.core.Holder; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.KeyDispatchDataCodec; +import net.minecraft.world.level.biome.Climate; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; + +import java.util.List; +import java.util.Optional; public class LushSmaragdantCaveBiome extends EndCaveBiome.Config { + public static final Codec CODEC = EndCaveBiome.simpleCaveBiomeCodec( + LushSmaragdantCaveBiome.Biome::new); + public static final KeyDispatchDataCodec KEY_CODEC = KeyDispatchDataCodec.of(CODEC); + public static class Biome extends EndCaveBiome { public Biome(ResourceLocation biomeID, net.minecraft.world.level.biome.Biome biome, BCLBiomeSettings settings) { super(biomeID, biome, settings); @@ -23,6 +37,45 @@ public class LushSmaragdantCaveBiome extends EndCaveBiome.Config { this.addCeilFeature(EndFeatures.END_STONE_STALACTITE.configuredFeature, 1); } + @Override + public KeyDispatchDataCodec codec() { + return LushSmaragdantCaveBiome.KEY_CODEC; + } + + protected Biome( + float terrainHeight, + float fogDensity, + float genChance, + int edgeSize, + boolean vertical, + Optional edge, + ResourceLocation biomeID, + Optional> parameterPoints, + Optional biomeParent, + Optional> subbiomes, + Optional intendedType, + boolean hasCaves, + WeightedList>> floorFeatures, + WeightedList>> ceilFeatures + ) { + super( + terrainHeight, + fogDensity, + genChance, + edgeSize, + vertical, + edge, + biomeID, + parameterPoints, + biomeParent, + subbiomes, + intendedType, + hasCaves, + floorFeatures, + ceilFeatures + ); + } + @Override public float getFloorDensity() { return 0.1F; 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 cc4dcdb9..0029a26f 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 @@ -108,9 +108,9 @@ public abstract class EndCaveFeature extends DefaultFeature { BlocksHelper.setWithoutUpdate(world, pos, surfaceBlock); } if (density > 0 && random.nextFloat() <= density) { - ConfiguredFeature feature = biome.getFloorFeature(random).value(); - if (feature != null) { - feature.place(world, generator, random, pos.above()); + Holder> feature = biome.getFloorFeature(random); + if (feature != null && feature.isBound()) { + feature.value().place(world, generator, random, pos.above()); } } }); @@ -130,9 +130,9 @@ public abstract class EndCaveFeature extends DefaultFeature { BlocksHelper.setWithoutUpdate(world, pos, ceilBlock); } if (density > 0 && random.nextFloat() <= density) { - ConfiguredFeature feature = biome.getCeilFeature(random).value(); - if (feature != null) { - feature.place(world, generator, random, pos.below()); + Holder> feature = biome.getCeilFeature(random); + if (feature != null && feature.isBound()) { + feature.value().place(world, generator, random, pos.below()); } } }); @@ -257,7 +257,7 @@ public abstract class EndCaveFeature extends DefaultFeature { boolean hasCaves = true; if (bclBiome instanceof EndBiome endBiome) hasCaves = endBiome.hasCaves(); - + if (!hasCaves && BiomeAPI.wasRegisteredAsEndLandBiome(bclBiome.getID())) { return true; } 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 6e53110f..6a7d98f6 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 @@ -209,9 +209,9 @@ public class TunelCaveFeature extends EndCaveFeature { BlocksHelper.setWithoutUpdate(world, pos, surfaceBlock); } if (density > 0 && random.nextFloat() <= density) { - ConfiguredFeature feature = biome.getFloorFeature(random).value(); - if (feature != null) { - feature.place(world, generator, random, pos.above()); + Holder> feature = biome.getFloorFeature(random); + if (feature != null && feature.isBound()) { + feature.value().place(world, generator, random, pos.above()); } } }); @@ -232,9 +232,9 @@ public class TunelCaveFeature extends EndCaveFeature { BlocksHelper.setWithoutUpdate(world, pos, ceilBlock); } if (density > 0 && random.nextFloat() <= density) { - ConfiguredFeature feature = biome.getCeilFeature(random).value(); - if (feature != null) { - feature.place(world, generator, random, pos.below()); + Holder> feature = biome.getCeilFeature(random); + if (feature != null && feature.isBound()) { + feature.value().place(world, generator, random, pos.below()); } } });