Some simplification for Structure Codec handling

This commit is contained in:
Frank 2022-05-13 20:51:42 +02:00
parent b7a74e971b
commit dc7a875679

View file

@ -12,9 +12,6 @@ import net.minecraft.world.entity.MobCategory;
import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.levelgen.GenerationStep; import net.minecraft.world.level.levelgen.GenerationStep;
import net.minecraft.world.level.levelgen.structure.*; import net.minecraft.world.level.levelgen.structure.*;
import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration;
import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration;
import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier;
import net.minecraft.world.level.levelgen.structure.placement.RandomSpreadStructurePlacement; import net.minecraft.world.level.levelgen.structure.placement.RandomSpreadStructurePlacement;
import net.minecraft.world.level.levelgen.structure.placement.RandomSpreadType; import net.minecraft.world.level.levelgen.structure.placement.RandomSpreadType;
@ -42,6 +39,8 @@ public class BCLStructure<S extends Structure> {
public final StructureType<S> structureType; public final StructureType<S> structureType;
public final Codec<S> STRUCTURE_CODEC;
private static HolderSet<Biome> biomes(TagKey<Biome> tagKey) { private static HolderSet<Biome> biomes(TagKey<Biome> tagKey) {
return BuiltinRegistries.BIOME.getOrCreateTag(tagKey); return BuiltinRegistries.BIOME.getOrCreateTag(tagKey);
@ -54,21 +53,18 @@ public class BCLStructure<S extends Structure> {
return structure(tagKey, Map.of(), decoration, terrainAdjustment); return structure(tagKey, Map.of(), decoration, terrainAdjustment);
} }
public static <S extends Structure> StructureType<S> registerStructureType(ResourceLocation id, Codec<S> codec) { private static <S extends Structure> StructureType<S> registerStructureType(ResourceLocation id, Codec<S> codec) {
return Registry.register(Registry.STRUCTURE_TYPES, id, () -> codec); return Registry.register(Registry.STRUCTURE_TYPES, id, () -> codec);
} }
public BCLStructure(ResourceLocation id, Function<Structure.StructureSettings, S> structureBuilder, GenerationStep.Decoration step, int spacing, int separation, Codec<S> codec) { public BCLStructure(ResourceLocation id, Function<Structure.StructureSettings, S> structureBuilder, GenerationStep.Decoration step, int spacing, int separation) {
this(id, structureBuilder, step, spacing, separation, false, codec); this(id, structureBuilder, step, spacing, separation, false);
} }
public BCLStructure(ResourceLocation id, Function<Structure.StructureSettings, S> structureBuilder, GenerationStep.Decoration step, int spacing, int separation, boolean adaptNoise, Codec<S> codec) {
this(id, structureBuilder, step, spacing, separation, adaptNoise, registerStructureType(id, codec)); public BCLStructure(ResourceLocation id, Function<Structure.StructureSettings, S> structureBuilder, GenerationStep.Decoration step, int spacing, int separation, boolean adaptNoise) {
}
public BCLStructure(ResourceLocation id, Function<Structure.StructureSettings, S> structureBuilder, GenerationStep.Decoration step, int spacing, int separation, StructureType<S> structureType) {
this(id, structureBuilder, step, spacing, separation, false, structureType);
}
public BCLStructure(ResourceLocation id, Function<Structure.StructureSettings, S> structureBuilder, GenerationStep.Decoration step, int spacing, int separation, boolean adaptNoise, StructureType<S> structureType) {
this.id = id; this.id = id;
this.featureStep = step; this.featureStep = step;
this.STRUCTURE_CODEC = Structure.simpleCodec(structureBuilder);
//parts from vanilla for Structure generation //parts from vanilla for Structure generation
//public static final ResourceKey<ConfiguredStructure<?, ?>> JUNGLE_TEMPLE = //public static final ResourceKey<ConfiguredStructure<?, ?>> JUNGLE_TEMPLE =
// BuiltinStructures.createKey("jungle_pyramid"); // BuiltinStructures.createKey("jungle_pyramid");
@ -83,7 +79,7 @@ public class BCLStructure<S extends Structure> {
this.spreadConfig = new RandomSpreadStructurePlacement(spacing, separation, RandomSpreadType.LINEAR, RANDOM.nextInt(8192)); this.spreadConfig = new RandomSpreadStructurePlacement(spacing, separation, RandomSpreadType.LINEAR, RANDOM.nextInt(8192));
this.structureKey = ResourceKey.create(Registry.STRUCTURE_REGISTRY, id); this.structureKey = ResourceKey.create(Registry.STRUCTURE_REGISTRY, id);
this.structureSetKey = ResourceKey.create(Registry.STRUCTURE_SET_REGISTRY, id); this.structureSetKey = ResourceKey.create(Registry.STRUCTURE_SET_REGISTRY, id);
this.structureType = structureType; this.structureType = registerStructureType(id, STRUCTURE_CODEC);
this.biomeTag = TagAPI.makeBiomeTag(id.getNamespace(), "has_structure/"+id.getPath()); this.biomeTag = TagAPI.makeBiomeTag(id.getNamespace(), "has_structure/"+id.getPath());
this.baseStructure = structureBuilder.apply(structure(biomeTag, featureStep, TerrainAdjustment.NONE)); this.baseStructure = structureBuilder.apply(structure(biomeTag, featureStep, TerrainAdjustment.NONE));