Skip to content

Commit

Permalink
Fix Robot Arm Keep Exact functionality with item pipes (#2897)
Browse files Browse the repository at this point in the history
Co-authored-by: omergunr100 <24607757+omergunr100@users.noreply.github.com>
  • Loading branch information
BryanSer and omergunr100 authored Mar 2, 2025
1 parent 648324e commit 287c92b
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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();
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,15 @@
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;
import com.gregtechceu.gtceu.common.cover.RobotArmCover;
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;
Expand Down Expand Up @@ -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);
Expand All @@ -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();
}
}
Expand Down

0 comments on commit 287c92b

Please sign in to comment.