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

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