Skip to content

Commit 287c92b

Browse files
Fix Robot Arm Keep Exact functionality with item pipes (GregTechCEu#2897)
Co-authored-by: omergunr100 <[email protected]>
1 parent 648324e commit 287c92b

File tree

2 files changed

+16
-11
lines changed

2 files changed

+16
-11
lines changed

src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleItemFilter.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import net.minecraft.nbt.ListTag;
1313
import net.minecraft.nbt.Tag;
1414
import net.minecraft.world.item.ItemStack;
15-
import net.minecraftforge.items.ItemHandlerHelper;
1615

1716
import lombok.Getter;
1817

@@ -160,9 +159,9 @@ public int getTotalConfiguredItemCount(ItemStack itemStack) {
160159
int totalCount = 0;
161160

162161
for (var candidate : matches) {
163-
if (ignoreNbt && ItemStack.isSameItemSameTags(candidate, itemStack)) {
162+
if (ignoreNbt && ItemStack.isSameItem(candidate, itemStack)) {
164163
totalCount += candidate.getCount();
165-
} else if (ItemHandlerHelper.canItemStacksStack(candidate, itemStack)) {
164+
} else if (ItemStack.isSameItemSameTags(candidate, itemStack)) {
166165
totalCount += candidate.getCount();
167166
}
168167
}

src/main/java/com/gregtechceu/gtceu/common/pipelike/item/ItemNetHandler.java

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@
44
import com.gregtechceu.gtceu.api.capability.ICoverable;
55
import com.gregtechceu.gtceu.api.capability.recipe.IO;
66
import com.gregtechceu.gtceu.api.cover.CoverBehavior;
7+
import com.gregtechceu.gtceu.api.cover.filter.ItemFilter;
8+
import com.gregtechceu.gtceu.api.cover.filter.SimpleItemFilter;
79
import com.gregtechceu.gtceu.common.blockentity.ItemPipeBlockEntity;
810
import com.gregtechceu.gtceu.common.cover.ConveyorCover;
911
import com.gregtechceu.gtceu.common.cover.ItemFilterCover;
1012
import com.gregtechceu.gtceu.common.cover.RobotArmCover;
1113
import com.gregtechceu.gtceu.common.cover.data.DistributionMode;
1214
import com.gregtechceu.gtceu.common.cover.data.FilterMode;
1315
import com.gregtechceu.gtceu.utils.FacingPos;
14-
import com.gregtechceu.gtceu.utils.ItemStackHashStrategy;
1516

1617
import net.minecraft.core.BlockPos;
1718
import net.minecraft.core.Direction;
@@ -364,15 +365,17 @@ public CoverBehavior getCoverOnNeighbour(BlockPos pos, Direction handlerFacing)
364365

365366
public ItemStack insertOverRobotArm(IItemHandler handler, RobotArmCover arm, ItemStack stack, boolean simulate,
366367
int allowed, boolean ignoreLimit) {
367-
int rate;
368-
boolean isStackSpecific = false;
369-
rate = arm.getFilterHandler().getFilter().testItemCount(stack);
368+
int rate = arm.getFilterHandler().getFilter().testItemCount(stack);
370369
int count;
371370
switch (arm.getTransferMode()) {
372371
case TRANSFER_ANY:
373372
return insert(handler, stack, simulate, allowed, ignoreLimit);
374373
case KEEP_EXACT:
375-
count = rate - countStack(handler, stack, arm, isStackSpecific);
374+
if (arm.getFilterHandler().getFilter().supportsAmounts()) {
375+
count = rate - countStack(handler, stack, arm);
376+
} else {
377+
count = rate;
378+
}
376379
if (count <= 0) return stack;
377380
count = Math.min(allowed, Math.min(stack.getCount(), count));
378381
return insert(handler, stack, simulate, count, ignoreLimit);
@@ -393,14 +396,17 @@ public ItemStack insertOverRobotArm(IItemHandler handler, RobotArmCover arm, Ite
393396
return stack;
394397
}
395398

396-
public static int countStack(IItemHandler handler, ItemStack stack, RobotArmCover arm, boolean isStackSpecific) {
399+
public static int countStack(IItemHandler handler, ItemStack stack, RobotArmCover arm) {
397400
if (arm == null) return 0;
398401
int count = 0;
402+
ItemFilter filter = arm.getFilterHandler().getFilter();
403+
boolean ignoreNBT = filter instanceof SimpleItemFilter simple && simple.isIgnoreNbt();
399404
for (int i = 0; i < handler.getSlots(); i++) {
400405
ItemStack slot = handler.getStackInSlot(i);
401406
if (slot.isEmpty()) continue;
402-
if (isStackSpecific ? ItemStackHashStrategy.comparingAllButCount().equals(stack, slot) :
403-
arm.getFilterHandler().getFilter().test(slot)) {
407+
if (ignoreNBT && !ItemStack.isSameItem(stack, slot)) continue;
408+
else if (!ItemStack.isSameItemSameTags(stack, slot)) continue;
409+
if (arm.getFilterHandler().getFilter().test(slot)) {
404410
count += slot.getCount();
405411
}
406412
}

0 commit comments

Comments
 (0)