diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleItemFilter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleItemFilter.java index bf7ab9857c..77447a1d72 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleItemFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleItemFilter.java @@ -12,7 +12,6 @@ import net.minecraft.nbt.ListTag; import net.minecraft.nbt.Tag; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.items.ItemHandlerHelper; import lombok.Getter; @@ -160,9 +159,9 @@ public int getTotalConfiguredItemCount(ItemStack itemStack) { int totalCount = 0; for (var candidate : matches) { - if (ignoreNbt && ItemStack.isSameItemSameTags(candidate, itemStack)) { + if (ignoreNbt && ItemStack.isSameItem(candidate, itemStack)) { totalCount += candidate.getCount(); - } else if (ItemHandlerHelper.canItemStacksStack(candidate, itemStack)) { + } else if (ItemStack.isSameItemSameTags(candidate, itemStack)) { totalCount += candidate.getCount(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/pipelike/item/ItemNetHandler.java b/src/main/java/com/gregtechceu/gtceu/common/pipelike/item/ItemNetHandler.java index 3ce3567ee8..532efae05b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/pipelike/item/ItemNetHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/common/pipelike/item/ItemNetHandler.java @@ -4,6 +4,8 @@ import com.gregtechceu.gtceu.api.capability.ICoverable; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.cover.CoverBehavior; +import com.gregtechceu.gtceu.api.cover.filter.ItemFilter; +import com.gregtechceu.gtceu.api.cover.filter.SimpleItemFilter; import com.gregtechceu.gtceu.common.blockentity.ItemPipeBlockEntity; import com.gregtechceu.gtceu.common.cover.ConveyorCover; import com.gregtechceu.gtceu.common.cover.ItemFilterCover; @@ -11,7 +13,6 @@ import com.gregtechceu.gtceu.common.cover.data.DistributionMode; import com.gregtechceu.gtceu.common.cover.data.FilterMode; import com.gregtechceu.gtceu.utils.FacingPos; -import com.gregtechceu.gtceu.utils.ItemStackHashStrategy; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -364,15 +365,17 @@ public CoverBehavior getCoverOnNeighbour(BlockPos pos, Direction handlerFacing) public ItemStack insertOverRobotArm(IItemHandler handler, RobotArmCover arm, ItemStack stack, boolean simulate, int allowed, boolean ignoreLimit) { - int rate; - boolean isStackSpecific = false; - rate = arm.getFilterHandler().getFilter().testItemCount(stack); + int rate = arm.getFilterHandler().getFilter().testItemCount(stack); int count; switch (arm.getTransferMode()) { case TRANSFER_ANY: return insert(handler, stack, simulate, allowed, ignoreLimit); case KEEP_EXACT: - count = rate - countStack(handler, stack, arm, isStackSpecific); + if (arm.getFilterHandler().getFilter().supportsAmounts()) { + count = rate - countStack(handler, stack, arm); + } else { + count = rate; + } if (count <= 0) return stack; count = Math.min(allowed, Math.min(stack.getCount(), count)); return insert(handler, stack, simulate, count, ignoreLimit); @@ -393,14 +396,17 @@ public ItemStack insertOverRobotArm(IItemHandler handler, RobotArmCover arm, Ite return stack; } - public static int countStack(IItemHandler handler, ItemStack stack, RobotArmCover arm, boolean isStackSpecific) { + public static int countStack(IItemHandler handler, ItemStack stack, RobotArmCover arm) { if (arm == null) return 0; int count = 0; + ItemFilter filter = arm.getFilterHandler().getFilter(); + boolean ignoreNBT = filter instanceof SimpleItemFilter simple && simple.isIgnoreNbt(); for (int i = 0; i < handler.getSlots(); i++) { ItemStack slot = handler.getStackInSlot(i); if (slot.isEmpty()) continue; - if (isStackSpecific ? ItemStackHashStrategy.comparingAllButCount().equals(stack, slot) : - arm.getFilterHandler().getFilter().test(slot)) { + if (ignoreNBT && !ItemStack.isSameItem(stack, slot)) continue; + else if (!ItemStack.isSameItemSameTags(stack, slot)) continue; + if (arm.getFilterHandler().getFilter().test(slot)) { count += slot.getCount(); } }