diff --git a/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiome.java b/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiome.java index fe7a699f..0f3bf80b 100644 --- a/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiome.java +++ b/src/main/java/org/betterx/bclib/api/v2/levelgen/biomes/BCLBiome.java @@ -127,6 +127,17 @@ public class BCLBiome extends BCLBiomeSettings implements BiomeData { return instance.group(a.t0, a.t1, a.t2, a.t3, a.t4, a.t5, a.t6, a.t7, a.t8, a.t9, a.t10, p12, p13); } + public static Products.P15, Float, Float, Float, Integer, Boolean, Optional, ResourceLocation, Optional>, Optional, Optional>, Optional, P12, P13, P14, P15> codecWithSettings( + RecordCodecBuilder.Instance instance, + final RecordCodecBuilder p12, + final RecordCodecBuilder p13, + final RecordCodecBuilder p14, + final RecordCodecBuilder p15 + ) { + CodecAttributes a = new CodecAttributes<>(); + return instance.group(a.t0, a.t1, a.t2, a.t3, a.t4, a.t5, a.t6, a.t7, a.t8, a.t9, a.t10, p12, p13, p14, p15); + } + public static Products.P14, Float, Float, Float, Integer, Boolean, Optional, ResourceLocation, Optional>, Optional, Optional>, Optional, P12, P13, P14> codecWithSettings( RecordCodecBuilder.Instance instance, final RecordCodecBuilder p12, diff --git a/src/main/java/org/betterx/bclib/interfaces/SurfaceMaterialProvider.java b/src/main/java/org/betterx/bclib/interfaces/SurfaceMaterialProvider.java index c2ce3ce8..aee8f19e 100644 --- a/src/main/java/org/betterx/bclib/interfaces/SurfaceMaterialProvider.java +++ b/src/main/java/org/betterx/bclib/interfaces/SurfaceMaterialProvider.java @@ -2,9 +2,53 @@ package org.betterx.bclib.interfaces; import org.betterx.bclib.api.v2.levelgen.surface.SurfaceRuleBuilder; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.world.level.block.state.BlockState; public interface SurfaceMaterialProvider { + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance + .group( + BlockState.CODEC.fieldOf("top").forGetter(o -> o.getTopMaterial()), + BlockState.CODEC.fieldOf("under").forGetter(o -> o.getUnderMaterial()), + BlockState.CODEC.fieldOf("alt").forGetter(o -> o.getAltTopMaterial()), + Codec.BOOL.fieldOf("floor_rule").forGetter(o -> o.generateFloorRule()) + ).apply(instance, SurfaceMaterialProvider::create)); + + public static SurfaceMaterialProvider create( + BlockState top, + BlockState under, + BlockState alt, + boolean genFloorRule + ) { + return new SurfaceMaterialProvider() { + @Override + public BlockState getTopMaterial() { + return top; + } + + @Override + public BlockState getUnderMaterial() { + return under; + } + + @Override + public BlockState getAltTopMaterial() { + return alt; + } + + @Override + public boolean generateFloorRule() { + return genFloorRule; + } + + @Override + public SurfaceRuleBuilder surface() { + return null; + } + }; + } + BlockState getTopMaterial(); BlockState getUnderMaterial(); BlockState getAltTopMaterial();