I read quite a bit of the Minecraft source but I am by no means an expert. Based on this I would guess the hard part is implementing the actual game logic as Minecraft runs some game logic on the client and some on the server. And much of it has all kinds of weird behaviors depending on whether the outer loop for some logic is along the X and the inner loop along the Z direction or vice versa and things like that. Without decompiling and deobfuscating the game you will never get this to work correctly.
It's pretty shitty, at least 8 or so years ago. Not sure about the current state. Back then it had, for example, no length information in the header (so you always have to parse it completely and cannot skip any packet), shifted packet ids around for new releases and had a pretty odd mix of data types.