Network protocol error when player is kicked during configuration
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 2.3k
- Forks
- 960
- Avg merge
- 5d 10h
- Merged PRs (30d)
- 2
Description
Expected Behavior
If I join a server that rejects my connection during the configuration phase, I expect to get kicked from that backend server as expected, velocity then would choose a new server and I get moved to a new server without problems.
Actual Behavior
If you get kicked during configuration phase, the client state gets bugged and the client thinks its receiving registry entries a second time, which Mojang doesn't allow, so the player gets kicked for an invalid network state.
I have also confirmed this on a vanilla client!
The following network crash log is generated by the client:
disconnect-2026-06-26_02.56.46-client.txt
Steps to Reproduce
Option 1:
Run my example repo: https://github.com/davidmayr/PaperMC-Velocity-Issue-Protocol-Error-During-Config
- Contains a plugin that kicks during configuration
- Contains a docker compose file for running two minecraft servers (one kicking you, one that doesn't) and a proxy with modern forwarding on 26.1.2
- Only required to build, run docker, join on 26.1.2 and see the error for yourself.
Option 2:
Create a paper plugin that kicks you during the AsyncPlayerConnectionConfigureEvent, then wait for the proxy to connect you to a different server, get kicked
Plugin List
Velocity plugins: None
Paper plugins: Kick example plugin on server 1, no plugins on server 2
Velocity Version
[00:49:53 INFO]: Velocity 3.5.0-SNAPSHOT (git-a7581821-b605)
[00:49:53 INFO]: Copyright 2018-2026 Velocity Contributors. Velocity is licensed under the terms of the GNU General Public License v3.
[00:49:53 INFO]: PaperMC - GitHub
Additional Information
Whilst I haven't looked into internals, I believe the fix would probably be to end the configuration phase after kick and immediately send the player back in the config phase for the next server?
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the failure with the linked PaperMC-Velocity-Protocol-Error-During-Config example or a plugin using AsyncPlayerConnectionConfigureEvent. Start by tracing how the proxy handles a configuration-phase kick before connecting to the next server, using the provided client crash log as evidence. Done means the player is routed to another server without the client reporting an invalid network state.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- networking
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 52/100