Skip to content

Instantly share code, notes, and snippets.

@acrylic-style
Last active October 20, 2021 13:57
Show Gist options
  • Save acrylic-style/c8463bd24dbff0f622668c6b5fef1fad to your computer and use it in GitHub Desktop.
Save acrylic-style/c8463bd24dbff0f622668c6b5fef1fad to your computer and use it in GitHub Desktop.
MapCodec<A>/Codec<A> (in 1.18)
public static final MapCodec<MultiNoiseBiomeSource> DIRECT_CODEC = RecordCodecBuilder.mapCodec(
  (instance) -> instance.group(
    RecordCodecBuilder.create(
      (instancex) -> instancex.group(
        Climate.ParameterPoint.CODEC.fieldOf("parameters").forGetter(Pair::getFirst),
        Biome.CODEC.fieldOf("biome").forGetter(Pair::getSecond)
      ).apply(instancex, Pair::of)
    )
    .listOf()
    .xmap(Climate.ParameterList::new, Climate.ParameterList::biomes)
    .fieldOf("biomes")
    .forGetter((multiNoiseBiomeSource) -> multiNoiseBiomeSource.parameters)
  ).apply(instance, MultiNoiseBiomeSource::new)
);

becomes:

public static final MapCodec<MultiNoiseBiomeSource> DIRECT_CODEC = RecordCodecBuilder.mapCodec(
  (instance) -> instance.group(
    RecordCodecBuilder.<Pair<Climate.ParameterPoint, Supplier<Biome>>>create(
      (instancex) -> instancex.group(
        Climate.ParameterPoint.CODEC.fieldOf("parameters").forGetter(Pair<Climate.ParameterPoint, Supplier<Biome>>::getFirst),
        Biome.CODEC.fieldOf("biome").forGetter(Pair<Climate.ParameterPoint, Supplier<Biome>>::getSecond)
      ).apply(instancex, Pair::of)
    )
    .listOf()
    .xmap(Climate.ParameterList::new, Climate.ParameterList::biomes)
    .fieldOf("biomes")
    .forGetter((multiNoiseBiomeSource) -> multiNoiseBiomeSource.parameters)
  ).apply(instance, MultiNoiseBiomeSource::new)
);
private final List<Pair<Biome.ClimateParameters, Supplier<Biome>>> parameters;

Brought type parameters from Pair<F, S> inside parameters field, and added them.


public static final MapCodec<MultiNoiseBiomeSource.PresetInstance> CODEC = RecordCodecBuilder.mapCodec((instance) -> instance.group(ResourceLocation.CODEC.flatXmap((resourceLocation) -> (DataResult)Optional.ofNullable(MultiNoiseBiomeSource.Preset.BY_NAME.get(resourceLocation)).map(DataResult::success).orElseGet(() -> DataResult.error("Unknown preset: " + resourceLocation)), (preset) -> DataResult.success(preset.name)).fieldOf("preset").stable().forGetter(MultiNoiseBiomeSource.PresetInstance::preset), RegistryLookupCodec.create(Registry.BIOME_REGISTRY).forGetter(MultiNoiseBiomeSource.PresetInstance::biomes), Codec.LONG.fieldOf("seed").stable().forGetter(MultiNoiseBiomeSource.PresetInstance::seed)).apply(instance, instance.stable(MultiNoiseBiomeSource.PresetInstance::new)));

becomes:

public static final MapCodec<MultiNoiseBiomeSource.PresetInstance> CODEC = RecordCodecBuilder.mapCodec((instance) -> instance.group(ResourceLocation.CODEC.flatXmap((resourceLocation) -> Optional.ofNullable(MultiNoiseBiomeSource.Preset.BY_NAME.get(resourceLocation)).map(DataResult::success).orElseGet(() -> DataResult.error("Unknown preset: " + resourceLocation)), (preset) -> DataResult.success(preset.name)).fieldOf("preset").stable().forGetter(MultiNoiseBiomeSource.PresetInstance::preset), RegistryLookupCodec.create(Registry.BIOME_REGISTRY).forGetter(MultiNoiseBiomeSource.PresetInstance::biomes), Codec.LONG.fieldOf("seed").stable().forGetter(MultiNoiseBiomeSource.PresetInstance::seed)).apply(instance, instance.stable(MultiNoiseBiomeSource.PresetInstance::new)));

Just removed (DataResult) cast (a cast without type parameter).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment