But what's the reason for doing this? What's the overall goal?
If you look the code that saves crash report files (i.e. calls CrashReport#saveToFile), you'll see that the server uses MinecraftServer#getDataDirectory as the parent directory of the crash-reports directory and the client uses Minecraft#mcDataDir.
This should be tricky, as items placed in slot are rendered in fixed size.
I'm afraid that you might have to override the rendering code of GuiContainer.
So it's client->server update from the gui.
You need to implement tileentity syncing.
I think this post will cover your case.
You can manually read the data from the update packet with TileEntity#onDataPacket. Use it if you don't want readFromNBT to do the work. (e.g. update packet has a different format)
Override TileEntity::getRenderBoundingBox to return appropriate size of the rendered object.
If it's about rendering, you are not marking the TE as updated for rendering. I think you should call World#markAndNotifyBlock. (The flag parameter is explained on World#setBlockState)