I assume a compression error, like the packet is sent uncompressed (because it's normally sent before the compression start), but the client awaits compressed packets (because the compression start packet is already sent). I tried to use ProtocolLib to send it immediately after the PacketLoginOutSuccess, this causes the client to disconnect by a client error "Packet was larger than expected". Schedule the packet (PacketLoginOutEncryptionBegin) toString ( 16 ) // Taken from .YggdrasilMinecraftSessionService.hasJoinedServer(GameProfile, String, InetAddress) String url = "" + player. captured by ProtocolLib PacketEvent (_BEGIN) String hash = new BigInteger ( PacketLoginInEncryptionBegin packet = // e.g. Taken from 1_13_R2.LoginListener.a(PacketLoginInEncryptionBegin) // This is the client packet you need to capture: Prepare the needed packet & url The PacketLoginOutEncryptionBegin : Of Course you can send the PacketLoginOutEncryptionBegin, if the server doesn't, to receive a PacketLoginInEncryptionBegin from the client to generate the hash and do the HTTP GET. S -> C | 1_13_R2.PacketLoginOutSuccessĪs you can see the needed packet PacketLoginInEncryptionBegin is not received, because the server sends no PacketLoginOutEncryptionBegin. S -> C | 1_13_R2.PacketLoginOutSetCompression S -> C | 1_13_R2.PacketLoginOutSuccess > OFFLINE S | 1_13_R2.PacketHandshakingInSetProtocol S -> C | 1_13_R2.PacketLoginOutEncryptionBegin S | 1_13_R2.PacketLoginInEncryptionBegin C | 1_13_R2.PacketLoginOutSetCompression > ONLINE S | 1_13_R2.PacketHandshakingInSetProtocolĬ -> S | 1_13_R2.PacketLoginInStart
Check the packets sent in online-mode and offline-mode, then compare them: It contains the client shared secret needed for the hash. Click to expand.The "second Encryption Response" is the PacketLoginInEncryptionBegin.