package net.minecraft.core; import java.util.Optional; import net.minecraft.resources.ResourceKey; import net.minecraft.tags.TagKey; public interface HolderGetter { Optional> get(ResourceKey resourceKey); default Holder.Reference getOrThrow(ResourceKey resourceKey) { return (Holder.Reference)this.get(resourceKey).orElseThrow(() -> new IllegalStateException("Missing element " + resourceKey)); } Optional> get(TagKey tagKey); default HolderSet.Named getOrThrow(TagKey tagKey) { return (HolderSet.Named)this.get(tagKey).orElseThrow(() -> new IllegalStateException("Missing tag " + tagKey)); } public interface Provider { Optional> lookup(ResourceKey> registryKey); default HolderGetter lookupOrThrow(ResourceKey> registryKey) { return (HolderGetter)this.lookup(registryKey).orElseThrow(() -> new IllegalStateException("Registry " + registryKey.location() + " not found")); } default Optional> get(ResourceKey> registryKey, ResourceKey key) { return this.lookup(registryKey).flatMap(holderGetter -> holderGetter.get(key)); } } }