I've been getting the error described in the title i.e. "Internal Exception: io.netty.handler.codec.DecoderException: java.io.IOException: Bad packet id 64" every time I close my client and re-open it. So for example, if I go eat dinner, completely close the Minecraft program, and then try to log in again, I am unable to connect and I simply get this error. If I stop my server, and then restart I can then connect. However, it seems that I am required to completely kill my server in order to re-connect.
I'm using Cauldron to run my server so that I can have both client side and server side mods running simultaneously and from what I understand it combines forge, bukkit, and spigot to accomplish this.
Using what I know about servers and the nature of this problem it almost seems like the server is either caching the user settings somewhere or is binding the settings so that when I connect it tries to use an outdated session which results in an incorrect handshake. So I actually have a few questions to ask and if anyone can answer any of them that would be fantastic
1. Has anyone found a fix for this problem? I've done some searching and I notice a lot of people who seem to have the same problem but I don't see a solution
2. Do either spigot, bukkit, or forge cache player names/IDs/Connection settings etc. And if so is there a way to disable this or to flush the cache periodically to avoid this problem?
I also realize this could be a mod or plugin which is causing the problem therefore a full list of the mods/plugins I am using can be found on my server's website
teragentech.net/blocky_wilds (under the mods and plugins pages respectively)
I've been stuck on this one for about a week so I'm hoping I can find out what's causing the problem (as I'd like to play on my server more than once) and I fully appreciate any help provided
Ok so I MAY have solved the problem and by may, I mean my server is now working. I went into my cauldron.yml file and at the bottom were a series of settings which said "keep dimensions loaded" which means that the server is always progressing rather than having the server pause when nobody is online. I changed those settings from false to true and was able to successfully close my Minecraft client twice and then log back in just fine. I think what was happening is when the world was unloaded, the player's session data was unloaded with it, but somehow the session data was still stored somewhere else in memory so that when the handshake was done the player gets a new session number, but the old one is still loaded and there's a mis-match and then uh-oh...
curse8 look in your spigot settings and see if the problem is similar for you; hopefully this helps at least some people who were having this problem.