package net.minecraft.world.level.levelgen.feature.configurations; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import java.util.List; import java.util.Optional; import net.minecraft.core.BlockPos; import net.minecraft.world.level.levelgen.feature.EndSpikeFeature; import org.jspecify.annotations.Nullable; public class EndSpikeConfiguration implements FeatureConfiguration { public static final Codec CODEC = RecordCodecBuilder.create( i -> i.group( Codec.BOOL.optionalFieldOf("crystal_invulnerable", false).forGetter(c -> c.crystalInvulnerable), EndSpikeFeature.EndSpike.CODEC.listOf().fieldOf("spikes").forGetter(c -> c.spikes), BlockPos.CODEC.optionalFieldOf("crystal_beam_target").forGetter(c -> Optional.ofNullable(c.crystalBeamTarget)) ) .apply(i, EndSpikeConfiguration::new) ); private final boolean crystalInvulnerable; private final List spikes; @Nullable private final BlockPos crystalBeamTarget; public EndSpikeConfiguration(final boolean crystalInvulnerable, final List spikes, @Nullable final BlockPos crystalBeamTarget) { this(crystalInvulnerable, spikes, Optional.ofNullable(crystalBeamTarget)); } private EndSpikeConfiguration(final boolean crystalInvulnerable, final List spikes, final Optional crystalBeamTarget) { this.crystalInvulnerable = crystalInvulnerable; this.spikes = spikes; this.crystalBeamTarget = (BlockPos)crystalBeamTarget.orElse(null); } public boolean isCrystalInvulnerable() { return this.crystalInvulnerable; } public List getSpikes() { return this.spikes; } @Nullable public BlockPos getCrystalBeamTarget() { return this.crystalBeamTarget; } }