public static ItemStack simulateInsertItemStackIntoInventory(IItemHandler inventory, ItemStack stack, int side, int cap) {
if (cap < 0 || cap == Integer.MAX_VALUE) {
return InventoryHelper.insertStackIntoInventory(inventory, stack, true);
}
int toInsert = cap - getNumItems(inventory, side, stack, cap);
if (toInsert <= 0) {
return stack;
}
if (stack.getCount() <= toInsert) {
return InventoryHelper.insertStackIntoInventory(inventory, stack, true);
} else {
ItemStack remaining = InventoryHelper.insertStackIntoInventory(inventory, stack.splitStack(toInsert), true);
if (!remaining.isEmpty()) {
stack.grow(remaining.getCount());
}
return stack;
}
}