A brief showcase of Minecraft in-game I2P chatting: https://www.youtube.com/watch?v=wCWTSCql5M8
In that video, you see that server knows player64 and player398 joined the server. But in the beginning, they can't send messages to each other. Also, the server doesn't know what they sent.
Player64 uses the command "!gen" to copy his connect command so he can send it to others. Player398 executed that command, and now Player398 connects to player64 and can send messages to him using I2P.
But as you see, player398 sent a message, but player64 didn't show it. Because player64 gets an incoming connection but doesn't know who it is. So player64 ignores the message.
For player64, he can't send messages to player398 because there is no outgoing connection to player398.
Then player398 uses "!gen" and player64 executes. Now, player64 is connected to player398, allowing him to: a) send messages to player398, b) knows the incoming connection is player398.
Now, you can see they can both send and receive messages over I2P, leaving the server with no idea what they said.