minecraft-src/net/minecraft/core/HolderGetter.java
2025-09-18 12:27:44 +00:00

37 lines
1.5 KiB
Java

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