From 6a28d9a26d9f019c9af0b755829f30b5c17a86b4 Mon Sep 17 00:00:00 2001 From: Pixirora Date: Sun, 15 Oct 2023 20:16:02 -0400 Subject: [PATCH] use either codec to make single-generator shading require less input --- .../janerator/shade/method/ShadingMethod.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/pixaurora/janerator/shade/method/ShadingMethod.java b/src/main/java/net/pixaurora/janerator/shade/method/ShadingMethod.java index 5d173fe..cb123c0 100644 --- a/src/main/java/net/pixaurora/janerator/shade/method/ShadingMethod.java +++ b/src/main/java/net/pixaurora/janerator/shade/method/ShadingMethod.java @@ -2,7 +2,9 @@ import java.util.ArrayList; import java.util.List; +import java.util.function.Function; +import com.mojang.datafixers.util.Either; import com.mojang.serialization.Codec; import net.minecraft.world.level.chunk.ChunkGenerator; @@ -12,7 +14,20 @@ public interface ShadingMethod extends SpecifiesType { public static final List> TYPES = new ArrayList<>(List.of(NormalShading.TYPE)); - public static final Codec CODEC = new SerialType.Group<>("Shading method", TYPES).dispatchCodec(); + public static final Codec BASE_CODEC = new SerialType.Group<>("Shading method", TYPES).dispatchCodec(); + public static final Codec CODEC = Codec.either( + ChunkGenerator.CODEC, + ShadingMethod.BASE_CODEC + ).xmap( + either -> either.map(NormalShading::new, Function.identity()), + shading -> { + if (shading instanceof NormalShading basicShading) { + return Either.left(basicShading.generator()); + } else { + return Either.right(shading); + } + } + ); public List shadeIn(List points);