diff options
| author | shedaniel <daniel@shedaniel.me> | 2021-11-21 17:21:28 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2021-11-21 17:21:28 +0800 |
| commit | 88e9a4a3307b00ff55fc1252a9319d080a2a050b (patch) | |
| tree | 344c77d89e0bdff9f3223d52ce4f2b3c774e7e3e /runtime/src/main/java | |
| parent | 49e2087ffaae1fca37e3a76a7a486bfbe133ab36 (diff) | |
| download | RoughlyEnoughItems-88e9a4a3307b00ff55fc1252a9319d080a2a050b.tar.gz RoughlyEnoughItems-88e9a4a3307b00ff55fc1252a9319d080a2a050b.tar.bz2 RoughlyEnoughItems-88e9a4a3307b00ff55fc1252a9319d080a2a050b.zip | |
Add wildcard matching
Diffstat (limited to 'runtime/src/main/java')
5 files changed, 41 insertions, 14 deletions
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 a76cce52f..e56c68fc5 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 @@ -58,6 +58,7 @@ import org.jetbrains.annotations.ApiStatus; import java.util.*; import java.util.function.Consumer; import java.util.stream.Collectors; +import java.util.stream.Stream; @ApiStatus.Internal public class ViewsImpl implements Views { @@ -69,8 +70,14 @@ public class ViewsImpl implements Views { Stopwatch stopwatch = Stopwatch.createStarted(); Set<CategoryIdentifier<?>> categories = builder.getCategories(); - List<EntryStack<?>> recipesFor = builder.getRecipesFor(); - List<EntryStack<?>> usagesFor = builder.getUsagesFor(); + List<EntryStack<?>> recipesForStacks = builder.getRecipesFor(); + List<EntryStack<?>> usagesForStacks = builder.getUsagesFor(); + recipesForStacks = Stream.concat(recipesForStacks.stream(), recipesForStacks.stream().map(EntryStack::wildcard)) + .distinct() + .collect(Collectors.toList()); + usagesForStacks = Stream.concat(usagesForStacks.stream(), usagesForStacks.stream().map(EntryStack::wildcard)) + .distinct() + .collect(Collectors.toList()); DisplayRegistry displayRegistry = DisplayRegistry.getInstance(); Map<DisplayCategory<?>, List<Display>> result = Maps.newLinkedHashMap(); @@ -94,12 +101,12 @@ public class ViewsImpl implements Views { } for (Display display : allRecipesFromCategory) { if (!displayRegistry.isDisplayVisible(display)) continue; - if (!recipesFor.isEmpty()) { + if (!recipesForStacks.isEmpty()) { back: for (List<? extends EntryStack<?>> results : display.getOutputEntries()) { for (EntryStack<?> otherEntry : results) { - for (EntryStack<?> stack : recipesFor) { - if (EntryStacks.equalsFuzzy(otherEntry, stack)) { + for (EntryStack<?> recipesFor : recipesForStacks) { + if (EntryStacks.equalsFuzzy(otherEntry, recipesFor)) { set.add(display); break back; } @@ -107,12 +114,12 @@ public class ViewsImpl implements Views { } } } - if (!usagesFor.isEmpty()) { + if (!usagesForStacks.isEmpty()) { back: for (List<? extends EntryStack<?>> input : display.getInputEntries()) { for (EntryStack<?> otherEntry : input) { - for (EntryStack<?> stack : usagesFor) { - if (EntryStacks.equalsFuzzy(otherEntry, stack)) { + for (EntryStack<?> usagesFor : usagesForStacks) { + if (EntryStacks.equalsFuzzy(otherEntry, usagesFor)) { set.add(display); break back; } @@ -121,8 +128,8 @@ public class ViewsImpl implements Views { } } } - for (EntryStack<?> stack : usagesFor) { - if (isStackWorkStationOfCategory(categoryConfiguration, stack)) { + for (EntryStack<?> usagesFor : usagesForStacks) { + if (isStackWorkStationOfCategory(categoryConfiguration, usagesFor)) { set.addAll(CollectionUtils.filterToSet(allRecipesFromCategory, displayRegistry::isDisplayVisible)); break; } @@ -229,7 +236,7 @@ public class ViewsImpl implements Views { } String message = String.format("Built Recipe View in %s for %d categories, %d recipes for, %d usages for and %d live recipe generators.", - stopwatch.stop(), categories.size(), recipesFor.size(), usagesFor.size(), generatorsCount); + stopwatch.stop(), categories.size(), recipesForStacks.size(), usagesForStacks.size(), generatorsCount); if (ConfigObject.getInstance().doDebugSearchTimeRequired()) { RoughlyEnoughItemsCore.LOGGER.info(message); } else { diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/AbstractEntryStack.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/AbstractEntryStack.java index c95f474f4..f581fab7d 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/AbstractEntryStack.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/AbstractEntryStack.java @@ -146,6 +146,11 @@ public abstract class AbstractEntryStack<A> implements EntryStack<A>, Renderer { return wrap(getDefinition().normalize(this, getValue()), false); } + @Override + public EntryStack<A> wildcard() { + return wrap(getDefinition().wildcard(this, getValue()), false); + } + protected EntryStack<A> wrap(A value, boolean copySettings) { TypedEntryStack<A> stack = new TypedEntryStack<>(getDefinition(), value); if (copySettings) { diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/types/BuiltinEntryDefinition.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/types/BuiltinEntryDefinition.java index b02ba00f3..9efbbd5fc 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/types/BuiltinEntryDefinition.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/types/BuiltinEntryDefinition.java @@ -101,6 +101,11 @@ public class BuiltinEntryDefinition<T> implements EntryDefinition<T>, EntrySeria } @Override + public T wildcard(EntryStack<T> entry, T value) { + return value; + } + + @Override public long hash(EntryStack<T> entry, T value, ComparisonContext context) { return empty ? 0 : Objects.hash(value.getClass().getName(), value); } diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java index 5f8e52c1b..82a3a0598 100644 --- a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java +++ b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java @@ -131,9 +131,14 @@ public class FluidEntryDefinition implements EntryDefinition<FluidStack>, EntryS public FluidStack normalize(EntryStack<FluidStack> entry, FluidStack value) { Fluid fluid = value.getFluid(); if (fluid instanceof FlowingFluid) fluid = ((FlowingFluid) fluid).getSource(); - FluidStack copy = FluidStack.create(fluid, value.getAmount(), value.getTag()); - copy.setAmount(FluidStack.bucketAmount()); - return copy; + return FluidStack.create(fluid, FluidStack.bucketAmount(), value.getTag()); + } + + @Override + public FluidStack wildcard(EntryStack<FluidStack> entry, FluidStack value) { + Fluid fluid = value.getFluid(); + if (fluid instanceof FlowingFluid) fluid = ((FlowingFluid) fluid).getSource(); + return FluidStack.create(fluid, FluidStack.bucketAmount()); } @Override diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java index a2e06be66..72ce3a183 100644 --- a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java +++ b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java @@ -127,6 +127,11 @@ public class ItemEntryDefinition implements EntryDefinition<ItemStack>, EntrySer } @Override + public ItemStack wildcard(EntryStack<ItemStack> entry, ItemStack value) { + return new ItemStack(value.getItem(), 1); + } + + @Override public long hash(EntryStack<ItemStack> entry, ItemStack value, ComparisonContext context) { int code = 1; code = 31 * code + System.identityHashCode(value.getItem()); |
