diff options
| author | shedaniel <daniel@shedaniel.me> | 2021-03-18 02:16:22 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2021-03-18 02:16:22 +0800 |
| commit | 43ae584e12c7ed0755301eb34223f644a717183e (patch) | |
| tree | 5d5eebf04f074fcb84062e1de3a67dcef36c9600 /api/src/main | |
| parent | 4e26c83691cf4ce0a19dc2244e31bd73e551865e (diff) | |
| download | RoughlyEnoughItems-43ae584e12c7ed0755301eb34223f644a717183e.tar.gz RoughlyEnoughItems-43ae584e12c7ed0755301eb34223f644a717183e.tar.bz2 RoughlyEnoughItems-43ae584e12c7ed0755301eb34223f644a717183e.zip | |
Add EntryStack normalization
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'api/src/main')
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 */ |
