[Change] BCLBiome Data is managed in a Datapack-Aware registry now

This commit is contained in:
Frank 2022-07-07 18:53:08 +02:00
parent a1175480b3
commit 015e0969a9
5 changed files with 115 additions and 3 deletions

View file

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

View file

@ -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<EndBiome> 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<EndBiome> KEY_CODEC = KeyDispatchDataCodec.of(CODEC);
@Override
public KeyDispatchDataCodec<? extends BCLBiome> codec() {
return KEY_CODEC;
}
protected EndBiome(
float terrainHeight,
float fogDensity,
float genChance,
int edgeSize,
boolean vertical,
Optional<ResourceLocation> edge,
ResourceLocation biomeID,
Optional<List<Climate.ParameterPoint>> parameterPoints,
Optional<ResourceLocation> biomeParent,
Optional<WeightedList<ResourceLocation>> subbiomes,
Optional<String> 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());

View file

@ -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();
}
}

View file

@ -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);

View file

@ -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<EndCaveBiome> CODEC = RecordCodecBuilder.create(instance ->
codecWithSettings(
instance,
Codec.BOOL.fieldOf("has_caves").orElse(true).forGetter(EndBiome::hasCaves)
).apply(instance, EndCaveBiome::new)
);
public static final KeyDispatchDataCodec<EndCaveBiome> KEY_CODEC = KeyDispatchDataCodec.of(CODEC);
@Override
public KeyDispatchDataCodec<? extends BCLBiome> codec() {
return KEY_CODEC;
}
protected EndCaveBiome(
float terrainHeight,
float fogDensity,
float genChance,
int edgeSize,
boolean vertical,
Optional<ResourceLocation> edge,
ResourceLocation biomeID,
Optional<List<Climate.ParameterPoint>> parameterPoints,
Optional<ResourceLocation> biomeParent,
Optional<WeightedList<ResourceLocation>> subbiomes,
Optional<String> 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);
}