package net.minecraft.util; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import com.mojang.serialization.codecs.RecordCodecBuilder.Instance; import java.util.Optional; import java.util.function.Predicate; import java.util.regex.Pattern; import net.minecraft.resources.ResourceLocation; public class ResourceLocationPattern { public static final Codec CODEC = RecordCodecBuilder.create( p_261684_ -> p_261684_.group( ExtraCodecs.PATTERN.optionalFieldOf("namespace").forGetter(p_261529_ -> p_261529_.namespacePattern), ExtraCodecs.PATTERN.optionalFieldOf("path").forGetter(p_261660_ -> p_261660_.pathPattern) ) .apply(p_261684_, ResourceLocationPattern::new) ); private final Optional namespacePattern; private final Predicate namespacePredicate; private final Optional pathPattern; private final Predicate pathPredicate; private final Predicate locationPredicate; private ResourceLocationPattern(Optional p_261800_, Optional p_262131_) { this.namespacePattern = p_261800_; this.namespacePredicate = p_261800_.map(Pattern::asPredicate).orElse(p_261999_ -> true); this.pathPattern = p_262131_; this.pathPredicate = p_262131_.map(Pattern::asPredicate).orElse(p_261815_ -> true); this.locationPredicate = p_261854_ -> this.namespacePredicate.test(p_261854_.getNamespace()) && this.pathPredicate.test(p_261854_.getPath()); } public Predicate namespacePredicate() { return this.namespacePredicate; } public Predicate pathPredicate() { return this.pathPredicate; } public Predicate locationPredicate() { return this.locationPredicate; } }