package net.minecraft.core.component; import java.util.stream.Stream; import org.jetbrains.annotations.Nullable; public interface DataComponentHolder extends DataComponentGetter { DataComponentMap getComponents(); @Nullable @Override default T get(DataComponentType component) { return this.getComponents().get(component); } default Stream getAllOfType(Class type) { return this.getComponents().stream().map(TypedDataComponent::value).filter(object -> type.isAssignableFrom(object.getClass())).map(object -> object); } @Override default T getOrDefault(DataComponentType component, T defaultValue) { return this.getComponents().getOrDefault(component, defaultValue); } default boolean has(DataComponentType component) { return this.getComponents().has(component); } }