44import com .gregtechceu .gtceu .api .capability .ICoverable ;
55import com .gregtechceu .gtceu .api .capability .recipe .IO ;
66import com .gregtechceu .gtceu .api .cover .CoverBehavior ;
7+ import com .gregtechceu .gtceu .api .cover .filter .ItemFilter ;
8+ import com .gregtechceu .gtceu .api .cover .filter .SimpleItemFilter ;
79import com .gregtechceu .gtceu .common .blockentity .ItemPipeBlockEntity ;
810import com .gregtechceu .gtceu .common .cover .ConveyorCover ;
911import com .gregtechceu .gtceu .common .cover .ItemFilterCover ;
1012import com .gregtechceu .gtceu .common .cover .RobotArmCover ;
1113import com .gregtechceu .gtceu .common .cover .data .DistributionMode ;
1214import com .gregtechceu .gtceu .common .cover .data .FilterMode ;
1315import com .gregtechceu .gtceu .utils .FacingPos ;
14- import com .gregtechceu .gtceu .utils .ItemStackHashStrategy ;
1516
1617import net .minecraft .core .BlockPos ;
1718import 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