package net.minecraft.advancements.critereon; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; public record LightPredicate(MinMaxBounds.Ints composite) { public static final Codec CODEC = RecordCodecBuilder.create( instance -> instance.group(MinMaxBounds.Ints.CODEC.optionalFieldOf("light", MinMaxBounds.Ints.ANY).forGetter(LightPredicate::composite)) .apply(instance, LightPredicate::new) ); public boolean matches(ServerLevel level, BlockPos pos) { return !level.isLoaded(pos) ? false : this.composite.matches(level.getMaxLocalRawBrightness(pos)); } public static class Builder { private MinMaxBounds.Ints composite = MinMaxBounds.Ints.ANY; public static LightPredicate.Builder light() { return new LightPredicate.Builder(); } public LightPredicate.Builder setComposite(MinMaxBounds.Ints composite) { this.composite = composite; return this; } public LightPredicate build() { return new LightPredicate(this.composite); } } }