diff --git a/src/main/java/carpet/fakes/RecipeManagerInterface.java b/src/main/java/carpet/fakes/RecipeManagerInterface.java index ff130d00..78cfe428 100644 --- a/src/main/java/carpet/fakes/RecipeManagerInterface.java +++ b/src/main/java/carpet/fakes/RecipeManagerInterface.java @@ -13,5 +13,5 @@ public interface RecipeManagerInterface * Gets all the recipes for a given item. Also used for {@link carpet.helpers.HopperCounter#guessColor} to guess the * colour of an item to display it prettily */ - List> getAllMatching(final RecipeType type, final ResourceLocation output, final RegistryAccess registryAccess); + List> getAllMatching(final RecipeType type, final ResourceLocation itemId, final RegistryAccess registryAccess); } diff --git a/src/main/java/carpet/mixins/RecipeManager_scarpetMixin.java b/src/main/java/carpet/mixins/RecipeManager_scarpetMixin.java index 217e8aef..864601af 100644 --- a/src/main/java/carpet/mixins/RecipeManager_scarpetMixin.java +++ b/src/main/java/carpet/mixins/RecipeManager_scarpetMixin.java @@ -1,21 +1,18 @@ package carpet.mixins; import carpet.fakes.RecipeManagerInterface; -import com.google.common.collect.Lists; import net.minecraft.core.Registry; import net.minecraft.core.RegistryAccess; -import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; import net.minecraft.world.item.Item; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; -import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeHolder; import net.minecraft.world.item.crafting.RecipeManager; import net.minecraft.world.item.crafting.RecipeType; @@ -23,17 +20,23 @@ import net.minecraft.world.item.crafting.RecipeType; public class RecipeManager_scarpetMixin implements RecipeManagerInterface { - @Shadow private Map, Map>> recipes; + @Shadow private Map, Map>> recipes; @Override - public List> getAllMatching(RecipeType type, ResourceLocation output, final RegistryAccess registryAccess) + public List> getAllMatching(RecipeType type, ResourceLocation itemId, final RegistryAccess registryAccess) { - Map> typeRecipes = recipes.get(type); + Map> typeRecipes = recipes.get(type); // happens when mods add recipe to the registry without updating recipe manager - if (typeRecipes == null) return Collections.emptyList(); - if (typeRecipes.containsKey(output)) return Collections.singletonList(typeRecipes.get(output)); - final Registry regs = registryAccess.registryOrThrow(Registries.ITEM); - return Lists.newArrayList(typeRecipes.values().stream().filter( - r -> regs.getKey(r.getResultItem(registryAccess).getItem()).equals(output)).collect(Collectors.toList())); + if (typeRecipes == null) return List.of(); + RecipeHolder recipeFromMap = typeRecipes.get(itemId); + if (recipeFromMap != null) + return List.of(recipeFromMap.value()); + Registry regs = registryAccess.registryOrThrow(Registries.ITEM); + Item item = regs.get(itemId); + return typeRecipes.values() + .stream() + .>map(RecipeHolder::value) + .filter(r -> r.getResultItem(registryAccess).getItem() == item) + .toList(); } }