package net.minecraft.core.component; import java.util.stream.Stream; import javax.annotation.Nullable; public interface DataComponentHolder extends DataComponentGetter { DataComponentMap getComponents(); @Nullable @Override default T get(DataComponentType p_331483_) { return this.getComponents().get(p_331483_); } default Stream getAllOfType(Class p_361858_) { return this.getComponents() .stream() .map(TypedDataComponent::value) .filter(p_365228_ -> p_361858_.isAssignableFrom(p_365228_.getClass())) .map(p_365353_ -> (T)p_365353_); } @Override default T getOrDefault(DataComponentType p_328483_, T p_333219_) { return this.getComponents().getOrDefault(p_328483_, p_333219_); } default boolean has(DataComponentType p_333597_) { return this.getComponents().has(p_333597_); } }