aboutsummaryrefslogtreecommitdiff
path: root/runtime/src/main/java/me/shedaniel/rei/impl
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-11-21 17:21:28 +0800
committershedaniel <daniel@shedaniel.me>2021-11-21 19:07:09 +0800
commit92778560fb4e9b0f37446bb4858b0dcad23bdde6 (patch)
tree1ee8d2420c4bf9b44882c48a385930cf1c41b472 /runtime/src/main/java/me/shedaniel/rei/impl
parent30eb93c91f00c6cf8a3809ff72fa9bedaaebbc92 (diff)
downloadRoughlyEnoughItems-92778560fb4e9b0f37446bb4858b0dcad23bdde6.tar.gz
RoughlyEnoughItems-92778560fb4e9b0f37446bb4858b0dcad23bdde6.tar.bz2
RoughlyEnoughItems-92778560fb4e9b0f37446bb4858b0dcad23bdde6.zip
Add wildcard matching
Diffstat (limited to 'runtime/src/main/java/me/shedaniel/rei/impl')
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java29
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/entry/AbstractEntryStack.java5
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/types/BuiltinEntryDefinition.java5
3 files changed, 28 insertions, 11 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 3e304f41e..1d3486971 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 582590f3b..0cfb65533 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);
}