diff options
4 files changed, 22 insertions, 26 deletions
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCraftingDisplay.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCraftingDisplay.java index 53601861d..a921b82b1 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCraftingDisplay.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCraftingDisplay.java @@ -59,7 +59,11 @@ public abstract class DefaultCraftingDisplay<C extends Recipe<?>> extends BasicD protected Optional<C> recipe; public DefaultCraftingDisplay(List<EntryIngredient> inputs, List<EntryIngredient> outputs, Optional<C> recipe) { - super(inputs, outputs, Optional.empty()); + this(inputs, outputs, recipe.map(Recipe::getId), recipe); + } + + public DefaultCraftingDisplay(List<EntryIngredient> inputs, List<EntryIngredient> outputs, Optional<ResourceLocation> location, Optional<C> recipe) { + super(inputs, outputs, location); this.recipe = recipe; } diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCustomDisplay.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCustomDisplay.java index 6d0676fdb..8f3b35dc8 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCustomDisplay.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCustomDisplay.java @@ -38,7 +38,11 @@ public class DefaultCustomDisplay extends DefaultCraftingDisplay<Recipe<?>> { private int height; public DefaultCustomDisplay(@Nullable Recipe<?> possibleRecipe, List<EntryIngredient> input, List<EntryIngredient> output) { - super(input, output, Optional.ofNullable(possibleRecipe)); + this(null, possibleRecipe, input, output); + } + + public DefaultCustomDisplay(@Nullable ResourceLocation location, @Nullable Recipe<?> possibleRecipe, List<EntryIngredient> input, List<EntryIngredient> output) { + super(input, output, Optional.ofNullable(location == null && possibleRecipe != null ? possibleRecipe.getId() : location), Optional.ofNullable(possibleRecipe)); BitSet row = new BitSet(3); BitSet column = new BitSet(3); for (int i = 0; i < 9; i++) @@ -56,7 +60,7 @@ public class DefaultCustomDisplay extends DefaultCraftingDisplay<Recipe<?>> { public static DefaultCustomDisplay simple(List<EntryIngredient> input, List<EntryIngredient> output, Optional<ResourceLocation> location) { Recipe<?> optionalRecipe = location.flatMap(resourceLocation -> RecipeManagerContext.getInstance().getRecipeManager().byKey(resourceLocation)) .orElse(null); - return new DefaultCustomDisplay(optionalRecipe, input, output); + return new DefaultCustomDisplay(location.orElse(null), optionalRecipe, input, output); } @Override diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCustomShapedDisplay.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCustomShapedDisplay.java index 8ef10b757..a8bb9f9b9 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCustomShapedDisplay.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCustomShapedDisplay.java @@ -24,6 +24,7 @@ package me.shedaniel.rei.plugin.common.displays.crafting; import me.shedaniel.rei.api.common.entry.EntryIngredient; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.crafting.Recipe; import org.jetbrains.annotations.Nullable; @@ -35,7 +36,11 @@ public class DefaultCustomShapedDisplay extends DefaultCraftingDisplay<Recipe<?> private int height; public DefaultCustomShapedDisplay(@Nullable Recipe<?> possibleRecipe, List<EntryIngredient> input, List<EntryIngredient> output, int width, int height) { - super(input, output, Optional.ofNullable(possibleRecipe)); + this(null, possibleRecipe, input, output, width, height); + } + + public DefaultCustomShapedDisplay(@Nullable ResourceLocation location, @Nullable Recipe<?> possibleRecipe, List<EntryIngredient> input, List<EntryIngredient> output, int width, int height) { + super(input, output, Optional.ofNullable(location == null && possibleRecipe != null ? possibleRecipe.getId() : location), Optional.ofNullable(possibleRecipe)); this.width = width; this.height = height; } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java index fcfc17807..c07a29072 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java @@ -24,7 +24,6 @@ package me.shedaniel.rei.impl.client.view; import com.google.common.base.Stopwatch; -import com.google.common.collect.AbstractIterator; import com.google.common.collect.Iterables; import com.google.common.collect.Maps; import com.google.common.collect.Sets; @@ -107,13 +106,13 @@ public class ViewsImpl implements Views { if (!recipesForStacks.isEmpty()) { if (isRecipesFor(recipesForStacks, display)) { set.add(display); - break; + continue; } } if (!usagesForStacks.isEmpty()) { if (isUsagesFor(usagesForStacks, display)) { set.add(display); - break; + continue; } } } @@ -243,7 +242,7 @@ public class ViewsImpl implements Views { } private static boolean checkUsages(List<EntryStack<?>> stacks, Display display, List<EntryIngredient> entries) { - for (List<? extends EntryStack<?>> results : entries) { + for (EntryIngredient results : entries) { for (EntryStack<?> otherEntry : results) { for (EntryStack<?> recipesFor : stacks) { if (EntryStacks.equalsFuzzy(otherEntry, recipesFor)) { @@ -270,24 +269,8 @@ public class ViewsImpl implements Views { } } - return Iterables.concat(successfulDisplays, applicableDisplays, () -> new AbstractIterator<Display>() { - Iterator<Display> iterator = displays.iterator(); - - @Override - protected Display computeNext() { - while (iterator.hasNext()) { - Display next = iterator.next(); - - if (successfulDisplays.contains(next) || applicableDisplays.contains(next)) { - continue; - } - - return next; - } - - return endOfData(); - } - }); + return Iterables.concat(successfulDisplays, applicableDisplays, + Iterables.filter(displays, display -> !successfulDisplays.contains(display) && !applicableDisplays.contains(display))); } private static <T extends Display> void generateLiveDisplays(DisplayRegistry displayRegistry, DynamicDisplayGenerator<T> generator, ViewSearchBuilder builder, Consumer<T> displayConsumer) { |
