package net.minecraft.core; import java.util.Optional; import net.minecraft.core.Holder.Reference; import net.minecraft.core.HolderSet.Named; import net.minecraft.resources.ResourceKey; import net.minecraft.tags.TagKey; public interface HolderGetter { Optional> get(ResourceKey resourceKey); default Reference getOrThrow(ResourceKey resourceKey) { return (Reference)this.get(resourceKey).orElseThrow(() -> new IllegalStateException("Missing element " + resourceKey)); } Optional> get(TagKey tagKey); default Named getOrThrow(TagKey tagKey) { return (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 key) { return this.lookup(key.registryKey()).flatMap(holderGetter -> holderGetter.get(key)); } default Reference getOrThrow(ResourceKey key) { return (Reference)this.lookup(key.registryKey()) .flatMap(holderGetter -> holderGetter.get(key)) .orElseThrow(() -> new IllegalStateException("Missing element " + key)); } } }