aboutsummaryrefslogtreecommitdiff
path: root/api
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-03-18 02:16:22 +0800
committershedaniel <daniel@shedaniel.me>2021-03-18 02:16:22 +0800
commit43ae584e12c7ed0755301eb34223f644a717183e (patch)
tree5d5eebf04f074fcb84062e1de3a67dcef36c9600 /api
parent4e26c83691cf4ce0a19dc2244e31bd73e551865e (diff)
downloadRoughlyEnoughItems-43ae584e12c7ed0755301eb34223f644a717183e.tar.gz
RoughlyEnoughItems-43ae584e12c7ed0755301eb34223f644a717183e.tar.bz2
RoughlyEnoughItems-43ae584e12c7ed0755301eb34223f644a717183e.zip
Add EntryStack normalization
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'api')
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/ingredient/EntryStack.java7
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/ingredient/entry/EntryDefinition.java2
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/ingredient/entry/EntryTypeRegistry.java13
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/ingredient/util/EntryStacks.java17
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/registry/display/Display.java1
5 files changed, 27 insertions, 13 deletions
diff --git a/api/src/main/java/me/shedaniel/rei/api/ingredient/EntryStack.java b/api/src/main/java/me/shedaniel/rei/api/ingredient/EntryStack.java
index eb8adb020..d39bd4dde 100644
--- a/api/src/main/java/me/shedaniel/rei/api/ingredient/EntryStack.java
+++ b/api/src/main/java/me/shedaniel/rei/api/ingredient/EntryStack.java
@@ -43,7 +43,6 @@ import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.GsonHelper;
import net.minecraft.util.Unit;
import org.jetbrains.annotations.ApiStatus;
-import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
@@ -99,20 +98,16 @@ public interface EntryStack<T> extends TextRepresentable, Renderer {
return null;
}
- @NotNull
EntryDefinition<T> getDefinition();
- @NotNull
default EntryType<T> getType() {
return getDefinition().getType();
}
- @NotNull
default Class<T> getValueType() {
return getDefinition().getValueType();
}
- @NotNull
default EntryRenderer<T> getRenderer() {
return getDefinition().getRenderer();
}
@@ -128,6 +123,8 @@ public interface EntryStack<T> extends TextRepresentable, Renderer {
return copy();
}
+ EntryStack<T> normalize();
+
@Deprecated
int hashCode();
diff --git a/api/src/main/java/me/shedaniel/rei/api/ingredient/entry/EntryDefinition.java b/api/src/main/java/me/shedaniel/rei/api/ingredient/entry/EntryDefinition.java
index a7d893b42..faa35334a 100644
--- a/api/src/main/java/me/shedaniel/rei/api/ingredient/entry/EntryDefinition.java
+++ b/api/src/main/java/me/shedaniel/rei/api/ingredient/entry/EntryDefinition.java
@@ -45,6 +45,8 @@ public interface EntryDefinition<T> {
T copy(EntryStack<T> entry, T value);
+ T normalize(EntryStack<T> entry, T value);
+
int hash(EntryStack<T> entry, T value, ComparisonContext context);
boolean equals(T o1, T o2, ComparisonContext context);
diff --git a/api/src/main/java/me/shedaniel/rei/api/ingredient/entry/EntryTypeRegistry.java b/api/src/main/java/me/shedaniel/rei/api/ingredient/entry/EntryTypeRegistry.java
index 2397b46a5..eb11722dc 100644
--- a/api/src/main/java/me/shedaniel/rei/api/ingredient/entry/EntryTypeRegistry.java
+++ b/api/src/main/java/me/shedaniel/rei/api/ingredient/entry/EntryTypeRegistry.java
@@ -79,6 +79,19 @@ public interface EntryTypeRegistry extends Reloadable {
Set<EntryDefinition<?>> values();
+ /**
+ * Register a bridge between two entry types, for example, item to fluid, this is used, to
+ * approximately match two entry stacks,.
+ * <p>
+ * For bridging two entry types, only 1 one way bridge is required, two way bridges are discouraged
+ * for performance issues.
+ *
+ * @param original the original entry type
+ * @param destination the destination entry type
+ * @param bridge the bridge to bridge between the original and the destination types
+ * @param <A> the type of the original entry type
+ * @param <B> the type of the destination entry type
+ */
<A, B> void registerBridge(EntryType<A> original, EntryType<B> destination, EntryTypeBridge<A, B> bridge);
<A, B> Iterable<EntryTypeBridge<A, B>> getBridgesFor(EntryType<A> original, EntryType<B> destination);
diff --git a/api/src/main/java/me/shedaniel/rei/api/ingredient/util/EntryStacks.java b/api/src/main/java/me/shedaniel/rei/api/ingredient/util/EntryStacks.java
index 51618ecc8..cf6eb454d 100644
--- a/api/src/main/java/me/shedaniel/rei/api/ingredient/util/EntryStacks.java
+++ b/api/src/main/java/me/shedaniel/rei/api/ingredient/util/EntryStacks.java
@@ -29,6 +29,7 @@ import me.shedaniel.architectury.utils.Fraction;
import me.shedaniel.rei.api.gui.Renderer;
import me.shedaniel.rei.api.ingredient.EntryStack;
import me.shedaniel.rei.api.ingredient.entry.*;
+import net.minecraft.world.InteractionResult;
import net.minecraft.world.InteractionResultHolder;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.Ingredient;
@@ -138,27 +139,29 @@ public final class EntryStacks {
if (left == right) return true;
EntryType<A> leftType = left.getType();
EntryType<B> rightType = right.getType();
- if (leftType == rightType)
+ if (leftType == rightType) {
return left.equals((EntryStack<A>) right, context);
+ }
+ if (context == ComparisonContext.EXACT) return false;
for (EntryTypeBridge<A, B> bridge : EntryTypeRegistry.getInstance().getBridgesFor(leftType, rightType)) {
InteractionResultHolder<Stream<EntryStack<B>>> holder = bridge.bridge(left);
- if (holder.getResult().shouldSwing()) {
+ if (holder.getResult() == InteractionResult.SUCCESS) {
Iterator<EntryStack<B>> iterator = holder.getObject().iterator();
while (iterator.hasNext()) {
- EntryStack<B> bridged = iterator.next();
- if (bridged.equals(right, context))
+ if (iterator.next().equals(right, context)) {
return true;
+ }
}
}
}
for (EntryTypeBridge<B, A> bridge : EntryTypeRegistry.getInstance().getBridgesFor(rightType, leftType)) {
InteractionResultHolder<Stream<EntryStack<A>>> holder = bridge.bridge(right);
- if (holder.getResult().shouldSwing()) {
+ if (holder.getResult() == InteractionResult.SUCCESS) {
Iterator<EntryStack<A>> iterator = holder.getObject().iterator();
while (iterator.hasNext()) {
- EntryStack<A> bridged = iterator.next();
- if (bridged.equals(left, context))
+ if (iterator.next().equals(left, context)) {
return true;
+ }
}
}
}
diff --git a/api/src/main/java/me/shedaniel/rei/api/registry/display/Display.java b/api/src/main/java/me/shedaniel/rei/api/registry/display/Display.java
index 8f131ca3f..8eb95728c 100644
--- a/api/src/main/java/me/shedaniel/rei/api/registry/display/Display.java
+++ b/api/src/main/java/me/shedaniel/rei/api/registry/display/Display.java
@@ -30,7 +30,6 @@ import java.util.List;
import java.util.Optional;
public interface Display {
-
/**
* @return a list of inputs
*/