diff --git a/src/main/java/aztech/modern_industrialization/machines/components/CrafterComponent.java b/src/main/java/aztech/modern_industrialization/machines/components/CrafterComponent.java index 5c79a91a2..a3d16e32b 100644 --- a/src/main/java/aztech/modern_industrialization/machines/components/CrafterComponent.java +++ b/src/main/java/aztech/modern_industrialization/machines/components/CrafterComponent.java @@ -444,7 +444,7 @@ protected boolean takeItemInputs(MachineRecipe recipe, boolean simulate) { } int remainingAmount = input.amount(); for (ConfigurableItemStack stack : stacks) { - if (stack.getAmount() > 0 && input.matches(stack.getResource().toStack())) { // TODO: ItemStack creation slow? + if (stack.getAmount() > 0 && stack.getResource().test(input.ingredient())) { int taken = Math.min((int) stack.getAmount(), remainingAmount); if (taken > 0 && !simulate) { behavior.getStatsOrDummy().addUsedItems(stack.getResource().getItem(), taken); diff --git a/src/main/java/aztech/modern_industrialization/thirdparty/fabrictransfer/api/item/ItemVariant.java b/src/main/java/aztech/modern_industrialization/thirdparty/fabrictransfer/api/item/ItemVariant.java index 13346514a..68a52839a 100644 --- a/src/main/java/aztech/modern_industrialization/thirdparty/fabrictransfer/api/item/ItemVariant.java +++ b/src/main/java/aztech/modern_industrialization/thirdparty/fabrictransfer/api/item/ItemVariant.java @@ -28,6 +28,7 @@ import aztech.modern_industrialization.thirdparty.fabrictransfer.impl.item.ItemVariantImpl; import com.mojang.serialization.Codec; import java.util.Optional; +import java.util.function.Predicate; import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtOps; @@ -80,6 +81,14 @@ static ItemVariant of(ItemLike item) { */ boolean matches(ItemStack stack); + /** + * Tests an {@link ItemStack} predicate with the inner stack. + * + * @param predicate Predicate to perform the test with + * @return {@code true} if the test passed + */ + boolean test(Predicate predicate); + /** * Return the item of this variant. */ diff --git a/src/main/java/aztech/modern_industrialization/thirdparty/fabrictransfer/impl/item/ItemVariantImpl.java b/src/main/java/aztech/modern_industrialization/thirdparty/fabrictransfer/impl/item/ItemVariantImpl.java index 85c958300..343a50712 100644 --- a/src/main/java/aztech/modern_industrialization/thirdparty/fabrictransfer/impl/item/ItemVariantImpl.java +++ b/src/main/java/aztech/modern_industrialization/thirdparty/fabrictransfer/impl/item/ItemVariantImpl.java @@ -27,6 +27,7 @@ import java.util.Map; import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Predicate; import net.minecraft.core.component.DataComponentPatch; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; @@ -78,6 +79,11 @@ public boolean matches(ItemStack stack) { return ItemStack.isSameItemSameComponents(this.stack, stack); } + @Override + public boolean test(Predicate predicate) { + return predicate.test(this.stack); + } + @Override public ItemStack toStack(int count) { return this.stack.copyWithCount(count);