I2c RoboRio to Arduino and Back Again - I think we are missing a piece

So we have it working to send text to the Arduino from the RoboRio and that works great.
What are missing is getting a response back from the Arduino.
The code we have on the RoboRio is:

package frc.robot;

import edu.wpi.first.wpilibj.TimedRobot;
import edu.wpi.first.wpilibj.I2C;  // Import the I2C Library

public class Robot extends TimedRobot {
    
    public static I2C arduino;
  
  @Override
  public void robotInit() {
    arduino = new I2C(I2C.Port.kOnboard, 8);  //when robot turns on, assign arduino to the onboard I2C bus, and assign it port #8.
  }

  @Override
  public void testPeriodic() {
    byte[] sendData = "This is a test".getBytes();
    byte[] receiveData = new byte[sendData.length];
    arduino.transaction(sendData, sendData.length, receiveData, receiveData.length);
    System.out.println("Received" + new String(receiveData, 0, receiveData.length));
  }

}

And the Arduino code is:

#include <Wire.h>

void setup() {
  Wire.begin(8);                // join i2c bus with address #8
  Wire.onReceive(receiveEvent); // register event
  Serial.begin(9600);           // start serial for output
}

void loop() {
  delay(100);
}

// function that executes whenever data is received from master
// this function is registered as an event, see setup()
void receiveEvent()
{
  Serial.println("");
  while (Wire.available()) {
    char c = Wire.read();
    Serial.print(c);
    Wire.write(c);
}
}

So the RoboRio code seems to have everything to expect a response but I think the Arduino code is not complete.
I think we need the Wire.onRequest(requestEvent); and then:

void requestEvent()
{
   //Some code to do stuff
}

Are we on the right track and can someone please help us? Most of the Arduino code on ChiefDelphi is to run LEDs and don’t require a response from the Arduino.