minecraft-src/net/minecraft/core/HolderGetter.java
2025-07-04 02:49:36 +03:00

33 lines
1.2 KiB
Java

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<T> {
Optional<Reference<T>> get(ResourceKey<T> resourceKey);
default Reference<T> getOrThrow(ResourceKey<T> resourceKey) {
return (Reference<T>)this.get(resourceKey).orElseThrow(() -> new IllegalStateException("Missing element " + resourceKey));
}
Optional<Named<T>> get(TagKey<T> tagKey);
default Named<T> getOrThrow(TagKey<T> tagKey) {
return (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<Reference<T>> get(ResourceKey<T> key) {
return this.lookup(key.registryKey()).flatMap(holderGetter -> holderGetter.get(key));
}
}
}