package net.minecraft.world.item.crafting; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.Multimap; import com.google.common.collect.ImmutableMultimap.Builder; import java.util.Collection; import java.util.Map; import java.util.stream.Stream; import javax.annotation.Nullable; import net.minecraft.resources.ResourceKey; import net.minecraft.world.level.Level; public class RecipeMap { public static final RecipeMap EMPTY = new RecipeMap(ImmutableMultimap.of(), Map.of()); private final Multimap, RecipeHolder> byType; private final Map>, RecipeHolder> byKey; private RecipeMap(Multimap, RecipeHolder> p_370021_, Map>, RecipeHolder> p_362655_) { this.byType = p_370021_; this.byKey = p_362655_; } public static RecipeMap create(Iterable> p_369802_) { Builder, RecipeHolder> builder = ImmutableMultimap.builder(); com.google.common.collect.ImmutableMap.Builder>, RecipeHolder> builder1 = ImmutableMap.builder(); for (RecipeHolder recipeholder : p_369802_) { builder.put(recipeholder.value().getType(), recipeholder); builder1.put(recipeholder.id(), recipeholder); } return new RecipeMap(builder.build(), builder1.build()); } public > Collection> byType(RecipeType p_365239_) { return (Collection>)(Collection)this.byType.get(p_365239_); } public Collection> values() { return this.byKey.values(); } @Nullable public RecipeHolder byKey(ResourceKey> p_363032_) { return this.byKey.get(p_363032_); } public > Stream> getRecipesFor(RecipeType p_365973_, I p_364991_, Level p_364879_) { return p_364991_.isEmpty() ? Stream.empty() : this.byType(p_365973_).stream().filter(p_363912_ -> p_363912_.value().matches(p_364991_, p_364879_)); } }