package net.minecraft.core; import com.mojang.serialization.DynamicOps; import com.mojang.serialization.Lifecycle; import java.util.Map; import java.util.Optional; import java.util.function.Predicate; import java.util.stream.Collectors; import java.util.stream.Stream; import net.minecraft.core.Holder.Reference; import net.minecraft.core.HolderLookup.Provider.1; import net.minecraft.core.HolderSet.Named; import net.minecraft.resources.RegistryOps; import net.minecraft.resources.ResourceKey; import net.minecraft.tags.TagKey; import net.minecraft.world.flag.FeatureElement; import net.minecraft.world.flag.FeatureFlagSet; public interface HolderLookup extends HolderGetter { Stream> listElements(); default Stream> listElementIds() { return this.listElements().map(Reference::key); } Stream> listTags(); default Stream> listTagIds() { return this.listTags().map(Named::key); } public interface Provider extends HolderGetter.Provider { Stream>> listRegistryKeys(); default Stream> listRegistries() { return this.listRegistryKeys().map(this::lookupOrThrow); } @Override Optional> lookup(ResourceKey> registryKey); default HolderLookup.RegistryLookup lookupOrThrow(ResourceKey> registryKey) { return (HolderLookup.RegistryLookup)this.lookup(registryKey) .orElseThrow(() -> new IllegalStateException("Registry " + registryKey.location() + " not found")); } default RegistryOps createSerializationContext(DynamicOps ops) { return RegistryOps.create(ops, this); } static HolderLookup.Provider create(Stream> lookupStream) { Map>, HolderLookup.RegistryLookup> map = (Map>, HolderLookup.RegistryLookup>)lookupStream.collect( Collectors.toUnmodifiableMap(HolderLookup.RegistryLookup::key, registryLookup -> registryLookup) ); return new 1(map); } default Lifecycle allRegistriesLifecycle() { return (Lifecycle)this.listRegistries().map(HolderLookup.RegistryLookup::registryLifecycle).reduce(Lifecycle.stable(), Lifecycle::add); } } public interface RegistryLookup extends HolderLookup, HolderOwner { ResourceKey> key(); Lifecycle registryLifecycle(); default HolderLookup.RegistryLookup filterFeatures(FeatureFlagSet enabledFeatures) { return FeatureElement.FILTERED_REGISTRIES.contains(this.key()) ? this.filterElements(object -> ((FeatureElement)object).isEnabled(enabledFeatures)) : this; } default HolderLookup.RegistryLookup filterElements(Predicate predicate) { return new net.minecraft.core.HolderLookup.RegistryLookup.1(this, predicate); } } }