diff --git a/src/main/java/org/betterx/betterend/registry/EndBiomes.java b/src/main/java/org/betterx/betterend/registry/EndBiomes.java index 3e0b1233..b80c1a3e 100644 --- a/src/main/java/org/betterx/betterend/registry/EndBiomes.java +++ b/src/main/java/org/betterx/betterend/registry/EndBiomes.java @@ -4,7 +4,9 @@ import org.betterx.bclib.api.v2.LifeCycleAPI; import org.betterx.bclib.api.v2.generator.BiomePicker; import org.betterx.bclib.api.v2.generator.map.hex.HexBiomeMap; 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.betterend.BetterEnd; import org.betterx.betterend.config.Configs; import org.betterx.betterend.world.biome.EndBiome; import org.betterx.betterend.world.biome.air.BiomeIceStarfield; @@ -60,6 +62,8 @@ public class EndBiomes { public static final EndCaveBiome JADE_CAVE = registerCaveBiome(new JadeCaveBiome()); public static void register() { + BCLBiomeRegistry.registerBiomeCodec(BetterEnd.makeID("biome"), EndBiome.KEY_CODEC); + BCLBiomeRegistry.registerBiomeCodec(BetterEnd.makeID("cave_biome"), EndCaveBiome.KEY_CODEC); LifeCycleAPI.onLevelLoad(EndBiomes::onWorldLoad); } @@ -162,4 +166,5 @@ public class EndBiomes { public static BiomePicker.ActualBiome getCaveBiome(int x, int z) { return caveBiomeMap.getBiome(x, 5, z); } + } diff --git a/src/main/java/org/betterx/betterend/world/biome/EndBiome.java b/src/main/java/org/betterx/betterend/world/biome/EndBiome.java index 4f7fc360..84582166 100644 --- a/src/main/java/org/betterx/betterend/world/biome/EndBiome.java +++ b/src/main/java/org/betterx/betterend/world/biome/EndBiome.java @@ -7,22 +7,73 @@ import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeSettings; import org.betterx.bclib.api.v2.levelgen.biomes.BiomeAPI; import org.betterx.bclib.api.v2.levelgen.surface.SurfaceRuleBuilder; import org.betterx.bclib.interfaces.SurfaceMaterialProvider; +import org.betterx.bclib.util.WeightedList; import org.betterx.betterend.BetterEnd; import org.betterx.betterend.registry.EndBlocks; import org.betterx.betterend.registry.EndFeatures; import org.betterx.betterend.registry.EndSounds; import org.betterx.betterend.registry.EndTags; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvents; +import net.minecraft.util.KeyDispatchDataCodec; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.Climate; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SurfaceRules; +import java.util.List; +import java.util.Optional; + public class EndBiome extends BCLBiome implements SurfaceMaterialProvider { + public static final Codec CODEC = RecordCodecBuilder.create(instance -> + codecWithSettings( + instance, + Codec.BOOL.fieldOf("has_caves").orElse(true).forGetter(o -> o.hasCaves) + ).apply(instance, EndBiome::new) + ); + public static final KeyDispatchDataCodec KEY_CODEC = KeyDispatchDataCodec.of(CODEC); + + @Override + public KeyDispatchDataCodec codec() { + return KEY_CODEC; + } + + protected EndBiome( + float terrainHeight, + float fogDensity, + float genChance, + int edgeSize, + boolean vertical, + Optional edge, + ResourceLocation biomeID, + Optional> parameterPoints, + Optional biomeParent, + Optional> subbiomes, + Optional intendedType, + boolean hasCaves + ) { + super( + terrainHeight, + fogDensity, + genChance, + edgeSize, + vertical, + edge, + biomeID, + parameterPoints, + biomeParent, + subbiomes, + intendedType + ); + this.hasCaves = hasCaves; + } + private boolean hasCaves = true; void setHasCaves(boolean v) { @@ -108,6 +159,7 @@ public class EndBiome extends BCLBiome implements SurfaceMaterialProvider { } } + public EndBiome(ResourceLocation biomeID, Biome biome, BCLBiomeSettings settings) { super(biomeID, biome, settings); } @@ -124,7 +176,8 @@ public class EndBiome extends BCLBiome implements SurfaceMaterialProvider { .temperature(0.5f) .wetness(0.5f) .precipitation(Biome.Precipitation.NONE) - .surface(biomeConfig.surfaceMaterial().surface().build()); + .surface(biomeConfig.surfaceMaterial().surface().build()) + .endLandBiome(); biomeConfig.addCustomBuildData(builder); EndFeatures.addDefaultFeatures(biomeConfig.ID, builder, biomeConfig.hasCaves()); diff --git a/src/main/java/org/betterx/betterend/world/biome/air/BiomeIceStarfield.java b/src/main/java/org/betterx/betterend/world/biome/air/BiomeIceStarfield.java index 39974b50..c8cd2f4b 100644 --- a/src/main/java/org/betterx/betterend/world/biome/air/BiomeIceStarfield.java +++ b/src/main/java/org/betterx/betterend/world/biome/air/BiomeIceStarfield.java @@ -29,6 +29,7 @@ public class BiomeIceStarfield extends EndBiome.Config { .particles(EndParticles.SNOWFLAKE, 0.002F) .feature(EndFeatures.ICE_STAR) .feature(EndFeatures.ICE_STAR_SMALL) - .spawn(EntityType.ENDERMAN, 20, 1, 4); + .spawn(EntityType.ENDERMAN, 20, 1, 4) + .endVoidBiome(); } } 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 ba329419..066300fe 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 @@ -13,7 +13,6 @@ public class EmptyAuroraCaveBiome extends EndCaveBiome.Config { public static class Biome extends EndCaveBiome { public Biome(ResourceLocation biomeID, net.minecraft.world.level.biome.Biome biome, BCLBiomeSettings settings) { super(biomeID, biome, settings); - this.addFloorFeature(EndFeatures.BIG_AURORA_CRYSTAL.configuredFeature, 1); this.addCeilFeature(EndFeatures.END_STONE_STALACTITE.configuredFeature, 1); 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 dccee983..231874a8 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 @@ -1,5 +1,6 @@ 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; @@ -7,22 +8,74 @@ import org.betterx.bclib.api.v3.levelgen.features.BCLFeature; import org.betterx.bclib.api.v3.levelgen.features.BCLFeatureBuilder; import org.betterx.bclib.util.WeightedList; import org.betterx.betterend.BetterEnd; +import org.betterx.betterend.registry.EndBiomes; import org.betterx.betterend.registry.EndFeatures; import org.betterx.betterend.registry.EndSounds; 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.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.core.BlockPos; import net.minecraft.core.Holder; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.KeyDispatchDataCodec; import net.minecraft.util.RandomSource; import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.Climate; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.GenerationStep; import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; +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) + ).apply(instance, EndCaveBiome::new) + ); + + public static final KeyDispatchDataCodec KEY_CODEC = KeyDispatchDataCodec.of(CODEC); + + @Override + public KeyDispatchDataCodec codec() { + return KEY_CODEC; + } + + protected EndCaveBiome( + float terrainHeight, + float fogDensity, + float genChance, + int edgeSize, + boolean vertical, + Optional edge, + ResourceLocation biomeID, + Optional> parameterPoints, + Optional biomeParent, + Optional> subbiomes, + Optional intendedType, + boolean hasCaves + ) { + super( + terrainHeight, + fogDensity, + genChance, + edgeSize, + vertical, + edge, + biomeID, + parameterPoints, + biomeParent, + subbiomes, + intendedType, + hasCaves + ); + } + public static abstract class Config extends EndBiome.Config { protected Config(String name) { super(name); @@ -45,6 +98,7 @@ public class EndCaveBiome extends EndBiome { .buildAndRegister(); builder.feature(feature) + .intendedType(EndBiomes.END_CAVE) .music(EndSounds.MUSIC_CAVES) .loop(EndSounds.AMBIENT_CAVES); }