PaperMC / PaperMC/Velocity

Network protocol error when player is kicked during configuration

Open
#1,832 5 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

type: bug
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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.