No idea why I didn't think of this before, I'm already using the onUpdate method in the Item to check if the capability is "dirty" or needs its data to be sent. onUpdate actually gives me the slot id the stack is in so I can just use that to update that specific slot on the client.