74 lines
2.8 KiB
Java
74 lines
2.8 KiB
Java
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.HolderLookup.Provider.1;
|
|
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<T> extends HolderGetter<T> {
|
|
Stream<Holder.Reference<T>> listElements();
|
|
|
|
default Stream<ResourceKey<T>> listElementIds() {
|
|
return this.listElements().map(Holder.Reference::key);
|
|
}
|
|
|
|
Stream<HolderSet.Named<T>> listTags();
|
|
|
|
default Stream<TagKey<T>> listTagIds() {
|
|
return this.listTags().map(HolderSet.Named::key);
|
|
}
|
|
|
|
public interface Provider extends HolderGetter.Provider {
|
|
Stream<ResourceKey<? extends Registry<?>>> listRegistryKeys();
|
|
|
|
default Stream<HolderLookup.RegistryLookup<?>> listRegistries() {
|
|
return this.listRegistryKeys().map(this::lookupOrThrow);
|
|
}
|
|
|
|
@Override
|
|
<T> Optional<? extends HolderLookup.RegistryLookup<T>> lookup(ResourceKey<? extends Registry<? extends T>> registryKey);
|
|
|
|
default <T> HolderLookup.RegistryLookup<T> lookupOrThrow(ResourceKey<? extends Registry<? extends T>> registryKey) {
|
|
return (HolderLookup.RegistryLookup<T>)this.lookup(registryKey)
|
|
.orElseThrow(() -> new IllegalStateException("Registry " + registryKey.location() + " not found"));
|
|
}
|
|
|
|
default <V> RegistryOps<V> createSerializationContext(DynamicOps<V> ops) {
|
|
return RegistryOps.create(ops, this);
|
|
}
|
|
|
|
static HolderLookup.Provider create(Stream<HolderLookup.RegistryLookup<?>> lookupStream) {
|
|
Map<ResourceKey<? extends Registry<?>>, HolderLookup.RegistryLookup<?>> map = (Map<ResourceKey<? extends Registry<?>>, 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<T> extends HolderLookup<T>, HolderOwner<T> {
|
|
ResourceKey<? extends Registry<? extends T>> key();
|
|
|
|
Lifecycle registryLifecycle();
|
|
|
|
default HolderLookup.RegistryLookup<T> filterFeatures(FeatureFlagSet enabledFeatures) {
|
|
return FeatureElement.FILTERED_REGISTRIES.contains(this.key()) ? this.filterElements(object -> ((FeatureElement)object).isEnabled(enabledFeatures)) : this;
|
|
}
|
|
|
|
default HolderLookup.RegistryLookup<T> filterElements(Predicate<T> predicate) {
|
|
return new net.minecraft.core.HolderLookup.RegistryLookup.1(this, predicate);
|
|
}
|
|
}
|
|
}
|