aboutsummaryrefslogtreecommitdiff
path: root/runtime/src/main/java/me/shedaniel
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
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')
-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
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java11
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/ItemEntryDefinition.java5
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 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);
}
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 6ddaba0ba..afb0f3613 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
@@ -130,9 +130,14 @@ public class FluidEntryDefinition implements EntryDefinition<FluidStack>, EntryS
public FluidStack normalize(EntryStack<FluidStack> entry, FluidStack value) {
Fluid fluid = value.getFluid();
if (fluid instanceof FlowingFluid flowingFluid) fluid = flowingFluid.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 647d2c7dc..9b34f65d8 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
@@ -129,6 +129,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());