Codec for SurfaceMaterialProvider

This commit is contained in:
Frank 2022-07-09 05:13:03 +02:00
parent c56c15fc02
commit 080541345c
2 changed files with 55 additions and 0 deletions

View file

@ -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 <T extends BCLBiome, P12, P13, P14, P15> Products.P15<RecordCodecBuilder.Mu<T>, Float, Float, Float, Integer, Boolean, Optional<ResourceLocation>, ResourceLocation, Optional<List<Climate.ParameterPoint>>, Optional<ResourceLocation>, Optional<WeightedList<ResourceLocation>>, Optional<String>, P12, P13, P14, P15> codecWithSettings(
RecordCodecBuilder.Instance<T> instance,
final RecordCodecBuilder<T, P12> p12,
final RecordCodecBuilder<T, P13> p13,
final RecordCodecBuilder<T, P14> p14,
final RecordCodecBuilder<T, P15> p15
) {
CodecAttributes<T> 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 <T extends BCLBiome, P12, P13, P14> Products.P14<RecordCodecBuilder.Mu<T>, Float, Float, Float, Integer, Boolean, Optional<ResourceLocation>, ResourceLocation, Optional<List<Climate.ParameterPoint>>, Optional<ResourceLocation>, Optional<WeightedList<ResourceLocation>>, Optional<String>, P12, P13, P14> codecWithSettings(
RecordCodecBuilder.Instance<T> instance,
final RecordCodecBuilder<T, P12> p12,

View file

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